Python- creating object instances in a loop with independent handling

前端 未结 1 808
长发绾君心
长发绾君心 2021-01-03 05:36

I have a simple election program. The following are the requirements:

  1. class Politician
  2. Randomized votes.
  3. Taking number of p

1条回答
  •  时光说笑
    2021-01-03 05:50

    You can store your instances in a list:

    politicians = []
    for name in 'ABC':
        politicians.append(Politician(name))
    

    Now you can access individual instances:

    >>> politicians[0].name
    'A'
    

    I used a modified version of your class that gives each politician a default age if no is provided:

    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)
    

    Now you can work with your list of politicians:

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

    prints:

    The Number of politicians: 3
    

    this:

    for politician in politicians:
        print(politician)
    

    prints:

    A: 0
    B: 0
    C: 0
    

    Assign random votes:

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

    Now:

    for politician in politicians:
        print(politician)
    

    prints:

    A: 35
    B: 37
    C: 28
    

    The whole program:

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

    And the usage:

    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
    

    UPDATE

    As @martineau suggests, for real-live problems a dictionary would be more useful.

    Create dictionary instead of a list:

    politicians = {}
    

    and in the loop us the name as key when you add your instance:

    politicians[new_name] = Politician(new_name)
    

    0 讨论(0)
提交回复
热议问题