Почему в моей игре в угадайку неверно возвращение числа к высокой или низкой - PullRequest
0 голосов
/ 12 апреля 2019

Когда моя игра вернется, компьютеры ответят, является ли ее число слишком большим или слишком низким, это скажет, что число слишком велико, но фактическое число выше.Например, он скажет, что компьютер угадал 7, который является слишком большим, и число равно 10. Пользовательский ввод для опции также случайным образом изменяет числа.Так что это может быть связано с ранее заявленной проблемой.

"""
    Displays the main menu then reads in the user choice.
    Depending on user choice program may have user guess a number
    generated by the computer, computer guesses a number given by user,
    or user exits program.
    """

def main():
    display_menu()
    option = int(input("Enter a menu option: "))

    if option == 1:
        import random
        number = random.randint(1,10)
        counter = 0

        while True:
            try:        
                guess = input("Guess a number between 1 and 10: ")
                guess = int(guess)
                print()
                if guess < 1 or guess > 10:
                    raise ValueError()
                counter += 1
                if guess > number:
                    print("Too high.")
                    print()
                elif guess < number:
                    print("Too low.")
                    print()
                else:
                    print("You guessed it!")
                    print("You guessed the number in", counter, "attempts!")
                    break
            except ValueError:
                print(guess, "is not a valid guess")
                print()
    """
    Option 2., User enters a number for the computer to guess.
    Computer guesses a number within the range given.
    Outputs computer guesses and number of guesses until computer gets
    the correct number.
    """

    if option == 2:
        import random
        print("Computer guess my number")
        print()

        while True:
            try:
                my_num = input("Enter a number betrween 1 and 10 for the computer to guess: ")
                my_num = int(my_num)
                print()

                counter = 1
                comp = random.randint(1,10)

                if my_num < 1 or my_num > 10:
                    raise ValueError()

                if comp > my_num:
                    print("Computer guessed", comp,"to High")
                    comp = random.randint(1,10)

                elif comp < my_num:
                    print("Computer guessed", comp,"to Low")
                    comp = random.randint(1,10)


                print("Computer the right number!" , comp)
                print("Computer guessed the right number in", counter, "attempts!")
                break
            except ValueError:
                print(my_num, "is not a valid guess")
                print()

    if option == 3:
        print("Goodbye")

"""
    Defines menue and user choices.
    """

def display_menu():
    print("Welcome to my Guesss the Number Program!")
    print("1. You guess the number")
    print("2. You type a number and see if the computer can guess it.")
    print("3. Exit")
    print()

if __name__ == '__main__':
    main()

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Пользовательский ввод для опции случайным образом меняется.

        if comp > my_num:
            print("Computer guessed", comp,"to High")
            comp = random.randint(1,10)

из-за третьей строки, генерирующей новое случайное число.

while True:
    try:  

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

counter = 1

счетчик должен быть создан, а затем увеличен, иначе он останется равным нулю.

Рабочий пример после нескольких изменений:

"""
    Displays the main menu then reads in the user choice.
    Depending on user choice program may have user guess a number
    generated by the computer, computer guesses a number given by user,
    or user exits program.
    """
import sys
import random

def main():
    display_menu()
    option = int(input("Enter a menu option: "))

    if option == 1:            
        number = random.randint(1,10)
        counter = 0

        while True:
            try:        
                guess = input("Guess a number between 1 and 10: ")
                guess = int(guess)
                print()
                if guess < 1 or guess > 10:
                    raise ValueError()
                counter += 1
                if guess > number:
                    print("Too high.")
                    print()
                elif guess < number:
                    print("Too low.")
                    print()
                else:
                    print("You guessed it!")
                    print("You guessed the number in", counter, "attempts!")
                    break
            except ValueError:
                print(guess, "is not a valid guess")
                print()
    """
    Option 2., User enters a number for the computer to guess.
    Computer guesses a number within the range given.
    Outputs computer guesses and number of guesses until computer gets
    the correct number.
    """

    if option == 2:
        print("Computer guess my number")
        print()


        my_num = input("Enter a number betrween 1 and 10 for the computer to guess: \n")
        my_num = int(my_num)
        comp = 0
        counter = 0
        while comp != my_num:

            counter += 1
            comp = random.randint(1,10)

            if my_num < 1 or my_num > 10:
                print(my_num, "is not a valid guess")
                sys.exit(0)


            if comp > my_num:
                print("Computer guessed", comp,"to High")

            elif comp < my_num:
                print("Computer guessed", comp,"to Low ")


        print("Computer the right number!" , comp)
        print("Computer guessed the right number in", counter, "attempts!")


    if option == 3:
        print("Goodbye")

"""
    Defines menue and user choices.
    """

def display_menu():
    print("Welcome to my Guesss the Number Program!")
    print("1. You guess the number")
    print("2. You type a number and see if the computer can guess it.")
    print("3. Exit")
    print()

if __name__ == '__main__':
    main()
0 голосов
/ 12 апреля 2019

Кодовый блок

            if my_num < 1 or my_num > 10:
                raise ValueError()

            if comp > my_num:
                print("Computer guessed", comp,"to High")
                comp = random.randint(1,10)

            elif comp < my_num:
                print("Computer guessed", comp,"to Low")
                comp = random.randint(1,10)


            print("Computer the right number!" , comp)
            print("Computer guessed the right number in", counter, "attempts!")
            break

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

            if my_num < 1 or my_num > 10:
                raise ValueError()

            if comp > my_num:
                print("Computer guessed", comp,"to High")
                comp = random.randint(1,10)

            elif comp < my_num:
                print("Computer guessed", comp,"to Low")
                comp = random.randint(1,10)

            else:
                print("Computer the right number!" , comp)
                print("Computer guessed the right number in", counter, "attempts!")
                break

Кроме того, начало блока кода также нуждается в некотором исправлении.Код попросит вас ввести новый номер для каждого цикла и , счетчик должен обновляться каждый цикл.Если вы реализуете это, начало кода будет выглядеть примерно так:

if option == 2:
    import random
    print("Computer guess my number")
    print()
    my_num = input("Enter a number betrween 1 and 10 for the computer to guess: ")
    my_num = int(my_num)
    counter = 1

    while True:
        try:
            counter += 1
            print()

            comp = random.randint(1,10)

Это также означает следующее:

            if comp > my_num:
                print("Computer guessed", comp,"to High")
                comp = random.randint(1,10)

            elif comp < my_num:
                print("Computer guessed", comp,"to Low")
                comp = random.randint(1,10)

Может быть изменено на:

            if comp > my_num:
                print("Computer guessed", comp,"to High")

            elif comp < my_num:
                print("Computer guessed", comp,"to Low")

Поскольку компьютер все равно будет делать новое предположение.

К вашему сведению, я рекомендую выполнять все операции импорта в верхней части файла, а не в середине кода.

Кроме того, он «слишком высокий / низкий», а не «высокий / низкий»;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...