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

根据输入数量从类实例列表中随机抽取指定元素

问题与解决方案

需求

根据用户输入的数字,从已创建的类实例中随机抽取对应数量的元素,并打印这些实例的属性。例如输入2就抽2个,输入4就抽4个(需注意实例总数不能小于输入数字)。

现有代码问题

你当前的代码存在几个关键问题:

  • 类的__init__方法直接硬编码属性值,忽略传入参数,导致所有实例属性固定不变
  • 变量命名混乱(如x2=list = []这类错误赋值)
  • 未正确实现“抽取指定数量随机实例”的逻辑,导致重复打印整个列表

你的类定义代码

import random

class plane:
    def __init__(self, dyr, dyrefamilie, antallbein):
        self.dyr = 'Hund'
        self.dyrefamilie = 'Hundefamilien'
        self.antallbein = '4'
    def __str__(self):
        return f'undulat(={self.dyr},{self.dyrefamilie},{self.antallbein})'       
plane2 = plane(dyr='something', dyrefamilie="something", antallbein='4')

class rocket:
    def __init__(self, dyr, dyrefamilie, antallbein):
        self.dyr = 'something'
        self.dyrefamilie = 'something2'
        self.antallbein = '4'
    def __str__(self):
        return f'katt(={self.dyr},{self.dyrefamilie},{self.antallbein})'

rocket2 = rocket(dyr='something', dyrefamilie="something", antallbein='4')

class boat:
    def __init__(self, dyr, dyrefamilie, antallbein):
        self.dyr = 'something'
        self.dyrefamilie = 'something2'
        self.antallbein = '5'
    def __str__(self):
        return f'undulat(={self.dyr},{self.dyrefamilie},{self.antallbein})'
boat2 = boat(dyr='something', dyrefamilie="something", antallbein='2')

你尝试的代码

x2=list = []
x1=list = []
# appending instances to list

list.append(plane(1,2,3))
list.append(rocket(1,2,3))
list.append(boat(1,2,3))

random.shuffle(x1) #roterer litt rundt på listen
for i, x1 in enumerate(x1): #kode fra canvas
    print('Dyret er en', x1.dyr,'med',x1.antallbein+'-bein'+'.','denne er er en del av',   x1.dyrefamilie)

修正后的解决方案

步骤1:修正类的初始化逻辑

先让类的__init__方法使用传入参数,确保每个实例可以拥有不同属性:

import random

# 遵循PEP8命名规范(大驼峰),同时修正初始化逻辑
class Plane:
    def __init__(self, dyr, dyrefamilie, antallbein):
        self.dyr = dyr
        self.dyrefamilie = dyrefamilie
        self.antallbein = antallbein
    def __str__(self):
        return f'undulat(={self.dyr},{self.dyrefamilie},{self.antallbein})'       

class Rocket:
    def __init__(self, dyr, dyrefamilie, antallbein):
        self.dyr = dyr
        self.dyrefamilie = dyrefamilie
        self.antallbein = antallbein
    def __str__(self):
        return f'katt(={self.dyr},{self.dyrefamilie},{self.antallbein})'

class Boat:
    def __init__(self, dyr, dyrefamilie, antallbein):
        self.dyr = dyr
        self.dyrefamilie = dyrefamilie
        self.antallbein = antallbein
    def __str__(self):
        return f'undulat(={self.dyr},{self.dyrefamilie},{self.antallbein})'

# 创建实例
plane2 = Plane(dyr='Hund', dyrefamilie="Hundefamilien", antallbein='4')
rocket2 = Rocket(dyr='Katt', dyrefamilie="Kattfamilien", antallbein='4')
boat2 = Boat(dyr='Undulat', dyrefamilie="Undulatfamilien", antallbein='2')

步骤2:实现随机抽取逻辑

直接收集已创建的实例,用random.sample()抽取指定数量的不重复实例(若允许重复抽取,替换为random.choices()):

# 收集所有已创建的实例
all_instances = [plane2, rocket2, boat2]

# 获取并验证用户输入
while True:
    try:
        count = int(input("请输入要抽取的实例数量:"))
        if 0 < count <= len(all_instances):
            break
        else:
            print(f"请输入1到{len(all_instances)}之间的数字")
    except ValueError:
        print("请输入有效的整数")

# 随机抽取指定数量的实例
selected_instances = random.sample(all_instances, count)

# 打印选中实例的属性
for idx, instance in enumerate(selected_instances, 1):
    print(f"第{idx}个实例:")
    print(f'Dyret er en {instance.dyr} med {instance.antallbein}-bein. Denne er en del av {instance.dyrefamilie}')

核心说明

  • random.sample(list, k):从列表中随机抽取k个不重复元素,完全匹配需求
  • 输入验证确保用户输入合法,避免超出实例总数的无效请求
  • 直接复用已创建的实例,无需重复初始化,减少冗余操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:25:26