Проверка ввода для игры по угадыванию чисел приводит к ошибке - PullRequest
0 голосов
/ 08 мая 2020

Это мой первый пост в этом сообществе, и я конечно новичок. Я с нетерпением жду того дня, когда смогу помочь другим. В любом случае, это простой код, и я бы хотел, чтобы при вводе строки пользователем возникала ошибка. К сожалению, он не выполняется так, как хотелось бы, вот код:

number = 1

guess = int(input('Guess this number: '))

while True:
    try:
        if guess > number:
            print("Number is too high, go lower, try again")
            guess = int(input('Guess this number: '))
        elif guess < number:
            print("Too low, go higher, try again")
            guess = int(input('Guess this number: '))
        else:
            print("That is correct")
            break
    except (SyntaxError, ValueError):
            print("You can only enetr numbers, try again")

Когда программа запускается, и она просит меня «Угадай это число:», когда я пишу любую строку например, "d", выдает ошибку:

Guess this number: d
Traceback (most recent call last):
  File "Numberguess.py", line 5, in <module>
    guess = int(input('Guess this number: '))
ValueError: invalid literal for int() with base 10: 'd'

Спасибо за ваше время и поддержку.

Ответы [ 4 ]

0 голосов
/ 08 мая 2020

Добро пожаловать в Stack Overflow! Каждому нужно с чего-то начать

Взгляните на код ниже:

# import random to generate a random number within a range
from random import randrange


def main():
    low = 1
    high = 100

    # gen rand number
    number = gen_number(low, high)

    # get initial user input
    guess = get_input()

    # if user did not guess correct than keep asking them to guess
    while guess != number:
        if guess > number:
            print("You guessed too high!")
            guess = get_input()
        if guess < number:
            print("You guess too low!")
            guess = get_input()
    # let the user know they guess correct
    print(f"You guessed {guess} and are correct!")


def gen_number(low, high):
    return randrange(low, high)


# function to get input from user
def get_input():

    guess = input(f"Guess a number (q to quit): ")
    if guess == 'q':
        exit()

    # check to make sure user input is a number otherwise ask the user to guess again
    try:
        guess = int(guess)
    except ValueError:
        print("Not a valid number")
        get_input()

    # return guess if it is a valid number
    return guess


# Main program
if __name__ == '__main__':
    main()

Это была отличная возможность включить модуль случайных чисел Python для генерации случайного числа в пределах диапазона . Существует также хороший пример рекурсии, когда пользователю предлагается угадывать, пока он не предоставит действительный ввод. Пожалуйста, отметьте этот ответ как правильный, если он работает, и не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.

Удачного кодирования !!!

0 голосов
/ 08 мая 2020

Я бы просто использовал .isdi git () . В этот момент строка будет проверена, а затем вы превратите ее в int, если проверка работает.

guess = input('Guess this number: ')
if guess.isdigit():
    guess = int(guess)
else:
    print("You can only enter numbers, try again")

Также стоит упомянуть, что try/excepts крутые, и они выполняют свою работу, но Хорошая привычка - попытаться свести их к нулю, вместо того, чтобы выявлять ошибки, предварительно проверяйте данные.

В следующем примере это будет сделано:

number = 1

while True:

    # Step 1, validate the user choice
    guess = input('Guess this number: ')
    if guess.isdigit():
        guess = int(guess)
    else:
        print("You can only enter numbers, try again")
        continue

    # Step 2, play the guess game
    if guess > number:
        print("Number is too high, go lower, try again")
    elif guess < number:
        print("Too low, go higher, try again")
    else:
        print("That is correct")
        break
0 голосов
/ 08 мая 2020

Взгляните на эту строку:

guess = int(input('Guess this number: '))

Вы пытаетесь преобразовать строку в int, это возможно, но только если строка представляет собой число.

Вот почему вы получили ошибка. Исключение не сработало для вас, потому что вы получаете ввод для переменной из "try".

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

number = 1

while True:
    try:
        guess = int(input('Guess this number: '))

        if guess > number:
            print("Number is too high, go lower, try again")
        elif guess < number:
            print("Too low, go higher, try again")
        else:
            print("That is correct")
            break
    except (SyntaxError, ValueError):
            print("You can only enetr numbers, try again")

0 голосов
/ 08 мая 2020

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

guess = input('Guess this number: ')
if not guess.isdigit():
    raise ValueError("input must be of type int")
...