2016-09-25 6 views
0

Wie kann ich mein Programm anzeigen Jahr 1 für die ersten 12 Monate und dann Jahr 2 für die nächsten 12 Monate anzeigen, wenn der Eingabewert für Jahre = 2?Nested Loops Berechnung Ausgabe ist falsch, aber das Programm läuft

Auch ich weiß nicht, wo meine Berechnung falsch läuft. Nach meinem gewünschten Ausgang sollte die Gesamtniederschlagsmenge Ausgang 37 sein, aber ich bin 39.

Added picture of current output. Total should be at 37 not 39. I also need the second batch of 12 months to say year 2

#the following are the values for input: 
#year 1 month 1 THROUGH year 1 month 11 = 1 
#year 1 month 12 THROUGH year 2 month 12 = 2 

def main(): 
    #desired year = 2 
    years = int(input("Enter the number of years you want the rainfall calculator to determine: ")) 
    calcRainFall(years) 

def calcRainFall(yearsF): 
    months = 12 
    grandTotal = 0.0 

    for years_rain in range(yearsF): 
     total= 0.0 
     for month in range(months): 
      print('Enter the number of inches of rainfall for year 1 month', month + 1, end='') 
      rain = int(input(': ')) 
      total += rain 
     grandTotal += total 
    #This is not giving me the total I need. output should be 37. 
    #rainTotal = rain + grandTotal 
    #print("The total amount of inches of rainfall for 2 year(s), is", rainTotal) 
    print("The total amount of inches of rainfall for 2 year(s), is", grandTotal) 
main() 
+0

Sie sind nicht 'years_rain' für alles verwenden. Versuchen Sie, es anstelle von "Jahr 1" zu drucken. –

+0

das würde mich wegen eines Syntaxfehlers nicht lassen. – Alina

+0

Was ist der Syntaxfehler und was ist der Code? Stellen Sie es in Frage. –

Antwort

2

Ich habe Ihren Code ein wenig gekürzt. Hoffentlich ein vollständiges und richtiges Programm ist:

def main(): 
    years = int(input("Enter the number of years you want the rainfall calculator to determine: ")) 
    calcRainFall(years) 

def calcRainFall(yearsF): 
    months = 12 * yearsF # total number of months 
    grandTotal = 0.0  # inches of rain 

    for month in range(months): 
     # int(month/12): rounds down to the nearest integer. Add 1 to start from year 1, not year 0. 
     # month % 12: finds the remainder when divided by 12. Add 1 to start from month 1, not month 0. 
     print('Enter the number of inches of rainfall for year', int(month/12) + 1, 'month', month % 12 + 1, end='') 
     rain = int(input(': ')) 
     grandTotal += rain 
    print("The total amount of inches of rainfall for", yearsF, "year(s), is", grandTotal) 

main() 
+0

Das hat funktioniert, Könnten Sie weiter erklären, wie es ist, dass ich etwas verloren habe, wie es in Jahr 2 gehen konnte. – Alina

+0

Für die ersten 12 Monate (Monate = 0.11), Monate/12 = 0 Punkt etwas. Für die nächsten 12 Monate (Monate = 12..23), Monate/12 = 1 Punkt etwas. Die Verwendung von int() ignoriert die Nachkommastellen. Es gibt grundsätzlich die Anzahl der Jahre beginnend mit 0. Also wir + 1. – Ahmad

3

Vor der print-Anweisung bekommen, brauchen Sie nicht regt Wert wieder für rainTotal hinzuzufügen. Dies liegt daran, GrandTotal Konten für den Regen pro Jahr. Und es wird bereits seit zwei Jahren zweimal hinzugefügt. Also, was Sie tun im Wesentlichen den letzten Wert von regen Zugabe zweimal (2 in diesem Fall) Machen Sie Ihre print-Anweisung diese und entfernen rainTotal -

print("The total amount of inches of rainfall for 2 year(s), is", grandTotal) 
+0

Das hat den Trick gemacht. Könntest du mir helfen, das zweite Jahr zu machen, sage Jahr 2 und nicht wieder Jahr 1? – Alina

+0

Verwenden Sie dies in Ihrer print-Anweisung 'print ('Geben Sie die Anzahl der Zoll Niederschlag für das Jahr' + str (years_rain) + 'Monat', str (Monat + 1)) ' – Zeokav

+0

Dies machte Jahre beginnen bei 0 – Alina

0
rainTotal = rain + grandTotal 

ausführt folgende: 2 + 37 weil Sie zuletzt regen Eingang haben = 2 und bereits ganz oder Grandtotal ist = 37 (Gesamt Eingang für jedes Jahr), so rainTotal = regen + Grandtotal ist nicht benötigt

+0

Ich konnte das in der letzten Bearbeitung ändern. Könnten Sie festlegen, wie die folgenden 12 Monate Jahr 2 statt aller Ausgaben Jahr 1 zu machen? – Alina

+0

so brauchen Sie: Jahr 1 = 12 Monate und berechnen Gesamt und Jahr 2 = 12 Monate und berechnen insgesamt? – sb0709

+0

Meine Ausgabe wird sich um 2 Jahre verzögern, weil das der Wert ist, den ich eingegeben habe. Wie kann ich es so machen, dass 12 dieser Monate als "Jahr 1" und die anderen 12 als "Jahr 2" bezeichnet werden? "Geben Sie die Anzahl der Zoll Niederschlag für das Jahr {dies ist der Bereich, wo ich eine 2 für die zweite Hälfte der Monate haben müssen} Monat 1" – Alina

0

Hinweise für Ihren Code:

Wie bereits erwähnte, ist rainTotal nicht benötigt.

können Sie versuchen:

print 'Enter the number of inches of rainfall for year %d month %d' % (years_rain, month), end='') 

Dies wird das erste% d für den Wert für years_rain und das zweite% d mit dem Wert für den Monat als füllen for-Schleifen laufen.

Dieser Trick kann auch auf der letzten Druckzeile verwendet werden, wie unten dargestellt:

print("The total amount of inches of rainfall for %d year(s) % yearsF, is", grandTotal)