如何解决Python-遍历许多对象,从它们中提取数据以累加总数
我想迭代一些对象,取出数字,并进行累加。这就是我所拥有的:
print ('Calculating Commmissions with objects')
class SalesReps:
count = 0
def __init__( self,name,sales,commission) :
self.name = name
self.sales = sales
self.commission = commission
SalesReps.count += 1
def name_performance_pay( self ) :
return self.name
return self.sales
return self.commission
s1=SalesReps ('BAnderson',15685.75,1568.68)
s2=SalesReps ('GBates',13856.80,1385.68)
s3=SalesReps ('MBerger',18560.44,1437.04)
s4=SalesReps ('JCarter',14375.86,1437.59)
s5=SalesReps ('VChambers',15963.45,1596.35)
print('We have ',SalesReps.count,'sales reps.\n')
for rep in range(1,5):
print(s[rep].name,s[rep].sales,s[rep].comission,'\n')
totalSales = totalSales + s[rep].sales
totalCommissions = totalCommissions + s[rep].commision
print ('Our total sales were ',totalSales,'and our total commissions paid was ',totalCommissions,'.\n)
这就是我得到的:
Traceback (most recent call last):
File "/home/jrw/Documents/bp.py",line 23,in <module>
print(s[rep].name,'\n')
NameError: name 's' is not
Python是否有不同的下标约定?我没有找到。
解决方法
您命名了五个不相关的变量(s1
,s2
,s3
,...),但您并没有创建名为list
的单个s
,因此不能下标s
(没有s
)。更改用于初始化s1
和公司的代码,以创建名为list
的单个s
,这将更接近于工作:
s = [SalesReps ('BAnderson',15685.75,1568.68),SalesReps ('GBates',13856.80,1385.68),SalesReps ('MBerger',18560.44,1437.04),SalesReps ('JCarter',14375.86,1437.59),SalesReps ('VChambers',15963.45,1596.35)]
for rep in range(len(s)):
将这样做,尽管它不是Python语言的(for i in range(len(someseq)):
基本上总是错误的方式)。更加Pythonic的方法会导致循环:
for rep in s:
print(rep.name,rep.sales,rep.commission,'\n')
totalSales += rep.sales
totalCommissions += rep.commission
直接迭代列表的内容,而不是重复索引的有效索引。
,这是用pythonic方式进行的修改。
- 使用
len(s)
代替SalesReps.count
。 - 使用
sum
代替for语句。
print ('Calculating Commmissions with objects')
class SalesReps:
def __init__( self,name,sales,commission) :
self.name = name
self.sales = sales
self.commission = commission
def name_performance_pay( self ) :
return self.name
return self.sales
return self.commission
s=[SalesReps ('BAnderson',1596.35)]
print('We have ',len(s),'sales reps.\n')
totalSales = sum(r.sales for r in s)
totalCommissions = sum(r.commission for r in s)
print ('Our total sales were ',totalSales,'and our total commissions paid was ',totalCommissions,'.\n')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。