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

Python3骰子游戏开发问题:主函数字典值如何传入掷骰子函数

解决骰子游戏中玩家名称传递的问题

嘿,我一看你的代码就知道问题出在哪了——你调用roll_dice()的时候根本没把玩家名称传进去,函数里也没地方接这个值,那输入提示里自然没法显示玩家名啦!别担心,咱们几步就能搞定:

关键修改点

  • 给roll_dice函数添加一个参数,用来接收当前玩家的名称
  • 在主函数的循环中,调用roll_dice时把对应的玩家名传递过去
  • 顺便修复代码里的两个小bug:多余的player +=1和会导致无限递归的return roll_dice

修改后的完整代码

from random import randint

def main():
    player_count = int(input('How many players> '))
    player_dict = {}
    # 循环获取玩家名称,改用range(1, player_count+1)刚好覆盖所有玩家数
    for pl in range(1, player_count + 1):
        player_name = input(f'Player {str(pl)} name> ')
        player_dict[pl] = player_name
    # 遍历字典的值,直接拿到每个玩家的名称传递给roll_dice
    for player_name in player_dict.values():
        roll_dice(player_name)

def roll_dice(player_name):
    # 这里用传入的玩家名称格式化提示文本
    start_rolling = input(f'{player_name} roll dice? y/n> ')
    if start_rolling.lower() == 'y':  # 用lower()同时兼容y和Y的输入,更简洁
        roll = randint(1, 6)
        print(f'{player_name} rolled a {roll}!')
    # 去掉原有的return roll_dice,避免无限递归

if __name__ == "__main__":
    main()

额外优化(可选)

如果你想让玩家可以重复掷骰子直到选择退出,可以给roll_dice函数加个循环:

def roll_dice(player_name):
    while True:
        start_rolling = input(f'{player_name} roll dice? y/n> ')
        if start_rolling.lower() == 'y':
            roll = randint(1, 6)
            print(f'{player_name} rolled a {roll}!')
        elif start_rolling.lower() == 'n':
            print(f'{player_name} is done rolling.')
            break
        else:
            print('Please enter y or n!')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:53:12