0

我写了一个游戏,玩家试图猜测一个随机数(见下面的代码)。还提供了诸如“太低……”和“太高……”之类的建议。但是如果反过来让计算机猜测玩家选择的数字呢?我对此有困难,我不知道为什么。我认为我需要某人的“推动”,而不是实际的代码,因为我需要自己尝试。如果有人能帮助我,我将不胜感激。

这是玩家必须猜测数字的代码(Python 3):

#Guess my Number - Exercise 3
#Limited to 5 guesses

import random 

attempts = 1
secret_number = random.randint(1,100)
isCorrect = False
guess = int(input("Take a guess: "))

while secret_number != guess and attempts < 6:

    if guess < secret_number:
        print("Higher...")
    elif guess > secret_number:
        print("Lower...")
    guess = int(input("Take a guess: "))
    attempts += 1

if attempts == 6:
    print("\nSorry you reached the maximum number of tries")
    print("The secret number was ",secret_number) 

else:
    print("\nYou guessed it! The number was " ,secret_number)
    print("You guessed it in ", attempts,"attempts")

input("\n\n Press the enter key to exit")           

谢谢你的帮助。

4

4 回答 4

4

在循环的每次迭代中,您都需要一个新的random.randint(low,high). low并且high可以通过将您的计算机猜测收集到 2 个列表 ( low_list) 和 ( high_list) 中来计算,这取决于当计算机告诉用户它是猜测时用户如何响应。然后你过去了lowmax(low_list)+1你过去了highmin(high_list)-1当然,您必须初始化low_listhigh_list使用允许的最低和最高数字。

您可以只保留“太高”猜测中的最低值和“too_low”猜测中的最高值,而不是列表。它的效率会稍微高一些,而且编写代码的工作量可能相同,但是你不能为了好玩而回顾计算机的猜测:)。

于 2012-11-16T16:10:11.510 回答
1

假设您知道它可能是(a,b)的数字范围。

考虑如何缩小范围。你会从中间猜测开始。如果你的猜测很低,你会在你最后的猜测和最高值之间进行猜测。如果它很高,您会在可能的最低值和最后一次猜测之间进行猜测。通过迭代缩小范围,最终你会找到这个数字。

这是一些伪代码:

loop{

guess = (a+b)/2

if high:
    b = guess - 1
else if low:
    a = guess + 1
else:
    guess = answer
}
于 2012-11-16T16:19:16.387 回答
1

您从最小允许数到最大允许数的范围开始,因为未知数可能在该范围内的任何位置。

每一步都需要选择一个数字进行查询,所以将空间分成两块;查询号码错误一侧的那些将被删除。在最少数量的查询中做到这一点的最有效方法是每次平分空间。

我建议您将游戏限制为整数,否则您最终会在公差和精度等浮点值方面遇到很多麻烦。

于 2012-11-16T16:17:44.033 回答
0

我只是和另一个人一起做了这个,使用一个while循环并使用print(“<,>,=”),然后做一个if语句。您需要一个最大点、中间点和低点,要获得中间点,您需要执行 midpoint=((highpoint=lowpoint)//2) 并且在 if 语句中您必须更改最大点和低点。

于 2018-10-24T23:29:21.477 回答