目的是找出一个家庭是否平衡。例如,我们有以下2个数组:
kids= {
"Adam": ["Matjaž", "Cilka", "Daniel"],
"Aleksander": [],
"Alenka": [],
"Barbara": [],
"Cilka": [],
"Daniel": ["Elizabeta", "Hans"],
"Erik": [],
"Elizabeta": ["Ludvik", "Jurij", "Barbara"],
"Franc": [],
"Herman": ["Margareta"],
"Hans": ["Herman", "Erik"],
"Jožef": ["Alenka", "Aleksander", "Petra"],
"Jurij": ["Franc", "Jožef"],
"Ludvik": [],
"Margareta": [],
"Matjaž": ["Viljem"],
"Petra": [],
"Tadeja": [],
"Viljem": ["Tadeja"],
}
kids数组告诉您谁的家庭成员是谁的孩子。 (这是一个全局数组)
money= {
"Adam": 42,
"Aleksander": 3,
"Alenka": 3,
"Barbara": 37,
"Cilka": 242,
"Daniel": 4,
"Erik": 32,
"Elizabeta": 8,
"Franc": 16,
"Herman": 12,
"Hans": 55,
"Jožef": 7,
"Jurij": 5,
"Ludvik": 37,
"Margareta": 20,
"Matjaž": 142,
"Petra": 3,
"Tadeja": 45,
"Viljem": 55
}
货币数组告诉您每个人有多少钱。
我们有这个功能:
def balanced(person, money):
#should return true if the family is balanced or not, if not returns false
例如:我们调用函数:
balanced("Adam", money)
它应该返回true,因为Adam有3个孩子,而那些孩子有孩子。而且,如果我们加上他们的金额,我们将获得相同的价值。
Matjaž(142)
维尔耶姆(55)
塔德雅(45)
总和= 242
希尔卡(242)
没有小孩
总和= 242
丹尼尔(4)
艾丽莎贝塔(8)
路德维克(37)
朱里(5)
法郎(16)
乔泽夫(7)
阿伦卡(3)
亚历山德(3)
佩特拉(3)
芭芭拉(37)
汉斯(55)
赫尔曼(12)
玛格丽特(20)
埃里克(32)
总和= 242
所有3个孩子返回的总货币值为242,并且由于所有3个孩子这样做,它作为一个平衡家庭返回TRUE。
我已经编写了一个函数来计算家庭成员及其后代的钱:
def amount_of_money(person, money):
amount = 0
for kid in kids[person]:
amount += amount_of_money(kid, money)
return amount + money[person]
现在,如果发生这种情况,我将如何编写函数
balanced
使其返回true? 最佳答案
因此,我们想首先使用您已经拥有的功能生成所有孩子(以及那里的孩子)的钱的list
。我们可以用comprehension
做到这一点。
然后,我们可以在all()
上使用generator
来检查孩子的所有钱是否都相同(即是否平衡)。
总而言之,该功能归结为2
行:
def balanced(person, money):
kidsMoney = [amount_of_money(k, money) for k in kids[person]]
return all(m == kidsMoney[0] for m in kidsMoney)
它确实起作用:
>>> balanced("Adam", money)
True
关于python - 如果家庭不平衡,如何编写函数来获取?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47847283/