4 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個贊
返回的唯一原因-1是列表的大小是否不同;len在進(jìn)行迭代之前,您可以使用 O(1) 操作進(jìn)行檢查。
之后,只需對列表項(xiàng)進(jìn)行逐點(diǎn)比較即可。假設(shè)list1是亞當(dāng)和list2他的對手,
def winner_round(list1, list2):
if len(list1) != len(list2):
return -1
return sum(x > y for x, y in zip(list1, list2))
zip(list1, list2)生成對(30, 60),(50, 20)等。因?yàn)門rue == 1和False == 0(bool是 的子類int),您可以簡單地對結(jié)果求和,其中的值list1是一對中的較大值。
(您還可以使用map,因?yàn)樽鳛榈谝粋€參數(shù)的 2 參數(shù)函數(shù)允許您將兩個列表作為第二個和第三個參數(shù)傳遞,從而無需對實(shí)例進(jìn)行更明確的迭代。提供您需要的zip函數(shù)operator.gt:
return sum(map(operator.lt, list1, list2))
哪一個“更好”是個人喜好的問題。)

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個贊
逐項(xiàng)比較,如果大于則加1point
list1 = [30, 50, 10, 80, 100, 40]
list2 = [60, 20, 10, 20, 30, 20]
def winner_round(list1,list2):
point = 0
if len(list1)!=len(list2):
return -1
for i in range(len(list1)):
if list1[i] > list2[i]:
point+=1
return point

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個贊
積分總和:
list1 = [30, 50, 10, 80, 100, 40]
list2 = [60, 20, 10, 20, 30, 20]
def winner_round(list1,list2):
if sum(list1) > sum(list2):
return 1
else:
return 2
比較每輪:
list1 = [30, 50, 10, 80, 100, 40]
list2 = [60, 20, 10, 20, 30, 20]
def winner_round(list1,list2):
if len(list1) != len(list2): return -1
score1, score2 = 0
for i in range(list1):
if list1[i] > list2[i]:
score1 +=1
else:
score2 +=1
if score1 > score2:
return 1
else:
return 2

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個贊
這將是我對你的問題的解決方案:
def get_points(teamA,teamB):
if len(teamA)!=len(teamB):
print("Both lists have to be of same length.")
return -1
points=0
for i in range(len(teamA)):
if teamA[i]>teamB[i]:
points+=1
print("points:",points)
return points
我首先檢查兩個列表是否具有相同的長度,然后循環(huán)遍歷兩個列表,如果一個列表大于另一個列表,則增加一個計(jì)數(shù)器。(順便說一句,您嘗試在 return 語句之后打印一些內(nèi)容,該語句存在該函數(shù))希望有幫助,拉爾斯
添加回答
舉報