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
相关产品推荐
相关产品推荐

