实现掷双骰子胜负统计函数时遇'return' outside function语法错误求助
解决你的
count_wins函数问题 首先,咱们先拆解你遇到的两个核心问题:
1. 语法错误:SyntaxError: 'return' outside function
你写的roll_dice函数不仅代码不完整(return(random.randint(1, 2,...截断了),更关键的是——你根本不需要这个随机骰子函数。需求是计算两个骰子所有36种固定组合的胜负次数,不是模拟随机投掷,完全可以直接遍历所有可能的面组合。
另外,你在函数内部用input()重新获取dice1和dice2的做法也不符合设计逻辑:函数的定位是接收两个骰子作为参数传入,不是在内部读取用户输入,这会直接覆盖掉调用函数时传入的参数。
2. 修正后的完整代码
下面是完全符合需求的count_wins函数:
def count_wins(dice1, dice2): assert len(dice1) == 6 and len(dice2) == 6, "两个骰子必须都是6个面" dice1_wins, dice2_wins = 0, 0 # 遍历第一个骰子的每一个面 for d1 in dice1: # 遍历第二个骰子的每一个面,生成全部36种组合 for d2 in dice2: if d1 > d2: dice1_wins += 1 elif d2 > d1: dice2_wins += 1 # 点数相等的情况不统计胜负 return dice1_wins, dice2_wins # 测试示例:用两个标准骰子验证 standard_dice = [1,2,3,4,5,6] wins1, wins2 = count_wins(standard_dice, standard_dice) print(f"第一个骰子获胜次数:{wins1},第二个骰子获胜次数:{wins2}") # 输出应为 15 和 15,因为标准骰子互有15次获胜,6次平局
代码逻辑说明
- 用两层嵌套循环遍历两个骰子的所有面组合,覆盖全部36种可能
- 对每一组组合,比较点数大小:
- 若第一个骰子点数更大,其获胜次数加1
- 若第二个骰子点数更大,其获胜次数加1
- 点数相等时不统计胜负
- 最后返回两个获胜次数的元组
原代码出错的核心原因
- 函数内部用
input()覆盖传入参数,违背了函数“接收输入参数”的设计初衷 - 不必要的
roll_dice函数代码不完整,若缩进错误还会导致return语句不在函数块内,触发语法错误
内容的提问来源于stack exchange,提问作者Shirley Dong
相关产品推荐
相关产品推荐

