2015-10-22 2 views
8

Я пытаюсь написать код для редактирования списка и сделать его палиндром.Ошибка ввода простого Python

Все работает, кроме моего ввода, все еще дает мне одну ошибку. Когда я вводим non-int в get_number_2, он сбой.

def get_number(): 
    num = raw_input("Please enter number between 100,000 and 1,000,0000: ") 
    if not num.isdigit(): 
     print "---------------------------" 
     print "Invalid input: numbers only" 
     print "---------------------------" 
     my_main() 
    else: 
     return num 

def get_number_2(n): 
    num = input("Please confirm the number you have entered: ") 
    if num != int(n): 
     print "--------------------" 
     print "Entries do not match" 
     print "--------------------" 
     my_main() 
    else: 
     return num 

Я использую вход от get_number_2 для остальной части кода как get_number не работает, когда я проверяю его между двумя числами.

Есть ли способ проверить, является ли вход int в get_number_2, так что я могу избавиться от get_number?

ответ

3

Вы также должны использовать raw_input и int(num):

def get_number_2(n): 
    num = raw_input("Please confirm the number you have entered: ") 
    if not num.isdigit() or int(num) != n: 
     print "--------------------" 
     print "Entries do not match" 
     print "--------------------" 
     my_main() 
    else: 
     return int(num) 

Примечания:

  • Я предполагаю, что параметр n является INT или проверить это можно изменить, если: if not num.isdigit() or not n.isdigit() or int(num) != int(n).
  • С помощью isdigit мы проверяем, является ли это целым числом, прежде чем преобразовать его в int.
+0

Это все равно не будет работать, потому что 'int (num)' будет вызывать ошибку, если 'num' не является целым числом. –

+0

Больше нет, потому что я делаю чек раньше. – agold

+0

Все, что мне нужно было сделать, это вернуть num как int. Спасибо чувак. –

3

Вы не можете сделать num != int(n), потому что он попытается вызвать int(n), что недействительно, если n не является фактически целым числом.

Правильный способ сделать это состоит в использовании try и except

try: 
    n = int(n) 
except ValueError: 
    print 'Entry is not an integer.' 
    #handle this in some way 

Edit: Кроме того, в Python 2.x, пожалуйста, используйте raw_input() вместо input(). input() дает очень странные результаты, если вы не знаете, что он делает.

+1

Пожалуйста, не используйте голый кроме выписок. Это должно быть 'except ValueError'. –

+0

Ya, но если бы я мог проверить, является ли get_number_2 int, я мог бы удалить get_number и устранить необходимость их соответствия? –

+0

@S_Sull да, вы можете просто попробовать: n = int (raw_input ('Enter number:')), за исключением: ValueError: print 'Введите целое число', которое захватывает вход и превращает его в целое число, это не одно. –

6

Написать программу, которая обрабатывает исключение. Если пользователь вводит не действительное число, оно бросает ValueError исключения:

try: 
    a = int(b) 
except ValueError: 
    print "Unable to interpret your input as a number" 

вы должны обновить свой вопрос так:

def get_number_2(n): 
    num = input("Please confirm the number you have entered: ") 
    try: 
     if num != int(n): 
      print "--------------------" 
      print "Entries do not match" 
      print "--------------------" 
      my_main() 
     else: 
      return num 
    except ValueError: 
     print "Unable to interpret your input as a number" 
-1
from operator import attrgetter 
num0 = input() 
if not attrgetter('isdigit')(num0)(): 
    print("that's not a number") 
+0

исправлен отступ !!! –

+2

Пожалуйста, добавьте некоторое объяснение. Только фрагмент кода не является реальным ответом. – cezar

+0

Очевидно, что attrgetter ('isdigit') (num0)() возвращает Trus, если заданная строка в переменной «num0» является цифрой, а False, если не , поэтому, если заданная строка является цифрой, программа запускается обычно, если он не печатает, то это не номер, и если вам нравится, вы можете остановить выполнение или запросить ввод agin. –

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