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

如何从函数列表随机抽取多个函数?Python卡牌程序问题

问题分析

你的代码存在两个核心问题:

  1. random.sample(common_cards, 3)[0]() 只抽取了随机样本里的第一个函数并执行,完全没处理另外两个;
  2. 所有卡牌函数只有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:42:48