python循环创建对象_关于类:Python-在具有独立处理的循环中创建对象实例

我有一个简单的选举程序。要求如下:

class Politician

随机投票。

把政治家的数量作为用户的输入。

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

我看过:

在循环中如何创建不同的变量名?(Python)

python:在循环中创建对象的实例

但是我找不到解决我问题的办法

政治家阶层如下:

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

这是:

for politician in politicians:

print(politician)

印刷品:

A: 0

B: 0

C: 0

分配随机投票:

import random

for x in range(100):

pol = random.choice(politicians)

pol.votes += 1

现在:

for politician in politicians:

print(politician)

印刷品:

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)

我建议将Politician实例存储在一个键入其名称的字典中,因为在现实生活中,投票是如何进行的(而不是从它们的列表中随机选择一个)。

@马蒂诺同意。在我的回答中加了几行建议改进。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值