如何从函数列表随机抽取多个函数?Python卡牌程序问题
问题分析
你的代码存在两个核心问题:
random.sample(common_cards, 3)[0]()只抽取了随机样本里的第一个函数并执行,完全没处理另外两个;- 所有卡牌函数只有
print操作,没有返回值,执行后默认返回None,所以你最终存入player_deck的是一个None,而不是卡牌本身。
解决方案
根据你「将函数作为卡牌存入列表」的需求,提供两种实现方式:
方式一:直接存储函数对象
这种方式下,player_deck里保存的是函数本身,后续需要使用卡牌时再调用函数:
import random player_deck = [] def orc(): print("orc") def spirit(): print("spirit") def bob(): print("bob") def jerry(): print("jerry") common_cards = [orc, spirit, bob, jerry] # 抽取3个不重复的函数 selected_cards = random.sample(common_cards, 3) # 将函数存入玩家卡组 player_deck.extend(selected_cards) # 验证卡组内容:打印每个卡牌的名称,或者调用函数显示卡牌 print("卡组中的卡牌函数名称:") for card in player_deck: print(card.__name__) # 打印函数名,代表卡牌名 print("\n调用卡组中的卡牌:") for card in player_deck: card() # 执行函数,输出卡牌信息
方式二:让函数返回卡牌名称,存储名称字符串
如果你希望卡组里直接存储卡牌的名称文本,可以修改函数让它返回字符串,同时保留打印功能:
import random player_deck = [] def orc(): print("orc") return "orc" def spirit(): print("spirit") return "spirit" def bob(): print("bob") return "bob" def jerry(): print("jerry") return "jerry" common_cards = [orc, spirit, bob, jerry] # 抽取3个函数并执行,获取返回的卡牌名称 selected_cards = [card() for card in random.sample(common_cards, 3)] # 将卡牌名称存入卡组 player_deck.extend(selected_cards) # 打印卡组内容 print("玩家起始卡组:", player_deck)
关键说明
random.sample(common_cards, 3)直接返回包含3个随机函数的列表,不需要加[0](),那会只取第一个函数执行;- 若要存储函数对象,直接将
random.sample的结果添加到卡组即可;若要存储卡牌名称,需要让函数返回对应的字符串,再收集这些返回值。
内容的提问来源于stack exchange,提问作者Timmy
相关产品推荐
相关产品推荐

