You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用random.choice()次数超列表元素量时停止运行如何解决

Python随机出题游戏运行异常解答

问题原因

首先明确:random.choice()不存在遍历完列表元素就自动停止的机制,每次调用都会随机从传入的序列中返回一个元素,调用次数无限制,你对问题原因的猜测不成立。

实际故障由两处代码逻辑错误导致:

  • 题目列表初始化时提前执行了出题逻辑:math_games_list定义时直接写入了Math_game.division_game(diffculty,1)这类带调用参数的方法,并非存储方法引用,因此列表创建阶段就直接执行了3个出题方法,输出3道题目。
  • for循环缩进错误,后续出题逻辑未生效:代码中的for循环和__init__方法平级,属于类定义阶段的顶层代码,只会在类首次加载时执行,无法访问__init__内部的局部变量math_games_list,也不会按传入的出题数量运行,剩余3道题的生成逻辑完全没有触发。

可行修复方案

核心改动点

  1. 调整缩进,将出题循环放到__init__方法内部,保证实例化时按传入参数的数量生成题目
  2. 列表内存储方法引用而非提前调用,每次随机选中后再执行方法生成新题目
  3. 使用类实例属性存储正误统计结果,避免全局变量污染

修复后代码

核心类实现

import random
# 假设你的Math_game类已提前定义完成
class Math_game_random:
    def __init__(self,diffculty,amt_problems):
        self.diffculty = diffculty
        self.amt_problems = amt_problems
        # 正误统计改为实例属性
        self.correct = 0
        self.incorrect = 0
        # 列表存储方法引用,不提前调用
        math_games_list = [
            Math_game.division_game,
            Math_game.addition_game,
            Math_game.multiplication_game
        ]
        # 循环放到__init__内部,按指定数量出题
        for i in range(amt_problems):
            # 随机选方法后再调用生成新题目
            current_game = random.choice(math_games_list)
            # 假设出题方法返回布尔值标识是否答对,按你实际逻辑调整即可
            is_right = current_game(diffculty,1)
            if is_right:
                self.correct +=1
            else:
                self.incorrect +=1

调用逻辑

amount_of_problems = 6
game = Math_game_random(1, amount_of_problems)
print(f"amount of correct: {game.correct}")
print(f"amount of incorrect: {game.incorrect}")

内容的提问来源于stack exchange,提问作者Marcus Peterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:18:01