2015-12-15 2 views
1

Я пишу код, который запрашивает у пользователя любое положительное целое число. Если то, что вводит пользователь, не является положительным целым числом, оно не должно принимать его и снова и снова запрашивать у пользователя положительное целое число, пока пользователь не введет положительное целое число.Почему код Python генерирует ValueError?

Во-вторых, код запрашивает у пользователя поплавок между 0 и 1, а затем проверяет, является ли введенное пользователем поплавок между 0 и 1. Если он не находится между 0 и 1, он должен снова запросить и снова пока пользователь не выполнит запрос. Затем округлите его до ближайшего 2 десятичного знака.

Вот мой код:

num1 = int(input("Enter a positive integer: ")) 
while num1 < 0 or not isinstance(num1 , int): 
    print("Invalid!") 
    num1 = int(input("Enter a positive integer: ")) 
num2 = float(input("Enter a decimal between 0 and 1: ")) 
while num2 < 0 or num2 > 1 or not isinstance(num2 , float): 
    print("Invalid!") 
    num2 = float(input("Enter a decimal between 0 and 1: ")) 

Когда я запускаю его, и введите строку, он сказал ValueError.

Должен ли я использовать обработку ошибок?

ответ

1

ValueError выбрано конструктором int и float.

while True: 
    try: 
     num1 = int(input("Enter a positive integer: ")) 
     if num1 >= 0: 
      break 
    except ValueError: 
     pass 
    print("Invalid!") 

while True: 
    try: 
     num2 = float(input("Enter a decimal between 0 and 1: ")) 
     if num2 >= 0 and num2 <= 1: 
      break 
    except ValueError: 
     pass 
    print("Invalid!") 
+0

= [] = Спасибо большое !!! –

+0

Я думаю, есть проблема, что если пользователь вводит float в 'num1', он должен снова вводиться повторно. – Hooting

+0

@Hooting 'int ('1.1')' throws ValueError, поэтому запрашивается еще раз. Это ожидаемое поведение, как я понял. –

0

Если вы пытаетесь бросить строку следующим образом:

>>> text = int("Blibla") 

интерпретатор Python не может справиться с этим.

Traceback (most recent call last): 
File "<pyshell#3>", line 1, in <module> 
text = int("Blibla") 
ValueError: invalid literal for int() with base 10: 'Blibla' 
>>> 

Попробуйте использовать вместо попробовать/за исключением, чтобы поймать любые ValueErrors:

num1 = 'error' 
while not isinstance(num1,int) and num1 == 'error': 
    try: 
     num1 = int(input("Enter a positive integer: ")) 
     print("You input : {}".format(num1)) 
    except ValueError: 
     print("Invalid!") 
Смежные вопросы