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

Python中如何获取函数名而非其返回值?random模块骰子功能排障

问题原因与解决方案

问题根源

  • 你定义的d4()/d6()这类函数返回的只有随机掷出的点数,没有携带「骰子类型」的信息
  • 你构造diceDict的时候直接执行了d4()、d6()等函数,字典里存的是程序启动时一次性掷出的固定点数,不是骰子类型和对应逻辑的映射
  • getKey函数是用点数匹配字典里存储的固定点数,只要不同骰子掷出相同数值,就会返回第一个匹配到的骰子类型,完全不符合需求

修复方案

调整数据结构,让每个骰子的信息同时包含类型和点数即可解决问题,参考修改后的代码:

import random

# 定义不同骰子的面数映射,不需要单独写N个重复的骰子函数
dice_type_map = {
    'd4': 4,
    'd6': 6,
    'd8': 8,
    'd10': 10,
    'd12': 12,
    'd20': 20
}

# 掷骰子函数,返回(骰子类型, 点数)的元组,两类信息绑定存储
def roll_dice(dice_type):
    if dice_type not in dice_type_map:
        raise ValueError(f"不支持的骰子类型:{dice_type}")
    return (dice_type, random.randint(1, dice_type_map[dice_type]))

# 生成玩家骰子
player1 = [roll_dice('d4'), roll_dice('d4')]
player2 = [roll_dice('d4'), roll_dice('d4')]

# 直接取元组第一位即可得到骰子类型,不需要额外遍历匹配
print(f'P1 dice are: {player1[0][0]}和{player1[1][0]},对应点数分别为{player1[0][1]}、{player1[1][1]}')
print(f'P2 dice are: {player2[0][0]}和{player2[1][0]},对应点数分别为{player2[0][1]}、{player2[1][1]}')

该方案还附带优化点:新增骰子类型只需要在dice_type_map里加一条记录即可,不需要重复编写相似的骰子函数,逻辑更简洁,不会出现类型识别错误。

内容的提问来源于stack exchange,提问作者Adam Brame

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:09:01