Python编写狼人杀角色随机分配程序如何避免人名与角色重复
狼人杀角色随机分配程序问题解答
问题解答
问题1:如何引用列表中存储的用户输入值?
你存储玩家姓名的列表是有序结构,直接用索引下标即可引用对应位置的内容,列表索引从0开始计数,比如List[0]就是第一位输入的玩家姓名,List[2]就是第三位输入的玩家姓名。问题2:如何引用列表中已经随机抽取到的值?
调用random.choice()时用变量承接返回值即可,抽取结果会保存在变量中可随时调用,比如selected_role = random.choice(Roles),后续直接使用selected_role就能拿到本次抽取到的角色。问题3:如何移除已抽取的值避免重复?
拿到抽取结果后调用列表的remove()方法,把抽取到的元素从对应列表中删除即可。另外更简洁的实现方式是用random.shuffle()方法直接打乱玩家列表和角色列表的顺序,再按位置一一配对,不会出现重复抽取的问题。
优化后可运行完整代码
import random # 预设狼人杀角色列表 roles = ['普通狼人', '狼预言家', '白痴', '预言家', '女巫', '猎人', '牧师', '丘比特', '小女孩', '守卫'] players = [] player_num = int(input("请输入参与游戏的玩家人数:")) # 收集所有玩家姓名 for i in range(player_num): name = input(f"请输入第{i+1}位玩家的姓名:") players.append(name) # 校验人数不超过角色总数 if player_num > len(roles): print(f"当前预设角色仅{len(roles)}个,最多支持{len(roles)}人同时游戏") else: # 打乱玩家和角色列表顺序 random.shuffle(players) random.shuffle(roles) # 按顺序配对分配角色 for idx in range(player_num): print(f"{players[idx]},你的游戏角色是:{roles[idx]}")
可选实现:抽一个删一个的逻辑
如果你想要保留原来逐次抽取的逻辑,也可以用下面的代码实现分配,效果完全一致:
import random roles = ['普通狼人', '狼预言家', '白痴', '预言家', '女巫', '猎人', '牧师', '丘比特', '小女孩', '守卫'] players = [] player_num = int(input("请输入参与游戏的玩家人数:")) for i in range(player_num): name = input(f"请输入第{i+1}位玩家的姓名:") players.append(name) if player_num > len(roles): print(f"当前预设角色仅{len(roles)}个,最多支持{len(roles)}人同时游戏") else: # 复制角色列表,避免修改原列表 available_roles = roles.copy() for player in players: # 抽取角色 assigned_role = random.choice(available_roles) # 移除已抽取的角色 available_roles.remove(assigned_role) print(f"{player},你的游戏角色是:{assigned_role}")
内容的提问来源于stack exchange,提问作者Kuai
相关产品推荐
相关产品推荐

