Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 26, 2010 20:38:41

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

breidos

breidos
input() - вводить можно только числовые значения? Ато я ввожу текст и он ругается.
raw_input

Офлайн

#2 Сен. 26, 2010 20:51:36

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Кстати, а какой из вариантов нужен автору топика? Считать в строке в целом или по группам?



Офлайн

#3 Окт. 4, 2010 21:08:22

breidos
От:
Зарегистрирован: 2010-09-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Ребята, вот пытаюсь сделать такое: строку вида - 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)

Офлайн

#4 Окт. 4, 2010 22:41:08

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

по пробуй на регулярных выражениях решить …

Офлайн

#5 Окт. 5, 2010 09:22:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10005
Репутация: +  857  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

>>> import re
>>> sa = 'Z15x3A12'
>>> sb = ''.join([c * int(n) for c, n in zip(re.findall('[^\d]+', sa), re.findall('\d+', sa))])
>>> sb
'ZZZZZZZZZZZZZZZxxxAAAAAAAAAAAA'
>>>



Офлайн

#6 Окт. 5, 2010 10:28:22

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Оба выражения можно объединить в одно:

sb = ''.join(c * int(n) for c, n in re.findall( r'([^\d]+)(\d+)', sa))



Отредактировано (Окт. 5, 2010 10:35:49)

Офлайн

#7 Окт. 5, 2010 11:27:54

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Вот еще одна реализация этой же идеи:

''.join(m[0]*int(m[1:]) for m in re.findall('.\d+', sa))
А вот извращение на эту же тему:
eval(re.sub('(.)(\d+)', r'"\1"*\2+', sa)[:-1])
PS: Упс, меня опередили :)



Отредактировано (Окт. 5, 2010 11:28:54)

Офлайн

#8 Окт. 5, 2010 12:30:01

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

Тогда еще одно “извращение”:

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)

Офлайн

#9 Окт. 5, 2010 17:12:54

breidos
От:
Зарегистрирован: 2010-09-21
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

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
Вот я пытаюсь вывести к какому типу относятся i-ый элемент строки. Но тут он выводит:
>>>
strrrrrr strrrrrr strrrrrr strrrrrr strrrrrr strrrrrr strrrrrr
>>>
В каком месте я ошибся?



Офлайн

#10 Окт. 5, 2010 17:25:46

Chern
От: Киев
Зарегистрирован: 2010-09-15
Сообщения: 71
Репутация: +  3  -
Профиль   Отправить e-mail  

Буквы и/или числа в строке

x="Z15x3A2"
i=0
while i<len(x):
try:
if int(x[i]):
print 'int'
except:
print 'str'
i += 1
Ошибка в том, что x - подстрока



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version