【问题标题】:How to code a reverse 'Guess my Number' game in python?如何在 python 中编写反向“猜我的号码”游戏?
【发布时间】:2012-11-16 16:06:12
【问题描述】:

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

这是玩家必须猜数字的代码(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")           

感谢您的帮助。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,但我还没有了解列表的工作原理。没有列表怎么办?
    • @fdama -- 这就是我最后一段解释的内容。
    【解决方案2】:

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

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

    我建议您将游戏限制为整数,否则您最终会在公差和精度等浮点值方面弄得一团糟。

    【讨论】:

      【解决方案3】:

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

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

      这里有一些伪代码:

      loop{
      
      guess = (a+b)/2
      
      if high:
          b = guess - 1
      else if low:
          a = guess + 1
      else:
          guess = answer
      }
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2016-11-28
          • 2012-10-28
          • 2017-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多