2015-10-21 4 views
0

Я пытаюсь вернуть номер, если это INT и между номерами, возникает ошибка при вводе буквы. Также вы должны ввести правильное значение в два раза, чтобы получить вход:python: return validation return

def get_number(): 

b = False 

while b == False: 
    try: 
     n = (input('Please enter a 6 digit number')) 
    except ValueError: 
     continue 
    if n >= 100000 and n <= 1000000: 
     b = True 
     break 
return n 

if __name__ == '__main__': 
    get_number() 
    print get_number() 

`

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

def get_number(): 

b = False 

while b == False: 
    try: 
     n = (raw_input('Please enter a 6 digit number')) 
    except ValueError: 
     continue 
    if n >= 100000 and n <= 1000000: 
     b = True 
     break 
return n 

if __name__ == '__main__': 
    get_number() 
    print get_number() 

ответ

1

Есть несколько проблем с кодом.

  • вы могли просто использовать input оценить независимо от UNSER поступил, но это опасно; лучше использовать raw_input, чтобы получить строку и попытаться бросить эту строку в int явно
  • также, если вы используете input, то вы должны поймать NameError и SyntaxError (и, возможно, некоторые больше) вместо ValueError
  • , ваше состояние if позволит ввести 7-значное число (1000000); Кроме того, вы можете упростить условие с помощью цепочки сравнения
  • нет необходимости в булевой переменной; просто break или return из цикла
  • вы называете функцию дважды, и печать только результат второго вызова

Вы могли бы попробовать что-то вроде этого:

def get_number(): 
    while True: 
     try: 
      n = int(raw_input('Please enter a 6 digit number ')) 
      if 100000 <= n < 1000000: 
       return n 
     except ValueError: 
      continue 

if __name__ == '__main__': 
    print get_number() 
+0

мне это нравится, минимальная, но исчерпывающий. Продвинутый – Pynchia

+0

спасибо, что это работает. – bbaayy