首页 > 解决方案 > 是否可以用 Python 做一个猜谜游戏,每个输入将在哪里接收随机数,比如动态循环输入?

问题描述

例如,我想输入一个随机数,如果它是错误的,那么下一个输入会生成一个新的随机数,依此类推..

这是我的代码,但这不是我想要的

import random 

secret_number = random.randint(0, 10)
guess_count = 0
guess_limit = 20 

while guess_count < guess_limit: 
    guess = int(input('Guess between [0, 10]: ')) 
    guess_count += 1    
    if guess == secret_number: 
        print('You won!') 
        break
else: 
    print('Wrong..')

标签: pythonrandom

解决方案


当然!

您非常接近,但您没有正确使用 python 3 语法(假设您使用的是 python 3,因为它看起来很接近)。

在我看来,你应该重新考虑你的循环架构。通常,当迭代次数是动态的时,使用“While”循环。因为您的尝试次数是静态的,所以您可以简单地使用“if”循环。在 python 中,您可以使用范围循环指定它。

尝试这样的事情(在最新版本的 python 3 上!):

import random

num_guesses = 20

print("I'm thinking of a new number between 1 and 10...")
secret_number = random.randint(1, 10)

    for x in range(0, num_guesses):
        try:
          user_guess = int(input(f"What's your guess? You have {num_guesses - x} tries left."))
        except:
          print("Invalid Number, skipping guess!")
          continue
        if (user_guess == secret_number):
            print("Congratulations, you won!")
            exit(0)
    print("Sorry, you lost. Try again!")

如果用户赢了,游戏就会退出,这是应该的。如果您经历了所有 20 次迭代并且用户永远不会获胜,那么您只会遇到损失情况。

不过,我建议要么使随机数的范围大于猜测的数量,要么每次都生成一个新数字......

for x in range(0, num_guesses):
    print("I'm thinking of a new number between 1 and 10...")
    secret_number = random.randint(1, 10)
    user_guess = input(f"What's your guess? You have {num_guesses - x} tries left.")

有 20 次猜测,以及 1 到 10 之间的静态数字,永远不可能输!您还应该包括尝试,除非有人不输入数字的情况下阻止。(不能相信你的用户!)

(编辑:修复了几个问题。没有正确投射整数进行匹配,并创造了生成 0 的可能性,将外壳变成骗子。也添加了错误捕获。享受!)


推荐阅读