Ich habe ein Programm erstellt, das eine .txt-Datei liest, die aus einer Liste von Preisen besteht. Das Programm erstellt eine zweidimensionale Liste zum Speichern der Wochennummer, des Preises und der Änderung der vorherigen Woche. Der Benutzer gibt die gewünschte Start- und Endwoche ein.Falsche Ergebnisse bei dem Versuch, die durchschnittliche Änderungsrate aus einer zweidimensionalen Liste zu ermitteln (aus einer TXT-Datei)
Wenn der Benutzer der Eingabe war die ‚Startwoche‘ als ‚1‘ und die ‚Ende der Woche‘ als ‚6‘: die durchschnittliche Änderung sollte ‚-0,30‘ seine die höchste Veränderung ‚Woche 4‘ sein soll mit einem Wechsel von '2.80' sollte die niedrigste Änderung 'Woche 5' mit einer Änderung von '-4.93' sein
Allerdings sind meine Zahlen völlig falsch.
Hier ist mein 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])/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
for j in range (startWeekVal, endWeekVal +1):
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()
Als Referenz ist hier die .txt-Datei:
52.33
50.99
52.29
55.09
50.16
50.50
51.82
51.30
52.03
53.07
53.49
54.21
55.57
54.42
55.65
51.78
49.87
50.39
51.08
50.62
52.32
51.79
51.48
50.13
49.83
51.16
52.30
53.70
56.57
56.68
57.96
57.94
57.62
58.03
57.67
56.21
57.25
57.43
57.60
57.80
57.42
59.66
59.87
58.71
59.02
60.35
60.53
59.25
61.97
62.30
63.24
62.14
Sollte nicht der Wechsel zwischen zwei Wochen die Differenz der Werte empfehlen? Warum teilst du dich? –
Sie haben Recht, ich habe das gerade behoben. Ich bekomme jetzt die korrekten Minimal- und Maximalwerte. Immer noch nicht die richtige durchschnittliche Änderungsrate. –
Welchen Wert erhalten Sie für die durchschnittliche Änderungsrate? –