Python 如果一个族在非上是平衡的,如何编写函数来获取?
我们的目标是找出一个家庭是否平衡。例如,我们有以下两个阵列:Python 如果一个族在非上是平衡的,如何编写函数来获取?,python,recursion,Python,Recursion,我们的目标是找出一个家庭是否平衡。例如,我们有以下两个阵列: kids= { "Adam": ["Matjaž", "Cilka", "Daniel"], "Aleksander": [], "Alenka": [], "Barbara": [], "Cilka": [], "Daniel": ["Elizabeta", "Hans"], "Erik": [], "Elizabeta": ["Ludvik", "Jurij", "Barbara"], "Franc": [], "Herman":
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"],
}
孩子数组告诉你谁的家庭成员就是谁的孩子。(这是一个全局数组)
金钱数组告诉你每个人有多少钱
我们有这个功能:
def balanced(person, money):
#should return true if the family is balanced or not, if not returns false
balanced("Adam", money)
例如:我们调用函数:
def balanced(person, money):
#should return true if the family is balanced or not, if not returns false
balanced("Adam", money)
这应该是真的,因为亚当有3个孩子,而那些孩子有孩子。如果我们加上他们的钱,我们就得到了同样的价值
- 维尔杰姆(55岁)
- 塔德加(45) 总和=242
- 没有孩子 总和=242
- 伊丽莎白(8)
- 卢德维克(37)
- Jurij(5)
- 法郎(16)
- Jožef(7)
- 阿伦卡(3)
- 亚历山大(3)
- 佩特拉(3)
- 芭芭拉(37岁)
- 汉斯(55岁)
- 赫尔曼(12)
- 玛格丽塔(20)
- 埃里克(32岁) 总和=242
- 赫尔曼(12)
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?因此,我们首先要使用您已有的函数生成一个列表,列出所有孩子的钱(还有孩子)。我们可以通过理解来做到这一点
然后,我们可以使用generator
上的all()
来检查孩子的钱是否都一样(即平衡)
总之,该函数可归结为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
检查家庭金额集合是否最多有一个
def balanced(person, money):
return len({amount_of_money(kid, money) for kid in kids[person]}) <= 1
def平衡(人、钱):
return len({amount\u money(kid,money)for kid in kids[person]})您已经在amount\u money()中完成了大部分繁重的工作。
。对于balanced()
,您可以使用:
def balanced(person, money):
kid_amounts = [amount_of_money(kid, money) for kid in kids[person]]
return len(set(kid_amounts)) <= 1
def平衡(人、钱):
儿童金额=[儿童中儿童的金额(儿童,货币)]
return len(set(kid_amounts))“如果我们加上他们的金额,我们会得到相同的价值。”你加的是哪些货币价值?谁的价值相同?当你更具体地描述这个问题时,代码几乎是自己编写的。如果我调用名为“Adam”的函数,它会去检查kids数组,发现Adam有3个kids。现在,平衡函数应该为这3个孩子和他/她的后代中的每一个添加金额。如果所有3项的金额相同,则应返回true。否则它返回false好的,现在把它翻译成代码。你在哪一方面遇到了麻烦?钱不是像孩子一样全球化的吗?感觉不一致。很抱歉我误读了你的问题并编辑了我的答案。