Мне нужна помощь в исправлении ошибки ValueError в простой игре со случайными числами

1

Я создал простую игру с угадыванием чисел и пытаюсь исправить ошибку, если случайно ничего не вводить.

Когда программа просит сделать предположение, если пользователь нажимает клавишу ввода без ввода числа, я получаю эту ошибку:

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))
  • 0
    Так как guess это число, оно никогда не может быть равно строке. Если вы хотите разрешить пустой ввод, вы должны проверить это, прежде чем преобразовать его в int .
Теги:
error-handling

2 ответа

0
Лучший ответ

Если вы также не хотите потерять попытку, если пользователь только что нажал, введите, не вводя номер. Вы можете использовать попытку, кроме как через некоторое 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))
  • 0
    Спасибо, я видел эту ошибку прямо перед тем, как вы отправили. Тем не менее, теперь, когда я ввожу число, все, что он говорит, это «предположить». Это не указывает, является ли секретный номер выше или ниже
  • 0
    @ tl93 у меня нормально работает. Я обновил свой ответ, чтобы включить полный код. Попробуй это.
Показать ещё 1 комментарий
0

Переменная 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
...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню