2013-02-16 3 views
1
x = raw_input("Write a number") 
if x.isalpha(): 
    print "Invalid!" 
elif x%2==0: 
    print "The number you have written is EVEN" 
elif x%2!=0: 
    print "The number you have written is ODD" 
else: 
    print "Invalid!" 

Предполагается проверить, является ли число нечетным или четным и распечатать его. Оператор if if проверяет, был ли raw_input алфавитом, потому что это не сработает. И мои утверждения elif проверяются на нечетные или четные.Почему этот простой код не работает, для Python?

ответ

5

Возвращаемое значение raw_input всегда является строкой. Вам нужно, чтобы преобразовать его в целое число, если вы хотите использовать % оператор на нем:

x = raw_input("Write a number") 
if x.isalpha(): 
    print "Invalid!" 
x = int(x) 

Вместо x.isalpha() вы можете использовать вместо exception handling:

try: 
    x = int(raw_input("Write a number")) 
except ValueError: 
    print 'Invalid!' 
else: 
    if x % 2 == 0: 
     print "The number you have written is EVEN" 
    else: 
     print "The number you have written is ODD" 

потому что int() поднимет ValueError если вход не является допустимым целым числом.

+0

Похоже, что ОП только что начал изучать Python. На этом этапе он не должен был узнавать о «try», «execpt», «finally» и других. Я говорю это, потому что я тоже довольно новый ... И использование 'raw_input' является одним из основных блоков в большинстве книг/учебников ... :) – Aditya

+2

@Aditya: вот почему я * предлагаю * обработку исключений, и связали это с разделом учебника по этой технике. :-) –

1

Возвращаемое значение raw_input - это строка, но вам нужно число, чтобы выполнить проверку на четность. Вы можете проверить, является ли это альфа-строкой, а если нет, преобразуйте ее в int. Например:

xs = raw_input("Write a number") 
if xs.isalpha(): 
    print "Invalid!" 
else: 
    xn = int(xs) 
    if xn % 2 == 0: 
     print "The number you have written is EVEN" 
    elif xn % 2 != 0: 
     print "The number you have written is ODD" 
    else: 
     print "The universe is about to end." 
Смежные вопросы