python - 是否可以用 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..')
解决方案
当然!
您非常接近,但您没有正确使用 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 的可能性,将外壳变成骗子。也添加了错误捕获。享受!)
推荐阅读
- react-native - 使用本机反应创建计时器
- ethereum - 以太坊合约可以直接在比特币上执行交易吗?
- algorithm - 这是分类问题还是回归问题?什么算法可以用来解决它?
- android - 如何将从 firebase 检索到的数据保存到 arraylist
- python - 熊猫总和然后除以唯一计数
- jupyter-notebook - 将 nbextensions 与 Jupyter Server 一起使用的正确方法是什么(WinPython 3.8.8)
- java - 将对象列表转换为地图
使用地图/流/收集 - java - Android 房间查询返回 null
- phpunit - 如何在 Symfony 3.4 的单元测试中使用数据库中的数据?
- php - php的智能高亮功能