班级旅行有一张单子,self.leg\u英里你知道吗
类ManyJourneys具有由创建的旅程列表
self.journeys = []
for i in range(2):
self.journeys.append(Journey())
从一些输入中,我将每段旅程的里程添加到列表中,如下所示:
self.journeys[self.count].addLeg(temp)
临时工是我从名单上读到的数字。它总是更改为上一行之前输入的内容。你知道吗
出于某种原因,它没有为旅程[1]创建新的列表,而是添加到已创建的列表中。你知道吗
例如: 如果旅程[0]的航程是[4,5,6] 我继续旅程[1],加上4和6 它会: 里程=[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
在Python中,默认值有一个不明显的特性-它们每次都代表同一个对象,当使用可变值作为默认值时,这会导致令人惊讶的行为:
为了不落入这个陷阱,不要以这种方式使用列表或任何其他可变值。如果需要将某些内容初始化为空列表,请在函数/方法体中执行:
你搞砸了你对
Journey
的定义。可变类型必须在初始值设定项或方法中指定,而不是在类或默认参数中指定。你知道吗相关问题 更多 >
编程相关推荐