<p>我认为,这段代码应该满足您的要求:</p>
<pre><code># get two dimensional list
priceList = []
#open the file
priceFile = open ('MicrosoftPrices.txt', 'r')
#create variable for start year
week = 1
price = float (priceFile.readline())
#special case for week 1
#initialize loop counter
i = 0
while price != '':
priceList.append ([0,0,0])
priceList [i][0] = week
priceList [i][1] = float (price)
if week == 1:
priceList [i][2] = 0
else:
priceList[i][2] = (priceList[i][1] - priceList[i-1][1])
#read the next line
price = priceFile.readline()
#add to the counter
i += 1
#go to next week
week = week + 1
#initialize start and end weeks
startWeek = 0
endWeek = 0
#define start week validation
def FirstValidation (startWeek):
startWeek = -1
while startWeek == -1:
startWeek = input ('What week would you like to start with?')
try:
if startWeek == '':
startWeek = 1
break
startWeek = int (startWeek)
except Exception:
print ('Year must be a valid integer between 1 and 52')
else:
if startWeek >= 1 and startWeek <= 52:
break
else:
startWeek = -1
print ('ERROR: Week must be a valid integer between 1 and 52! Please try again.')
return startWeek
#define end week validation
def LastValidation (endWeek):
endWeek = -1
while endWeek == -1:
endWeek = input ('What week would you like to end with?')
try:
if endWeek == '':
endWeek = 52
break
endWeek = int (endWeek)
except Exception:
print ('Year must be a valid integer between 1 and 52')
else:
if endWeek >= startWeek and endWeek <= 52:
break
else:
endWeek = -1
print ('ERROR: Week must be a valid integer between 1 and 52! Please try again.')
return endWeek
def main ():
#call week validations
startWeekVal = FirstValidation ('Start Week')
endWeekVal = LastValidation ('End Week')
#initialize min and max
maxChange = 0
minChange = 100
maxIndex = 0
minIndex = 0
total = 0
count = 0
print priceList
for j in range (startWeekVal-1, endWeekVal):
if priceList [j][2] > maxChange:
maxChange = priceList [j][2]
maxIndex = j
if priceList [j][2] < minChange:
minChange = priceList [j][2]
minIndex = j
#calc average
total += priceList [j][2]
count += 1
#compute average
average = total / count
print ('Start Week:', startWeekVal)
print ('End Week:', endWeekVal)
print ('The average change is ', average)
print ('The week with the highest change is week' , priceList [maxIndex][0], 'with $', format (maxChange, '.2f'))
print ('The week with the lowest change is week' , priceList [minIndex][0], 'with $', format (minChange, '.2f'))
#close the file
priceFile.close()
#call main
main ()
</code></pre>
<p>有几个问题,你迭代的范围上移了一个。也就是说,如果你试着把开始一周定为1,结束一周定为2,那么实际上应该是2和3。然后,您尝试跟踪每个子数组的第三个条目中的更改百分比,然后再次求平均值。相反,在第三个条目中跟踪震级变化,然后在最后求平均值。你知道吗</p>