【问题标题】:Create variables in a for loop在 for 循环中创建变量
【发布时间】:2016-12-11 02:25:43
【问题描述】:

我正在使用 python 3 制作一个投票系统,并根据用户通过 tkinter 的输入来获得每个职位的候选人。为了这个例子,我不会使用 tkinter,因为它是不必要的。

我的候选人在创建时存储在列表中。由于用户可以根据需要创建任意数量的候选人,因此无法知道计数过程需要多少变量。这就是为什么我认为我需要使用 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

如果您知道更好的处理方法,请告诉我,因为这似乎没有优化

【问题讨论】:

    标签: python variables for-loop


    【解决方案1】:

    为什么不使用字典:

    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'
    

    【讨论】:

    • 我还没有使用过dicts或maps,我将如何使用它来确定获胜者?
    • 如果您不介意您能否分解代码的每个部分,因为我之前没有使用过字典或地图,这将极大地帮助我理解如何根据我的实际情况编辑您的答案程序
    【解决方案2】:

    您可以使用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)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2019-06-14
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多