Python—在循环中创建具有独立处理的对象实例

Python—在循环中创建具有独立处理的对象实例,python,class,instances,Python,Class,Instances,我有一个简单的选举计划。以下是要求: class政治家 随机投票 将政客的数量作为用户的输入 num_politicians = input("The number of politicians: ") 循环和创建实例 names = [] for x in range(num_politicians): new_name = input("Name: ") while new_name in names: new_name = input("Please e

我有一个简单的选举计划。以下是要求:

  • class政治家
  • 随机投票
  • 将政客的数量作为用户的输入

    num_politicians = input("The number of politicians: ")
    
  • 循环和创建实例

    names = []
    for x in range(num_politicians):
        new_name = input("Name: ")
        while new_name in names:
            new_name = input("Please enter another name: ")
        names.append(new_name)
    
        #### This part is the crux of my problem
        ### Create instances of the Politician class
        #### I want to do this in a way so that i can independently 
        #### handle each instance when i randomize and assign votes
    
  • 我看过:

  • 然而,我找不到解决我问题的办法

    政客类如下:

    class Politician:
    
        def __init__(self, name):
            self.name = str(name)
            self.age = age
            self.votes = 0
    
        def change(self):
            self.votes = self.votes + 1
    
        def __str__(self):
            return self.name + ": " + str(self.votes)
    
    >>> The Number of politicians: 3
    >>> Name: John
    >>> Name: Joseph
    >>> Name: Mary
    >>> Processing...
    (I use time.sleep(1.0) here)
    >>> Mary: 8 votes
    >>> John: 2 votes
    >>> Joseph: 1 vote
    
    所需输出:

    class Politician:
    
        def __init__(self, name):
            self.name = str(name)
            self.age = age
            self.votes = 0
    
        def change(self):
            self.votes = self.votes + 1
    
        def __str__(self):
            return self.name + ": " + str(self.votes)
    
    >>> The Number of politicians: 3
    >>> Name: John
    >>> Name: Joseph
    >>> Name: Mary
    >>> Processing...
    (I use time.sleep(1.0) here)
    >>> Mary: 8 votes
    >>> John: 2 votes
    >>> Joseph: 1 vote
    
    我的问题在一句话中

    我想在for循环中创建类实例,这样我就可以随机地为它们分配投票(我想这需要我独立处理实例)


    任何帮助都将不胜感激。

    您可以将实例存储在列表中:

    politicians = []
    for name in 'ABC':
        politicians.append(Politician(name))
    
    现在,您可以访问各个实例:

    >>> politicians[0].name
    'A'
    
    我使用了一个修改版的你的班级,如果没有提供,给每个政客一个默认年龄:

    class Politician:
    
        def __init__(self, name, age=45):
            self.name = str(name)
            self.age = age
            self.votes = 0
    
        def change(self):
            self.votes = self.votes + 1
    
        def __str__(self):
            return self.name + ": " + str(self.votes)
    
    现在,您可以使用您的政治家列表:

    print('The Number of politicians: {}'.format(len(politicians)))
    
    印刷品:

    The Number of politicians: 3
    
    A: 0
    B: 0
    C: 0
    
    A: 35
    B: 37
    C: 28
    
    这:

    印刷品:

    The Number of politicians: 3
    
    A: 0
    B: 0
    C: 0
    
    A: 35
    B: 37
    C: 28
    
    分配随机投票:

    import random
    
    for x in range(100):
        pol = random.choice(politicians)
        pol.votes += 1
    
    现在:

    印刷品:

    The Number of politicians: 3
    
    A: 0
    B: 0
    C: 0
    
    A: 35
    B: 37
    C: 28
    
    整个计划:

    # Assuming Python 3.
    
    class Politician:
    
        def __init__(self, name, age=45):
            self.name = str(name)
            self.age = age
            self.votes = 0
    
        def change(self):
            self.votes = self.votes + 1
    
        def __str__(self):
            return '{}: {} votes'.format(self.name, self.votes)
    
    num_politicians = int(input("The number of politicians: "))
    politicians = []
    for n in range(num_politicians):
        if n == 0:
            new_name = input("Please enter a name: ")
        else:
            new_name = input("Please enter another name: ")
        politicians.append(Politician(new_name))
    
    print('The Number of politicians: {}'.format(len(politicians)))
    for politician in politicians:
        print(politician)
    
    print('Processing ...')
    for x in range(100):
        pol = random.choice(politicians)
        pol.votes += 1
    
    for politician in politicians:
        print(politician)
    
    以及用法:

    The number of politicians: 3
    Please enter a name: John
    Please enter another name: Joseph
    Please enter another name: Mary
    The Number of politicians: 3
    John: 0 votes
    Joseph: 0 votes
    Mary: 0 votes
    Processing ...
    John: 25 votes
    Joseph: 39 votes
    Mary: 36 votes
    
    更新 正如@martineau所建议的那样,对于现实生活中的问题,字典会更有用 有用

    创建字典而不是列表:

    politicians = {}
    
    在循环中,添加实例时,将名称作为键:

    politicians[new_name] = Politician(new_name)
    

    我不理解这个问题,从语义上讲,实例是独立的。我建议将
    政客
    实例存储在键入其姓名的字典中,因为在现实生活中,投票是如何进行的(而不是从列表中随机选择一个)。@martineau同意。在我的回答中添加了几行建议这一改进。