2016-08-05 71 views
0

我有一個列表,其中包含由用戶輸入的一定數量的來自戰鬥的獲勝者,例如, winners = ['Hunt', 'Nunes', 'Cormier']如何比較列表和字典值並分配變量

然後有

我與每個玩家的正確的猜測值和它們作爲鍵的名字和我的程序一本字典,然後比較了每個鍵的值獲獎名單,並告訴每個玩家有多少戰鬥他們猜中

for name in player_dict: 
    player_dict[name].sort() 
    player_dict[name] = set(player_dict[name]) & set(winners) 
    wins = (len(player_dict[name])) 
    print(name + ' guessed ' + str(wins) + ' fights correctly.') 

我想要做的就是根據有多少人正確猜測,給每場比賽一個價值,然後使用這個數值來確定每個正確猜出勝利者的玩家將得到多少底池。

編輯:這裏是我的代碼的全部,以幫助提供清晰

#! python3 

#fight_gambler.py - a program that lets players gamble on fights with friends 

players = [] 
while len(players) >= 0: 
    name = input('Enter a name: ') 
    players.append(name) 
    if name == '': 
     players.pop() 
     break 
    else: 
     pass 

player_dict = {name: [] for name in players} #creates a key for each name with that name as the key 
print(player_dict) 

fight_amount = int(input('How many fights are there? ')) 
fight_number = 1 
for name in player_dict:     #adds fight winner prediction as values to each name 

fight_number = 1 

while fight_number <= fight_amount: 
     answer = input(name + ', who will win fight ' + str(fight_number) + '? ') 
     player_dict[name].append(answer) 
     fight_number = fight_number + 1 
fight_number = 1 
winners = [] 

while fight_number <= fight_amount:     # creates a list of fight winners 
    winner = input('Who won fight ' + str(fight_number) + '? ') 
    winners.append(winner) 
    fight_number = fight_number + 1 
winners.sort() 

for name in player_dict: 
    player_dict[name].sort() 
    player_dict[name] = set(player_dict[name]) & set(winners) 
    wins = (len(player_dict[name])) 
    print(name + ' guessed ' + str(wins) + ' fights correctly.') 
+0

如果發送'player_dict'數據,那麼人們可能會幫助您更好地 – Nilesh

回答

0

下計算正確猜測在players字典中的球員已經取得的數量。如果是這樣,你可以用intersection()listsetwinners來做到這一點。

要添加到這一點,獲獎者的名稱的列表被添加到運行total,這是隨後轉換爲Counter集合(接受可迭代,並返回一個鍵/值數據結構,保持的計數在列表中發現相同的密鑰)。由此我們可以推斷必要的猜測數據。

from collections import Counter 

winners = set([['Hunt', 'Nunes', 'Cormier']) 
players = {'player1': ['Nunes', 'Cormier', 'test1', 'test2'], 
'player2': ['Nunes','test1', 'test2','test3', 'test4'], 
'player3' : ['Hunt', 'Nunes', 'Cormier']} 

total = [] 
for player, picks in players.iteritems(): 
    inter = winners.intersection(picks) 
    total.extend(inter) # Add to list of winner names. 
    print player, 'guessed:', len(inter), 'fights correctly.' 

for fighter, guess in Counter(total).iteritems(): 
    print fighter,'was guessed correctly',guess,'times.' if guess>1 else 'time.' 

,或者你可以去一個更函數式編程辦法(由用戶啓發:@AMomchilov's想法)。

players_num_correct_picks = dict((k, winners.intersection(v)) for (k, v) in players.items()) 
for player, picks in players_num_correct_picks.items(): 
    print player, 'guessed:', len(picks), 'fights correctly.' 

total = Counter(item for sublist in players_num_correct_picks.values() for item in sublist) 
for fighter, guess in total.items(): 
    print fighter,'was guessed correctly',guess,'times.' if guess>1 else 'time.' 

樣本輸出:

>>> player2 guessed: 1 fights correctly. 
>>> player3 guessed: 3 fights correctly. 
>>> player1 guessed: 2 fights correctly. 
>>> Cormier was guessed correctly 2 times. 
>>> Nunes was guessed correctly 3 times. 
>>> Hunt was guessed correctly 1 time. 
+0

基本上我要找的程序指望有多少次,每次鬥爭的勝利者被猜對了 –

+0

給我1秒,我會發布更新@LukeBray – ospahiu

+1

非常感謝,這就是我正在尋找的 –