Я создал простую игру с угадыванием чисел и пытаюсь исправить ошибку, если случайно ничего не вводить.
Когда программа просит сделать предположение, если пользователь нажимает клавишу ввода без ввода числа, я получаю эту ошибку:
Traceback (последний вызов был последним): Файл "/Users/tom/Documents/Automate with Python/RandomNumberGame.py", строка 13, в предположении = int (input()) ValueError: недопустимый литерал для int() с основанием 10: ""
Я хотел бы напечатать "Пожалуйста, введите номер" вместо этого.
Я новичок в программировании и начал читать "Автоматизировать скучные вещи с помощью Python". Заранее спасибо!
Оригинальный код не включал
elif guess == ' ':
print('Please enter a number')
но цель состоит в том, чтобы заставить программу сказать, что если ввод оставлен пустым
Я попытался добавить:
guess = int(input()) or str(input())
без какого-либо прогресса
import random
print('Hello, What is your name?')
name = input()
print('Well, ' + name + ', I am thinking of a number between 1 and 1000, You have 10 guesses to figure it out. Good luck!')
secretNumber = random.randint(1,1000)
print('DEBUG: Secret number is ' + str(secretNumber))
for guessesTaken in range(1,11):
print('Take a guess.')
guess = int(input())
if guess < secretNumber:
print('Your guess is too low.')
elif guess > secretNumber:
print('Your guess is too high.')
elif guess == ' ':
print('Please enter a number')
else:
break #This condition is for the correct guess
if guess == secretNumber:
print('Good job ' + name + '! You guessed the number in ' + str(guessesTaken) + ' guesses!')
else:
print('Too many guesses, The number I was thinking of was ' + str(secretNumber))
Если вы также не хотите потерять попытку, если пользователь только что нажал, введите, не вводя номер. Вы можете использовать попытку, кроме как через некоторое while True:
блок, как это
#code till this
for guessesTaken in range(1,11):
print('Take a guess.')
while True:
try:
guess = int(input())
break
except ValueError:
print('Please enter a number')
continue
#rest of your code
Это позволит пользователю продолжить игру, если он случайно нажал клавишу ввода, а количество попыток осталось прежним.
Полный код:
import random
print('Hello, What is your name?')
name = input()
print('Well, ' + name + ', I am thinking of a number between 1 and 1000, You have 10 guesses to figure it out. Good luck!')
secretNumber = random.randint(1,1000)
print('DEBUG: Secret number is ' + str(secretNumber))
#code till this
for guessesTaken in range(1,11):
print('Take a guess.')
while True:
try:
guess = int(input())
break
except ValueError:
print('Please enter a number')
continue
#rest of your code
if guess < secretNumber:
print('Your guess is too low.')
elif guess > secretNumber:
print('Your guess is too high.')
else:
break #This condition is for the correct guess
if guess == secretNumber:
print('Good job ' + name + '! You guessed the number in ' + str(guessesTaken) + ' guesses!')
else:
print('Too many guesses, The number I was thinking of was ' + str(secretNumber))
Переменная guess
является целочисленным значением, потому что вы преобразовываете входные данные в целое число: guess = int(input())
. Если входные данные представляют собой пробел или любую другую недопустимую строку (не может быть проанализирована в число), возникает ValueError exception
- вот почему вы получаете это сообщение об ошибке.
Вы можете обрабатывать, когда в Python возникают определенные исключения, используя блок try/except
exception. Это работает так:
try:
# execute some code
except SomeException:
# handle the exception
Код в try
блоке будет пытаться выполнить, и при работе результатов кода в исключительных SomeException
воспитываются, код в за except
блока будет работать.
В вашем конкретном случае вы хотите обработать исключение ValueError
, чтобы вы могли просто обернуть соответствующий код в try/except
вот так:
...
for guessesTaken in range(1,11):
print('Take a guess.')
try:
guess = int(input())
if guess < secretNumber:
print('Your guess is too low.')
elif guess > secretNumber:
print('Your guess is too high.')
elif guess == ' ':
print('Please enter a number')
else:
break #This condition is for the correct guess
except ValueError:
print('Please enter a number')
...
Если вы хотите, чтобы неверные входные данные не давали предположений, вы можете реализовать игру следующим образом:
...
guessesTaken = 1
while True:
print('Take a guess.')
try:
guess = int(input())
if guess < secretNumber:
print('Your guess is too low.')
elif guess > secretNumber:
print('Your guess is too high.')
elif guess == ' ':
print('Please enter a number')
else:
break #This condition is for the correct guess
except ValueError:
print('Please enter a number')
continue # go back to the start of loop (without incrementing guessesTaken)
guessesTaken += 1
if guessesTaken >= 10:
break
...
guess
это число, оно никогда не может быть равно строке. Если вы хотите разрешить пустой ввод, вы должны проверить это, прежде чем преобразовать его вint
.