2016-06-18 2 views
-4

Я делаю простую программу, просто программа сказать, является ли число четным или нет, и когда raw_input не является числом, то программа будет жаловаться:проблемы с тем, если в функции

def f(): 
    t = raw_input('Enter a number and we will send an inormation: ') 


if t != type(int): 
    print 'is this a number?' 

elif int(t) % 2 == 0: 
    print t 
    print 'it is an even number' 

elif int(t) % 2 > 0: 
    print t 
    print 'it is an odd number' 

else: 
    print '???' 

, но когда программа запускает его, возвращается ТОЛЬКО условие if (когда я пишу 90 или слово, которое он возвращает), это число ?, оно должно возвращать это только в том случае, если я пишу строку). И я не могу понять, где проблема.

+0

[Как проверить, является ли исходный ввод целым в python 2.7?] (http://stackoverflow.com/q/19440952/2301450) – vaultah

+0

't! = type (int)' всегда 'True' , попробуйте сами. –

ответ

1

Много ошибок здесь.

Сначала используйте isintance, чтобы проверить, является ли переменная переменной int. Не используйте type(t) != int.

Затем вы выполняете операцию int(t) несколько раз.

Кроме того, кажется, что t является глобальным var, который не рекомендуется использовать, особенно для новичков.

У вас есть еще что-то в конце, но число нечетное или четное. Других альтернатив нет. Для проверки используется число нечетное использование if t & 1:.

+0

извините, я просто noob (я программирую только с начала месяца), поэтому я не очень разбираюсь в python, я даже не знаю, что такое isintance. – jfinizolas

+0

'isinstance' не должен использоваться для проверки если тип ввода как 'raw_input' всегда будет содержать строку – formatkaka

+0

Замечание isinstance было общим. –

0

Вы можете использовать if t.isdigit():

type(int) возвращает тип объекта, который никогда не будет значение. Поэтому он всегда будет ложным.

0

Это связано с тем, что raw_input всегда возвращает строку, даже если используются только числа. Вам нужно ввести команду cast it как int, а затем проверить, является ли она нечетной или четной, и поймать исключение, если оно не может быть преобразовано в int. Так вы должны это сделать:

def f(): 
    try: 
     t = int(raw_input("Enter a number")) 
    except ValueError: 
     print "is this an integer?" 
    else: 
     if t % 2 == 0: 
      print t 
      print " is even" 
     else: 
      print t 
      print " is odd" 

Остальное после блока except выполняется только в том случае, если исключение не выбрано. Кроме того, как говорит @Julien Goupy, число либо нечетное, либо четное, поэтому вам не нужен третий оператор else Edit: Кажется, что elif после попытки ... кроме блока не работает, поэтому я его изменил to else

+0

elif имеет синтаксическую ошибку (python 2.7.9) – jfinizolas

+0

О, вместо этого просто положите else, а затем поставьте в нем оператор if .. else – masteryoom