python - 我使用了while循环,直到python抛出的随机数与输入匹配,为什么它不起作用?
问题描述
我让用户输入一个3位数字,让python抛出一个随机的3位数字,试试看这个随机数什么时候能匹配输入。但是,每次我在 cmd 上运行它时,它都会打印“Python 太累了”,这是我设置的一个语句,以防止它无限循环(我确实这样做了,直到我添加了这个尝试时间限制)。
import random
my_num = int(input('Type your 3-digit int number: '))
if my_num >= 100 and my_num < 1000:
attempt = 0
my_lottery = []
my_lottery.append(int(num) for num in str(my_num))
def lottery_throw():
lottery = []
i=0
while i<3:
lottery.append(random.randint(1,9))
i+=1
return(lottery)
def check():
global boo
lottery_throw()
if lottery == my_lottery:
boo = 'true'
else:
boo = 'false'
while attempt < 100000:
check()
attempt += 1
if boo == 'true':
print('you win')
print(attempt)
break
elif attempt >= 100000:
print('python is too tired')
break
else:
print('You must enter a 3-digit number.')
在 cmd 上运行,每次我运行它都会返回“Python 太累了”
但是可能的组合数(9C3)只有 84 个。python 不太可能真的没有抛出正确的数字。我该如何解决这个问题?
解决方案
错误
- 不要使用全局变量,除非你真的需要它们。如您所见,写入全局变量并不能正常工作
012
是一个有效的 3 位数字- 如果您将一个列表附加到另一个列表,您将获得一个嵌套列表(另一个列表中的列表):
[[1, 2, 3]]
- 当您可以创建数字本身时,为什么要创建每个数字的列表?
for
循环应该用于固定次数的迭代,while
当需要更复杂的条件从循环返回时循环。return
应该不带括号使用,因为它们是多余的(它不是函数)True
andFalse
是布尔值,不要使用"true"
and"false"
(字符串)来表示它们。if condition return true else return false
(在伪代码中)与return condition
for
循环也可以有一个else
子句,只有在没有break
找到时才会执行。
解决方案
import random
my_num = int(input("Type your 3-digit int number: "))
if 0 <= my_num < 1000:
for attempt in range(1, 100001):
if my_num == random.randint(0, 999):
print(f"You win in {attempt} attempts.")
break
else:
print("Python is too tired.")
else:
print("You must enter a 3-digit number.")
推荐阅读
- java - LeJOS GyroSensor 样本始终为 0
- ios - UITableViewCell 中的 UITableView 没有给出正确的结果
- python - Pandas DataFrame 返回一个元组,但不能访问单个数字?
- python - pandas :通过减少一个大系列的一系列系列
- ios - 无法将类型“()”的值分配给类型“UIView?”
- r - 从R中的csv文件绘制多个x轴轮廓?
- java - 使用 openapi-generator-maven-plugin 打开 API 3.0 未显示任何招摇文档
- python - 如何按顺序在折线图中表示月份
- android - java - 如何像在xml中一样在java中设置lottie动画?
- acumatica - PXSelector 属性抑制表单上的错误