Форум сайта python.su
6
breidos
breidosraw_input
input() - вводить можно только числовые значения? Ато я ввожу текст и он ругается.
Офлайн
13
Кстати, а какой из вариантов нужен автору топика? Считать в строке в целом или по группам?
Офлайн
0
Ребята, вот пытаюсь сделать такое: строку вида - Z5x3A2 преобразовало в ZZZZZxxxAA. Тут нюанс в том, что числа могут быть 2/3/… значными, как бы это отловить?
Вот пользуюсь таким кодом, но он ругается после того как пройдет 2 символа строки
x=raw_input('Введите строку: ')
i=0
j=1
while j<=len(x):
if type(x[i])==type(x[i+1]):
a=x[i]*int(x[i+1])
print a,
i+=1
j+=1Отредактировано (Окт. 4, 2010 21:26:34)
Офлайн
6
по пробуй на регулярных выражениях решить …
Офлайн
857
>>> import re
>>> sa = 'Z15x3A12'
>>> sb = ''.join([c * int(n) for c, n in zip(re.findall('[^\d]+', sa), re.findall('\d+', sa))])
>>> sb
'ZZZZZZZZZZZZZZZxxxAAAAAAAAAAAA'
>>>
Офлайн
7
Оба выражения можно объединить в одно:
sb = ''.join(c * int(n) for c, n in re.findall( r'([^\d]+)(\d+)', sa))
Отредактировано (Окт. 5, 2010 10:35:49)
Офлайн
13
Вот еще одна реализация этой же идеи:
''.join(m[0]*int(m[1:]) for m in re.findall('.\d+', sa))eval(re.sub('(.)(\d+)', r'"\1"*\2+', sa)[:-1])Отредактировано (Окт. 5, 2010 11:28:54)
Офлайн
7
Тогда еще одно “извращение”:
re.sub('(.)(\d+)', lambda x: x.groups()[0]*int(x.groups()[1]), sa)re.sub('.\d+', lambda x: x.group()[0]*int(x.group()[1:]), sa)Отредактировано (Окт. 5, 2010 13:55:36)
Офлайн
0
x="Z15x3A2"
i=0
j=1
while j<=len(x):
if type(x[i])==str:
print 'strrrrrr',
i+=1
else:
print 'intttt',
i+=1
j+=1
Офлайн
3
x="Z15x3A2"
i=0
while i<len(x):
try:
if int(x[i]):
print 'int'
except:
print 'str'
i += 1
Офлайн