课程之旅有一个列表,self.leg_miles
类ManyJourneys具有由创建的行程列表
self.journeys = []
for i in range(2):
self.journeys.append(Journey())根据一些输入,我将每个旅程的leg_miles添加到列表中,如下所示:
self.journeys[self.count].addLeg(temp)temp是我从列表中读取的数字。它始终更改为在上述行之前输入的内容。
出于某种原因,它不是为journey1创建新的列表,而是添加到已创建的列表中。
例如:如果leg_miles为4,5,6,而我继续使用journey1添加4和6,那么它将为: leg_miles = 4,5,6,4,6
我不明白为什么它还在增加。我有自己在里面。我不知道如何上传代码或图片。
我希望这些信息足以解决这个问题。
编辑:这是我的代码。
class Journey:
def __init__(self,odometer=0,leg_miles=[],leg_gas=[]): #constructor
self.odometer = odometer
self.leg_miles = leg_miles
self.leg_gas = leg_gas
def addLeg(self,miles,gas):
#adds to a list of miles and gas
self.leg_miles.append(miles)
self.leg_gas.append(gas)
def getLists(self):
#returns the list of miles and the list of gas
return self.leg_miles,self.leg_gas
def calculate(self):
#calculate the miles per litre for the journey and return
miles_per_litre = 0
for i in range(len(self.leg_miles)): #calcs miles per litre for each leg and adds to total
miles_per_litre += int(self.leg_miles[i]/self.leg_gas[i])
return miles_per_litre
class ManyJourneys:
def __init__(self,name):
self.myfile = open(name,"r")
self.content = self.myfile.read().split("\n")
self.journeys = []
for i in range(self.content.count("")+1):
self.journeys.append(Journey())
self.count = 0
for i in self.content:
if i == "":
self.count+=1
else:
temp = i.split(" ")
self.journeys[self.count].addLeg(int(temp[0]),int(temp[1]))
def statistics(self):
sum = 0
for i in self.journeys:
sum += i.calculate()
return sum/len(self.journeys)
def main():
filename = input("Please enter a file name. (Eg: test.txt): ")
manyJourneys1 = ManyJourneys(filename)
print("You got {0} miles per litre.".format(manyJourneys1.statistics()))
main()一个示例文本文件是
100 54
340 109
23 4
333 33
4500 678发布于 2014-03-25 13:27:03
在Python中有一个关于默认值的不明显的特性-它们每次都表示相同的对象,当使用可变的值作为默认值时,这会导致令人惊讶的行为:
def add(value, l=[]):
l.append(value)
return l
add(1) # [1]
add(2) # [1, 2]为了不落入此陷阱,请不要以这种方式使用list或任何其他可变值。如果您需要将某些内容初始化为空列表,请在函数/方法主体中执行此操作:
def __init__(self, odometer=0, leg_miles=None, leg_gas=None):
self.odometer = odometer
self.leg_miles = leg_miles or []
self.leg_gas = leg_gas or []发布于 2014-03-25 10:52:36
你搞砸了你对Journey的定义。可变类型必须在初始值设定项或方法中赋值,而不是在类或默认参数中赋值。
https://stackoverflow.com/questions/22624482
复制相似问题