2016-12-11 2 views
0

Я делаю систему голосования с python 3, и я получаю кандидаты для каждой позиции на основе ввода пользователем через tkinter. Для этого примера я не буду использовать tkinter, поскольку он не нужен.Создание переменных в цикле for

У меня есть мои кандидаты, хранящиеся внутри списков, когда они созданы. Поскольку пользователь может создавать столько кандидатов, сколько они хотят, нет способа узнать, сколько переменных мне нужно для процесса подсчета. Вот почему я считаю, что мне нужно использовать цикл for для создания переменных. Как я могу это сделать?

posOne = [] 
f = [x.strip() for x in candidates.split(',')] 
for x in f1: 
    posOne.append(x) 

for z in posOne: 
    #code to create a new variable 

Тогда я нужен способ, чтобы предназначаться созданные переменные так, когда они получают голос, я могу рассчитывать +1

Если вы знаете лучший способ справиться с этим, пожалуйста, дайте мне знать, потому что это, кажется, не оптимизированы

ответ

3

Почему бы не использовать словарь:

votes = {candidate.strip(): 0 for candidate in candidates.split(',')} 

Это словарь понимание, что эквивалентно:

votes = {} 
for candidate in candidates.split(','): 
    votes[candidate.strip()] = 0 

когда вы сделаете получить голос за кандидата:

votes[candidate] += 1 

Для определения победителя:

winner = max(votes, key=votes.get) 

например:

>>> candidates = 'me, you' 
>>> votes = {candidate.strip(): 0 for candidate in candidates.split(',')} 
>>> votes 
{'me': 0, 'you':0} 
>>> votes[you] += 1 
>>> winner = max(votes, key=votes.get) 
>>> winner 
'you' 
+0

Я никогда не использовал dicts или карты еще, как бы я определить победитель, используя это? – Shniper

+0

, если вы не возражаете, можете ли вы сломать то, что делает каждая часть кода, поскольку я не использовал диктофоны или карты, прежде чем это очень помогло бы мне понять, как отредактировать свой ответ для моей реальной программы – Shniper

1

Вы можете использовать collections.Counter который dict как объект, где значения считаются:

>>> from collections import Counter 
>>> candidates = 'Jack, Joe, Ben' 
>>> votes = Counter({x.strip(): 0 for x in candidates.split(',')}) 

Голосование будет сделано так:

>>> votes['Jack'] += 1 
>>> votes['Jack'] += 1 
>>> votes['Ben'] += 1 

И most_common могут быть использованы для определения победителя:

>>> votes.most_common(1) 
[('Jack', 2)] 
Смежные вопросы