2013-03-21 77 views
0

我在CodingBat上練習Python。在那裏,一個問題是:a,b和c的總和沒有計算雙重值?

給定3個int值,a b c返回它們的總和。但是,如果其中一個值與另一個值相同,則不計入總和。

而我的回答是:

def lone_sum(a, b, c): 
    if a==b: 
    return c 
    elif a==c: 
    return b 
    elif b==c: 
    return a 
    elif a==b and a==c: 
    return 0 
    else: 
    return a+b+c 

但在執行時,它顯示除了一種情況確定。那是def long_sum(3,3,3)。但是當我在第一次檢查中寫if a==b and a==c時,它顯示一切正常。

爲什麼會發生這種情況?爲什麼我需要在第一張支票中寫入elif a==b and a==c

+0

提示args來的所有元素:如果一個'== B'是真的,沒有其他條件被測試,包括'a == b和a == c'。重新排序。 – Dogbert 2013-03-21 16:04:34

+0

太棒了!現在明白! – 2013-03-21 16:07:49

回答

3

ifelif語句按順序執行,並且只有在其中一個較早的語句不成立時纔會執行。第一次檢查看到ab是相等的,並且返回c。如果在ab等於您不想返回c的情況下,您需要首先了解這些情況。

+0

對!謝謝你的回答。 – 2013-03-21 16:08:37

0

您在此情況下立即返回c,因爲a == b已滿足。您應該從最具體到最不具體的重新排列您的測試。

+0

如果'a == b',那麼它會被滿足。很好!謝謝。 – 2013-03-21 16:09:51

0

只是一種更Python:工作超過3個指定參數和與1,如果:

def lone_sum(*args): 
    return sum(i for i in args if args.count(i) == 1) 

和採取迭代作爲唯一的參數,讓它們的總和。

我做一個發電機,這是一個itarable,與

i for i in args if args.count(i) == 1 

它只是給這apear只有一次在列表中

+0

你能解釋一下嗎? – 2013-03-21 16:39:39

相關問題