4 回答

TA貢獻1788條經驗 獲得超4個贊
這是一個可能的解決方案:
def totalcost(ar):
return -1 if ar[-1] == -1 else sum(x for x in ar if x != -1)
如果您不想要使用列表理解的單行解決方案,您可以執行以下操作:
def totalcost(ar):
if ar[-1] == -1:
return -1
s = 0
for x in ar:
if x != -1:
s += x
return s

TA貢獻1784條經驗 獲得超9個贊
您可以使用一些簡單的功能來改善您的生活:
sum(filter(lambda?x:?x?!=?-1,?ls))
sum
- 在不使用 for 循環的情況下對 iterable 求和filter
- 從 iterable 中過濾掉不需要的元素。在這種情況下,我使用ls
簡單的lambda x: x != -1
.
當然,這應該在您的初始條件之后使用,如下所示:
if?ls[-1]?==?-1: ????return?-1 ????return?sum(filter(lambda?x:?x?!=?-1,?ls))

TA貢獻1155條經驗 獲得超0個贊
我認為您可以簡單地使用 filter 和 sum 以及 lambda 來實現。只是稍微更新了你的 totalcost 函數
import sys
def totalcost(ar):
? ? if ar[-1] == -1:
? ? ? ? return -1
? ? else:
? ? ? ? ar_filtered = filter(lambda x: x > 0, ar)
? ? ? ? return sum(ar_filtered)
if __name__ == '__main__':
? ? ar_city = [1, 2, 3, 4, 5]
? ? assert totalcost(ar_city) == 15
? ? ar_city = [1, 2, 3, 4, -1]
? ? assert totalcost(ar_city) == -1
? ? ar_city = [1, 2, -1, 4, 5]
? ? assert totalcost(ar_city) == 12

TA貢獻1871條經驗 獲得超8個贊
以下是你犯過的錯誤:
ar[elem]
沒有ar
正確迭代每個元素。您在 for-in 循環中返回
summ
,因此它只會返回第一個元素的值。
這是一個根據您的代碼修改的工作示例。
def totalcost(ar):
if ar[-1] == -1:
return -1
summ = 0
for elem in ar:
if(elem != -1):
summ += elem
return summ
添加回答
舉報