Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果一个族在非上是平衡的,如何编写函数来获取?_Python_Recursion - Fatal编程技术网

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个孩子,而那些孩子有孩子。如果我们加上他们的钱,我们就得到了同样的价值

  • Matjaž(142)
    • 维尔杰姆(55岁)
      • 塔德加(45) 总和=242
  • 西尔卡(242)
    • 没有孩子 总和=242
  • 丹尼尔(4)
    • 伊丽莎白(8)
      • 卢德维克(37)
      • Jurij(5)
        • 法郎(16)
        • Jožef(7)
          • 阿伦卡(3)
          • 亚历山大(3)
          • 佩特拉(3)
      • 芭芭拉(37岁)
    • 汉斯(55岁)
      • 赫尔曼(12)
        • 玛格丽塔(20)
      • 埃里克(32岁) 总和=242
  • 这三个孩子的总价值为242英镑,因为这三个孩子都这么做了,所以作为一个平衡的家庭,他们的回报是真实的

    我已经编写了一个函数来计算家庭成员及其后代的金钱:

    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好的,现在把它翻译成代码。你在哪一方面遇到了麻烦?钱不是像孩子一样全球化的吗?感觉不一致。很抱歉我误读了你的问题并编辑了我的答案。