2009-09-08 3 views
4

Я учусь Python, и у меня возникает проблемы с этим простым фрагментом коды:Проблемы с кодом простого Python

a = raw_input('Enter a number: ') 

if a > 0: 
    print 'Positive' 
elif a == 0: 
    print 'Null' 
elif a < 0: 
    print 'Negative' 

Он отлично работает, за исключением того, что он всегда печатает «Позитивный», независимо от того, введите ли я положительное или отрицательное число или ноль. Я предполагаю, что есть простое решение, но я не могу найти его ;-)

Заранее спасибо

ответ

7

Поскольку вы используете raw_input вы получаете значение в виде строки, которая всегда считается больше 0 (даже если строка «-10»)

Вместо этого попробуйте использовать вход ('Введите number: '), и python сделает преобразование типа для вас.

Конечный код будет выглядеть следующим образом:

a = input('Enter a number: ') 
if a > 0: 
    print 'Positive' 
elif a == 0: 
    print 'Null' 
elif a < 0: 
    print 'Negative' 

Однако, как ряд людей указали, используя вход() может привести к ошибке, потому что на самом деле интерпретирует объекты питона, передаваемые в

.

Более безопасный способ справиться с этим может быть, чтобы бросить raw_input с желаемым типом, как:

a = int(raw_input('Enter a number: ')) 

Но будьте осторожны, вы все равно должны сделать некоторые Handlin ошибки g здесь, чтобы избежать неприятностей!

+0

Спасибо! Работала ;-) – trolle3000

+4

Причина input() работает таким образом, потому что все, что набирается пользователем, оценивается интерпретатором ... что очень опасно.Поиск в Интернете даст множество причин, но достаточно сказать, что выполнение int (raw_input()) в try-catch должно рассматриваться как лучшая практика. – nilamo

+2

Правда, вы можете найти обсуждение этого вопроса: http://mail.python.org/pipermail/tutor/2003-January/019634.html Исходный пример полезен для того, чтобы получить человека, который является новым для python going , После того, как вы начнете рассматривать обработку ошибок, вы захотите проверить все и все пользовательские данные, и в этот момент raw_input (...) окажется более полезным. –

2

raw_input хранится в виде строки, а не целое число.

Попробуйте использовать a = int(a) перед выполнением сравнений.

5
raw_input 

возвращает строку, так что вам нужно преобразовать a, который строку в целое число первой: a = int(a)

7

Это потому, что a является строкой, как введенный. Используйте int(), чтобы преобразовать его в целое число перед выполнением числовых сравнений.

a = int(raw_input('Enter a number: ')) 
if a > 0: 
    print 'Positive' 
elif a == 0: 
    print 'Null' 
elif a < 0: 
    print 'Negative' 

В качестве альтернативы, input() будет делать преобразование типов для вас.

a = input('Enter a number: ') 
1

Необработанный ввод возвращает строку, а не целое число. Для того, чтобы преобразовать его, попробуйте добавить эту строку сразу после raw_input заявления:

а = Int (а)

Это будет преобразовать строку в целое число. Вы можете свернуть его, указав его нечисловыми данными, поэтому будьте осторожны.

+0

Также работает отлично. – trolle3000

7

Расширение на мой комментарий на accepted answer, вот как я это сделаю.

value = None 
getting_input = True 

while getting_input: 
    try: 
     value = int(raw_input('Gimme a number: ')) 
     getting_input = False 
    except ValueError: 
     print "That's not a number... try again." 

if value > 0: 
    print 'Positive' 
elif value < 0: 
    print 'Negative' 
else: 
    print 'Null' 
+0

вам не нужна get_input здесь, вы можете просто использовать «while not value». : P – monkut

+0

Хотя верно, я предпочитаю быть достаточно явным в том, что происходит, поэтому цель кода очевидна с первого взгляда, без каких-либо дополнительных мыслей. – nilamo

Смежные вопросы