Python выше игра с угадайкой - PullRequest
0 голосов
/ 19 марта 2019

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

Моя проблема заключается в том, что при запуске программы, если я говорю «выше» или «ниже», когда компьютер спрашивает, является ли мой номервыше / ниже / то же самое, что и число, скажем, 50, позже я могу сказать, что мое число было 50, и оно говорит мне, что я выигрываю вместо того, чтобы сказать: «Этого не может быть; вы сказали, что оно было выше / ниже 50!»Как бы я решил эту проблему?

print("Think of a number between 1 and 100 and I'll guess it.")
total = int(input("How many guesses do I get? "))

h = "higher"
l = "lower"
s = "same"
low = 0
high = 100
hls = ""

guess_count = 0

average = 0

while guess_count < total and hls != s:
    average = (high + low) // 2
    hls = input("Is the number higher, lower, or the same as " + str(average) + "? ")
    if hls == h:
        low = average
    elif hls == l:
        high = average
    guess_count += 1
    if high - low == 1:
        break
if high - low == 1:
    print("Wait; how can it be both higher than " + str(low) + " and lower than " + str(high) + "?")
elif hls == s:
    print("I won!")
else:
    answer = int(input("I lost; what was the answer? "))
    if answer < low:
        print("That can't be; you said it was higher than " + str(low) + "!")
    elif answer > high:
        print("That can't be; you said it was lower than " + str(high) + "!")
    elif answer != average:
        print("Well played!")

Ответы [ 2 ]

1 голос
/ 19 марта 2019

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

Think of a number between 1 and 100 and I'll guess it.
How many guesses do I get? 5
Is the number higher, lower, or the same as 50? lower
High is: 50, low is: 0, average is: 50
Is the number higher, lower, or the same as 25? higher
High is: 50, low is: 25, average is: 25
Is the number higher, lower, or the same as 37? higher
High is: 50, low is: 37, average is: 37
Is the number higher, lower, or the same as 43? higher
High is: 50, low is: 43, average is: 43
Is the number higher, lower, or the same as 46? higher
High is: 50, low is: 46, average is: 46
I lost; what was the answer? 50
High is: 50, low is: 46, average is: 46
Well played!

Итак, когда компьютер проиграл, а average равнялся 46, он выполнял следующие условия:

if answer < low:
    print("That can't be; you said it was higher than " + str(low) + "!")
elif answer > high:
    print("That can't be; you said it was lower than " + str(high) + "!")
elif answer != average:
    print("Well played!")

low было 46и ответ был 50, поэтому первое условие - False.high было 50, а мой ответ 50, поэтому второе условие False.Однако average равно 46 и не равно моему answer, равному 50.Well played! - это конечный результат.

Измените elif answer > high: на elif answer >= high:, и вы получите ожидаемый результат.Затем измените elif answer < low: на elif answer <= low:.

1 голос
/ 19 марта 2019

Проблема здесь в том, что для того, чтобы компьютерная программа знала, что вы дали неправильный ответ для значения (как, скажем, говоря, что «50 слишком мало», когда на самом деле ответ 50), необходимоиметь запись своих догадок и ваших ответов на эти догадки.

Таким образом, после того, как он сделает предположение и вы получите «более низкий» или «более высокий» ответ, вы можете поместить предположение в low_guesses или high_guesses список, а затем изучить этот список в конце игры.Вы можете получить что-то вроде этого:

low_guesses = []
high_guesses = []

while True:  # breaks out when user types "same"
    response = input("Is the number higher, lower, or the same as " + str(guess) + "? ")
    if response == "lower":
        # Add the guess to the low_guesses array:
        low_guesses.append(guess)
    elif response == "higher":
        # Add the guess to the high_guesses array:
        high_guesses.append(guess)
    else:
        # Secret number found, so break out of loop:
        break

# Outside of the loop, examine your low_guesses and high_guesses lists.

Вы можете проверить списки, убедившись, что все элементы low_guesses меньше секретного номера и что все элементы high_guesses большечем секретный номер.Если это не так, вы знаете, что что-то не так.

(Также, несколько советов: пожалуйста, не называйте переменные l или lst. Они очень похожи на 1 или 1stчто это затрудняет чтение вашего кода, , даже если те, кто читает ваш код, уже знают, что они представляют имена переменных .)

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