2017-09-08 1 views
-2

Ich hatte eine Bewertung für meine Programmierklasse über die Berechnung von Versicherungen mit Funktionen. Dies ist der Code, den ich habe versucht, Arbeit zu bekommen, aber leider scheiterte ich:Verwenden von Funktionen mit Variablen in Python

import time 

def main(): 
     print('Welcome to "Insurance Calculator" ') 
     type_I, type_II, type_III = inputs() 
     calculationAndDisplay() 
     validation() 
     time.sleep(3)  

def inputs(): 
    try: 
     type_I = int(input("How many Type I policies were sold? ")) 
     type_II = int(input("How many Type II policies were sold? ")) 
     type_III = int(input("How many Type III policies were sold? ")) 
     return type_I, type_II, type_III 
    except ValueError: 
     print("Inputs must be an integer, please start again") 
     inputs() 


def calculationAndDisplay(): 
    type_I *= (500/1.1) 
    type_II *= (650/1.1) 
    type_III *= (800/1.1) 
    print("The amount of annual earned for type_I is: $", type_I) 
    print("The amount of annual earned for type_I is: $", type_II) 
    print("The amount of annual earned for type_I is: $", type_III) 

def validation(): 
    cont = input("Do you wish to repeat for another year? [Y/N]: ") 
    if cont == 'Y' or cont == 'y': 
     main() 
    elif cont == 'N' or cont == 'n': 
     print('Thank You! ------ See You Again!')  
    else: 
     print("I'm sorry, I couldn't understand your command.") 
     validation() 

main() 

Ich habe es schließlich durch pauken alle Eingänge, Berechnung zu arbeiten, und in eine Funktion anzuzeigen. Ich möchte nur wissen, wie ich es so gemacht haben könnte, wie es beabsichtigt war.

Edit: Das Programm soll den Benutzer dazu bringen, die Anzahl der verkauften Policen einzugeben und eine Gesamtsumme vor Steuern anzuzeigen. Wenn ich ein paar Zahleneingaben eingeben gibt es mir die folgenden Fehler

Welcome to "Insurance Calculator" 
How many Type I policies were sold? 3 
How many Type II policies were sold? 3 
How many Type III policies were sold? 3 
Traceback (most recent call last): 
    File "C:\Users\crazy\Desktop\assessment 2.py", line 38, in <module> 
    main() 
    File "C:\Users\crazy\Desktop\assessment 2.py", line 5, in main 
    type_I, type_II, type_III = inputs() 
TypeError: 'NoneType' object is not iterable 

Edit: Ich zog nach der vorgeschlagenen Linie die Rückleitung und jetzt ist es mir ein ungebundenen Variable Fehler geben:

Welcome to "Insurance Calculator" 
How many Type I policies were sold? 5 
How many Type II policies were sold? 5 
How many Type III policies were sold? 5 
Traceback (most recent call last): 
    File "C:\Users\crazy\Desktop\assessment 2.py", line 39, in <module> 
    main() 
    File "C:\Users\crazy\Desktop\assessment 2.py", line 6, in main 
    calculationAndDisplay() 
    File "C:\Users\crazy\Desktop\assessment 2.py", line 22, in 
calculationAndDisplay 
    type_I *= (500/1.1) 
UnboundLocalError: local variable 'type_I' referenced before 
assignment 
+1

Sie müssen uns zuerst sagen _how_ es soll funktionieren und _how_ funktioniert es tatsächlich, einschließlich aller geeigneten Fehlermeldungen, falls vorhanden. – DyZ

+1

Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. –

Antwort

1

Die Problem ist, dass Sie die Werte in Variablen speichern, die nur innerhalb des main Verfahren existieren, aber nicht im globalen Bereich:

type_I, type_II, type_III = inputs() 
calculationAndDisplay() 

dies tun, die calculationAndDisplay() Methode kenne die Werte nicht. Sie können dieses Problem lösen, indem Parameter dieser Funktionen hinzufügen, wie folgt aus:

def calculationAndDisplay(type_I, type_II, type_III): 
    #your code 

Bearbeiten: Sie Code ohne Probleme arbeiten, wenn Sie alle Berechnungen in dem gleichen Verfahren durchzuführen, wie jetzt alle Variablen innerhalb derselben erstellt werden Umfang. Wenn Sie Methoden verwenden, müssen Sie entweder Funktionsargumente/Parameter (die bessere Lösung) verwenden oder global Variablen verwenden (schlechte Lösung, da sie das Konzept der Funktionen unterminiert).

Im Fall, dass Sie später auf die geänderten Werte von type_I usw. nach calculationAndDisplay() erneuten Aufruf verwenden möchten, müssen Sie die geänderten Werte in dieser Funktion zurück, so dass Sie und sich mit diesem Code:

def calculationAndDisplay(type_I, type_II, type_III): 
    #your code 

    return type_I, type_II, type_III 
+0

Ihre Lösung funktioniert, wenn die Funktion 'calculationAndDisplay' nur einmal aufgerufen wird, da die ursprünglichen Werte der Parameter nicht aktualisiert werden. – DyZ

+0

@DYZ Ja, aber das ist der beabsichtigte Fall, nicht wahr? – FlashTek

+0

Ich weiß es nicht. Nur das OP weiß es. – DyZ

0

Dieser Fehler, den Sie erwähnt haben, ist aufgrund der Einrückung der return-Anweisung in Eingaben(). Diese Return-Anweisung sollte innerhalb Eingaben Funktion sein (Weil in Ihrem Fall Eingaben() Typ_I, Typ_II, Typ_II nicht zurückgibt). Auch Argumente sollten an calculationAndDisplay (type_I, type_II, type_III) übergeben werden.

Verwandte Themen