编写Python掷骰子模拟函数时出现TypeError报错如何解决?
错误原因及修复方案
错误原因
你遇到的TypeError: 'function' object is not iterable报错由两个问题共同导致:
- 代码行
print(sum(Rolldice))直接将Rolldice函数对象作为参数传给sum(),没有调用函数,sum方法要求传入可迭代的数值集合,不支持直接处理函数对象。 - 你当前定义的
Rolldice函数仅实现了打印单次掷骰子点数的逻辑,没有返回任何可以用来统计总和的数值或可迭代对象,就算正确调用也无法完成求和计算。
另外你的输入提示文案、顺序和预期输出示例不匹配,也需要调整。
修复方案
修改逻辑
- 调整输入顺序和提示文案,匹配预期示例的交互逻辑
- 重写
Rolldice函数,每次掷骰子时将点数存入列表,函数最终返回该列表,既可以逐行打印点数,也可以直接对返回的列表求和
修复后完整代码
import random # 调整输入顺序和文案,匹配预期交互 p = int(input("How many players are rolling dice? ")) r = int(input("How many dice does each player roll? ")) s = int(input("How many sides does each die have? ")) def Rolldice(sides, dice_count): roll_results = [] for _ in range(dice_count): point = random.randint(1, sides) print(point) roll_results.append(point) return roll_results for player_num in range(1, p+1): print(f"Player {player_num} rolled:") results = Rolldice(s, r) print(f"That totals: {sum(results)}")
运行上述代码即可得到你给出的预期输出效果。
内容的提问来源于stack exchange,提问作者Tyree Rochelle
相关产品推荐
相关产品推荐

