简单模拟彩票中奖的代码,请问哪里有问题,运行了很长时间停不下来,尽管池子里的数字组合是唯一的,只有几次能直接运行出来

qq_53076543 2024-06-21 16:49:39

 

 

 

...全文
614 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

你目前的代码在运行时会进入一个无限循环,这是因为 while 循环的终止条件在多数情况下不会被满足。具体问题在于你的 for 循环中,每次都会生成一个新的随机数列表,但这个列表可能不会在每次迭代中完全等于 true_choices。因此,while 循环不会退出。

我们可以优化这个逻辑,确保随机选择过程不会导致无限循环。可以尝试调整代码结构,减少不必要的重复和复杂度。

以下是修改后的代码示例:


from random import choice
from collections import Counter

true_choices = [6, 8, 16, 18]
final_choices = []
choice_times = 0
lists = [6, 8, 18, 16]

while True:
    final_choices = []
    for _ in range(4):  # 确保生成的数量与 true_choices 相同
        final_choices.append(choice(lists))
    choice_times += 1
    
    if dict(Counter(final_choices)) == dict(Counter(true_choices)):
        print("Congratulations, you have won the lottery.")
        print(f"A total of {choice_times} times.")
        break

在这个修改版本中,我们通过 while True 进入一个无限循环,但我们会在条件满足时通过 break 语句跳出循环。这种方法可以确保代码不会进入无限循环,并且逻辑更加清晰易懂。

2301_79386209 2024-06-27
  • 打赏
  • 举报
回复

路过了解一下

「已注销」 2024-06-22
  • 打赏
  • 举报
回复

这里面没有限制最大的检测次数,可能会导致循环次数过大,无法在短时间内输出结果。可以加上一个限制条件,在多少次内循环结束,不再进行。

qq_53076543 2024-06-24
  • 举报
回复
@「已注销」 好滴谢谢

6,227

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用python
社区管理员
  • Python 学习者
  • 嗨学编程
  • 松鼠爱吃饼干
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎来到Python学习者们的社区,

 

本社区分享你需要的文章、问题解答、技术互助、学习资源、面试系列等等

 

欢迎你的加入,祝你学有所成~

试试用AI创作助手写篇文章吧