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同意。在我的回答中添加了几行建议这一改进。