2017-04-20 1 views
0

Ich habe Probleme mit meinem Code die minimalen und maximalen Werte als Monate anstelle von Werten anzuzeigen. Der Code unten für min und max sind Platzhalter, aber ich bin mir nicht sicher, wie ich dieses Problem angehen soll.Finden Sie Indizes für minimale oder maximale Niederschlagswerte

def main(): 
#List of months 
rain_month = ['January', 'February', 'March',' April', \ 
       'May', 'June', 'July', 'August', \ 
       'September', 'October', 'November', 'December'] 
#Rainfall list 
rainfall = [] 

#Creates rainfall list for months 
index = 0 
while index < 12: 
    print ("Enter rainfall for ", rain_month [index], ": ",sep='', end = '') 
    amount = float(input()) 
    rainfall.append(amount) 
    index += 1 

print() 

#Total Rainfall 
total = 0 
for value in rainfall: 
    total += value 

print("Total Rainfall:", sep="", end="") 
print(format(total, ',.2f')) 

#Average Rainfall 
average = total/len(rainfall) 
print("Average Rainfall: ", sep="", end="") 
print(format(average, ',.2f')) 

#Sort 
rainfall.sort() 

print(min(rainfall)) 
print(max(rainfall)) 
main() 
+2

Was genau ist Ihr Problem? Das ist irgendwie vage. – Carcigenicate

Antwort

1

So den jeweiligen Index eines min oder max Wert erhalten Sie so etwas wie tun könnte:

index = rainfall.index(min(rainfall)) 

Und da Sie wissen, dass der Index richtig mit Ihrer rain_month Liste lin, können Sie verwende diesen Index den Monat zu finden:

print(rain_month[rainfall.index(min(rainfall))]) 

würde jedoch ein besserer Weg, verknüpfen Sie Ihre rain_months und rainfall unter Verwendung einer dict Struktur. Da wir die dict sollten wir wahrscheinlich ein OrderedDict verwendet bestellt werden möchten:

import collections 
# This is how OrderedDicts are initalized, you give them a list with (key,value) tuples for the order. 
rainfall = collections.OrderedDict(
[('January',0),('Feburary',0)] 
) 

# Do your computation, something like: 
for month in rainfall: 
    rainfall[month] = input("Rainfall: ") 

print(min(rainfall, key=rainfall.get)) 
print(max(rainfall, key=rainfall.get)) 

Auch wenn Sie rainfall.sort() tun, können Sie min von rainfall[0] und max von rainfall[-1] bekommen. min und max benötigen keine sortierten Listen. Auch, wenn Sie sort tun, ändern Sie die Reihenfolge von rainfall, während Sie nicht die Reihenfolge von rain_month ändern, was bedeutet, dass Sie die erste beschriebene Methode nicht verwenden können, um den richtigen Monat zu erhalten.

Mein Vorschlag wäre, entweder sort zu entfernen, oder die zweite Methode zu verwenden.

+0

Hinweis: Dies hat eine Einschränkung im Falle einer gebundenen max oder min. Es wird das erste von der Liste zurückgeben. – James

+0

Ja, das ist richtig, aber so funktionieren auch 'min' und 'max'. Das Entfernen von 'index' würde dieses Verhalten nicht ändern, wie das zweite Beispiel mit einem' OrderedDict' zeigt. – Darkstarone

+1

Das hat mein Problem komplett gelöst! Die erste Methode erfordert, dass ich die Sortierfunktion entferne. Ich habe noch nichts über die Strukturen von Diktaten gelernt, aber ich werde mich darum kümmern. Danke für deine Hilfe Darkstarone! –

Verwandte Themen