Isem
Окт. 7, 2010 09:59:02
Забыли еще один вариант:
>>> import re
>>> sa = 'abc32def2A3'
>>> re.sub('.\d+', lambda x: x.group()[0]*int(x.group()[1:]), sa)
'abccccccccccccccccccccccccccccccccdeffAAA'
Ну а по поводу догматизма и демагогии можно почитать тут:
http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%B3%D0%BC%D0%B0тут:
http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%B3%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%BCи тут:
http://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BC%D0%B0%D0%B3%D0%BE%D0%B3%D0%B8%D1%8F
breidos
Окт. 7, 2010 11:30:37
Ребята, это хорошо что вы пишите разные короткие версии, но мне бы для начала свою сделать чтобы работала, а потом уже упрощать ее.
breidos
Вот добавил в одном месте = и ответ вывел
Это не ответ пока, к сожалению. Перечитайте мой пост и попробуйте сделать так, как я советовал. Если что непонятно - спрашивайте.
PS: Вот этот пост:
http://www.python.su/forum/viewtopic.php?pid=57102#p57102 Может вы просто пропустили его как-нибудь?
breidos
Окт. 7, 2010 14:58:07
Вот если так сделать:
x="Z15x33A2"
i=0
k=''
l=''
res=''
while i<len(x):
try:
if int(x[i]):
k+=x[i]
res=l*int(k)
except:
print res,
k=''
l=x[i]
i+=1
то ответ будет:
>>>
ZZZZZZZZZZZZZZZ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>>>
Если поставить = в том месте где выше я писал то он
>>>
ZZZZZZZZZZZZZZZ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx AA
+ еще ошибку выдает - string index out of range
С этим мы еще разберемся. Ответ у вас с пробелом, чего не должно быть, то есть программа еще не делает то, что нужно.
Позволю себе еще раз обратить внимание на мой пост, а именно на фразы “проверить есть ли у вас предыдущая буква(ее нужно запомнить в переменной, а не выводить) и число”, “добавить буква*число к результату” и “Результат вывести после цикла”.
Если вы внимательно посмотрите на ваш код, то ни проверки ни добавления к результату ни вывода после цикла там не обнаружите. Попробуйте все-таки сделать это все и покажите чего получилось. Да, вывод будет неполным, но мы это попробуем победить.
И еще: использование try/except без указания исключения, которое ловим - очень серьезная ошибка, так нельзя делать ни в коем случае. Попробуйте использовать isdigit, как тут советовали, либо указывайте исключение явно.
breidos
Окт. 7, 2010 16:00:06
Вот что у меня получилось: Ответ выводит без пробела, но неполный, ошибок не показывает. А
Ed
“проверить есть ли у вас предыдущая буква(ее нужно запомнить в переменной, а не выводить) и число”
я так и непонял как написать.
x="Z15x33A2"
i=0
k=''
l=''
res=''
otvet=""
while i<len(x):
try:
if int(x[i]):
k+=x[i]
res=l*int(k)
except:
k=''
l=x[i]
otvet+=res
i+=1
print otvet
Хорошо. Только otvet не нужен, постарайтесь обойтись res. И res=l*int(k) не нужно делать на каждую цифру, это совершенно лишнее. Достаточно сделать там, где появилась следующая буква. В этом случае у нас в k уже будет весь множитель.
И с try/except разберитесь.
Проверить есть ли у нас уже буква и число просто - нужно проверить не пусты ли у нас k и l. Если мы в них что-то прочитали уже, то они не будут пустыми. Эта проверка позволит отловить случаи, когда формат строки неверен, например строка начинается с числа.
breidos
Окт. 18, 2010 20:18:11
x="Z15x33A2"
i=0
k=''
l=''
res=''
while i<=len(x):
try:
if int(x[i]):
k+=x[i]
res=l*int(k)
except:
print res,
k=''
l=x[i]
i+=1
Блин, кто могет помогите, пишу так и неполучается доделать :(