2016-08-05 28 views
0

Ich habe eine Liste mit einer bestimmten Anzahl von Gewinnern aus Kämpfen, die vom Benutzer eingegeben wurden, z. winners = ['Hunt', 'Nunes', 'Cormier']So vergleichen Sie Listen- und Wörterbuchwerte und weisen eine Variable zu

ich dann mit dem jeweils richtigen Vermutung des Spielers als Wert und ihre Namen als Schlüssel und meinem Programm einen Wörterbuch habe dann mit den Werten für jede Taste, um die Liste der Gewinner vergleicht und sagt jeden Spieler, wie viele Kämpfe vermuten, dass sie

richtig

Ich möchte in der Lage sein, jedem Kampf einen Wert zu geben, abhängig davon, wie viele Leute richtig geraten haben und dann diesen Wert verwenden, um zu bestimmen, wie viel von jedem Spieler, der den Gewinner dieses Kampfes richtig erraten hat.

EDIT: Hier ist die Gesamtheit meines Codes Klarheit zu helfen, bieten

#! 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

Wenn Sie 'player_dict' Daten senden dann könnten die Menschen Ihnen helfen, besser – Nilesh

Antwort

0

Nachfolgend berechnet die Anzahl der richtigen Vermutung ein Spieler im players Wörterbuch gemacht hat. Wenn ja, können Sie dies mit dem intersection() eines list mit einem set von winners tun.

dazu hinzuzufügen, wird eine Liste der Namen des Gewinners wird zu einem laufenden total hinzugefügt, das ist dann in eine Counter Sammlung (ein iterable akzeptiert und gibt ein Schlüssel/Wert Strukturdaten, die Anzahl der hält Vorkommen der gleichen Schlüssel gefunden in der Liste). Daraus können wir die notwendigen Schätzdaten extrapolieren.

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.' 

oder Sie für einen funktionale Programmierung Ansatz gehen könnte (inspiriert von Benutzer: @AMomchilov's Idee).

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.' 

Beispielausgabe:

>>> 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

im Grunde für das Programm, das ich bin auf der Suche zu zählen, wie oft der Sieger jeder Kampf wurde richtig geraten –

+0

Gib mir 1 sek, werde ich das Update @LukeBray – ospahiu

+1

vielen Dank, das ist, was ich gesucht –