#python #python-2.7 #validation #while-loop #integer
#python #python-2.7 #проверка #цикл while #целое
Вопрос:
в части одной программы я хотел убедиться, что пользовательский ввод только поэтому я использовал:
num=int(raw_input())
while type(num)!= int:
num=int(raw_input('You must enter number only'))
print num
Но, делая это, если пользователь ввел некоторые нецелые значения, такие как строки или что-либо еще, весь код отображается с ошибкой.
итак, как я могу заставить пользователя повторно вводить значение, пока они не введут целое число.
вывод был таким:
input your number
hdhe
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-4b5e9a275ca4> in <module>()
1 print'input your number'
----> 2 num=int(raw_input())
3 while type(num)!= int:
4 num=int(raw_input('You must enter number only'))
5 print num
ValueError: invalid literal for int() with base 10: 'hdhe'
Комментарии:
1. Просто удалите
int()
при определенииnum
:num = raw_input()
Ответ №1:
while True:
try:
n = int(input('input your number : '))
break
except ValueError:
print('You entered a non integer value, try again.')
continue
print('yay!! you gave the correct value as int')
Теперь вы можете вносить любые косметические изменения по своему усмотрению.
Удачного кодирования.
Ответ №2:
Ваш num = int(raw_input()) уже гарантировал, что это должно быть int и вызовет ValueError, если не int. Таким образом, ваш цикл while никогда не будет выполнен, потому что он никогда не получит переменную, отличную от int, для num . Вместо этого удалите int () из переменной num, и все готово!
Ответ №3:
Вы можете использовать isinstance
, чтобы проверить, является ли ввод int
или нет.
если ввод не является int
циклическим, пока пользователь не введет int
.
Например:
num = input("Enter an integer:")
if not isinstance(num, int):
while not isinstance(num, int):
try:
num = int(input('You must enter integer only'))
except ValueError as ve:
pass
Выход:
Enter an integer:e
You must enter integer onlyr
You must enter integer onlye
You must enter integer only4
Process finished with exit code 0
Ответ №4:
Вы передаете ввод от пользователя непосредственно в int
в строке 2. Если это не целое число, генерируется исключение ValueError. Мы можем изменить вашу реализацию и перехватить исключение, когда это произойдет, только выйдя из цикла, когда исключения не возникает, а num является целым числом.
while True:
num=raw_input()
try:
num=int(num)
break
except ValueError:
print "Input is not an integer!"
print num
Вы также могли бы использовать регулярное выражение для проверки, является ли входное значение целым числом, или какую-либо другую библиотечную функцию, которая проверяет, является ли строка из raw_input() целым числом.