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

实现掷双骰子胜负统计函数时遇'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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:29:01