Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 6, 2014 14:34:56

chigiwar
Зарегистрирован: 2014-04-06
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему скрипт работает не так, как вроде бы должен?

Есть скрипт, суть такова:
Водится номер, состоящий из # и цифр.
Необходимо удалить все # и проинтовать все цифры.
Делаю так:

Full_number = list(input("Номер, полученный из станций "))
Full_number_without=[]
for x in Full_number:
    if x=="#":
        Full_number.remove(x)
    else:
        x=int(x)
        Full_number_without.append(x)
print(Full_number_without)
Однако, первая цифра после решетки , так же убирается (как правило, если решеток более двух)
Например, вводим:
#25#45
Получаем:
[5, 5]

Офлайн

#2 Апрель 6, 2014 14:38:03

Singularitty
От:
Зарегистрирован: 2012-02-02
Сообщения: 61
Репутация: +  5  -
Профиль   Отправить e-mail  

Почему скрипт работает не так, как вроде бы должен?

Full_number = input("Номер, полученный из станций ")
Full_number_without=[]
for x in Full_number:
    if  x!="#":
        x=int(x)
        Full_number_without.append(x)
print(Full_number_without)

Офлайн

#3 Апрель 6, 2014 14:39:28

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Почему скрипт работает не так, как вроде бы должен?

Я не очень понял все эти преобразования, что делает код, но так будет проще :)

original_number = input('What the number?')
fixed_digits = []
for x in original_number:
if x != '#':
fixed_digits.append(x)

print ''.join(fixed_digits)

Офлайн

#4 Апрель 6, 2014 14:41:22

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Почему скрипт работает не так, как вроде бы должен?

Можно ещё так :)

print ''.join((x for x in input('What the number?') if x != '#'))

Офлайн

#5 Апрель 6, 2014 14:53:49

chigiwar
Зарегистрирован: 2014-04-06
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему скрипт работает не так, как вроде бы должен?

Большое всем спасибо за оперативность!
И все таки, а почему он работал неправильно?

Офлайн

#6 Апрель 6, 2014 15:06:42

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Почему скрипт работает не так, как вроде бы должен?

chigiwar
Большое всем спасибо за оперативность!
И все таки, а почему он работал неправильно?

все дело в remove
#25#45
при первой итерации удаляем первый символ, получается 25#45
при второй итерации идет сравнение со вторым символов, который будет равен 5, а не 2 и т.д.



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#7 Апрель 6, 2014 22:25:49

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

Почему скрипт работает не так, как вроде бы должен?

lorien
Можно ещё так :)
print ''.join((x for x in input('What the number?') if x != '#'))

это написано
print input('What the number?').replace('#', '')

и оно не работает нормально, потому что там нужен raw_input()

>>> def f():
...     s = input('num: ')
...     lst = list(map(int, s.replace('#', '')))
...     return lst
... 
>>> f()
num: #25#45
[2, 5, 4, 5]
>>>



Офлайн

#8 Апрель 7, 2014 02:35:34

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Почему скрипт работает не так, как вроде бы должен?

s = input('What the number?')
result = list(map(int, s.split("#")[1:]))



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version