[英]tournament winner python while loop
我制作了一個 function 'Match',它需要兩個國家並根據我的算法返回一個獲勝者。
前任)
def Match(England, Brazil) ----> England,
def Match(Mexico, France) ---> France
我需要編寫 function 獲勝者,其中包含 2^n 個國家的名單並舉辦錦標賽並找到獲勝者。
前任)
def Winner([England, Brazil, Mexico, France]) ---> France
England---Brazil, Mexico---France (Semifinal)
England---France (final)
France (winner) Return value
國家名單的長度不同,我無法制定獲勝者選擇算法。 如果代碼使用while循環而不是for循環^^,那就太好了。
您的tournament
方法應該在連續的玩家對之間進行匹配,對於["a", "b", "c", "d", "e", "f", "g", "h"]
它應該a/b
、 c/d
、 e/f
和g/h
您可以通過切片和zip
來實現這些
countries[::2]
對 2 取 1 所以["a", "c", "e", "g"]
countries[1::2]
相同但從 1 開始所以["b", "d", "f", "h"]
zip
將這 2 個列表配對以創建對手配對
保留每場比賽的獲勝者,並與包含一半玩家的下一輪玩家遞歸調用tournament
# FOR DEMO PURPOSER
def match(country_a, country_b):
return random.choice([country_a, country_b])
def tournament(countries):
n = len(countries)
if not ((n & (n - 1) == 0) and n != 0):
raise Exception("Size isn't power of 2")
if n == 2:
return match(*countries)
next_round = []
for player1, player2 in zip(countries[::2], countries[1::2]):
winner = match(player1, player2)
next_round.append(winner)
return tournament(next_round)
使用list-comprehension
for-loop 和return
可以替換為
return tournament([match(p1, p2) for p1, p2 in zip(countries[::2], countries[1::2])])
經過一段時間和 OP 的討論,這里有一個主要規則的完整代碼的重大改進:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.