【发布时间】:2019-11-01 07:37:06
【问题描述】:
大家好,我遇到了一个 for 循环问题,我无法在线找到解决方案。
假设我创建了两个类,一个用于人,一个用于动物。通过为动物类设置一个循环方法,它遍历一个人的年龄列表,我想找到每只具有相同年龄或至少最小年龄差距的宠物的主人(这个例子只是为了让代码看起来更简单)。我使用了min() 函数来找到年龄差距最小的人,这很好。
但是,如果我在选择过程中再添加一个标准呢?例如,我只想将动物分配给那些拥有少于 3 只宠物的人,这意味着即使一个人的年龄差距最小,如果该人已经拥有 3 只宠物,则无法将宠物分配给该人。在这种情况下,循环必须找到下一个拥有少于 3 只宠物的年龄差距最小的人。在我的情况下,必须将 A1 分配给 P1,因为它是拥有少于 3 只宠物的年龄差距最小的人。
到目前为止,这是我的代码:
class People:
def __init__(self, name, age, pets_owned):
self.name=name
self.age=age
self.pets_owned=pets_owned
P1=People("John",16, 1)
P2=People("Alex",10, 4)
P3=People("Anna", 20, 3)
People_List=[P1, P2, P3]
People_Age=[P1.age, P2.age, P3.age]
class Animal:
def __init__(self, name, age, owner):
self.name=name
self.age=age
self.owner=owner
def find(self):
closest_age = (min(People_Age, key=lambda x: abs(x - self.age)))
for a in People_List:
if a.age ==closest_age and a.pets_owned<3:
self.owner=a.name
a.pets_owned+=1
break
elif a.age==closest_age and a.pets_owned >=3:
pass #this is where I`m stuck
print(self.owner)
A1=Animal("Snoopy",7,"not_owned_yet")
A1.find()
【问题讨论】:
标签: python list class for-loop minimum