如何在python中编写反向'猜我的数字'游戏?

时间:2012-11-16 16:06:13

标签: python python-3.x

我写了一个游戏,玩家试图猜测一个随机数(见下面的代码)。还提供了诸如“太低......”和“太高......”等建议。但是如何扭转它并让计算机猜出玩家选择的数字呢?我有这个困难,我不知道为什么。我想我需要某人“推”而不是实际代码,因为我需要自己尝试。如果有人能帮助我,我将不胜感激。

以下是玩家必须猜测数字的代码(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 个答案:

答案 0 :(得分:4)

在循环的每次迭代中,您需要一个新的random.randint(low,high)。可以通过将计算机猜测收集到2个列表(low)和(high)中来计算low_listhigh_list,这是基于用户在计算机告诉用户时的响应方式猜测。然后,您low获得max(low_list)+1high获得min(high_list)-1。当然,您必须使用允许的最低和最高数字初始化low_listhigh_list

你可以保持“太高”猜测中的最低点和“太低”猜测中最高的而不是列表。它的效率会略高一些,编码的工作量也可能相同,但是你无法回头看看计算机的乐趣猜测:)。

答案 1 :(得分:1)

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

在每一步中,您需要选择要查询的数字,因此将空格分成两个块;那些错误的查询号码将被删除。在最少数量的查询中执行此操作的最有效方法是每次将空间平分。

我建议你将游戏限制为整数,否则你最终会遇到关于容差和精度的浮点值等等。

答案 2 :(得分:1)

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

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

这里有一些伪代码:

loop{

guess = (a+b)/2

if high:
    b = guess - 1
else if low:
    a = guess + 1
else:
    guess = answer
}

答案 3 :(得分:0)

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