目的是找出一个家庭是否平衡。例如,我们有以下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/

10-10 13:31