2016-05-08 2 views
1

Ich bekomme Null als Rendite für Gehalt. Ich weiß, dass es vielleicht mit variablem Umfang zu tun hat, aber ich bin verloren.Wie erstelle ich eine Funktion in Python, die jedes Mal in einer While-Schleife akkumuliert

''' 
Write a program to declare two empty lists one is for name and one for salaries. 
Within the for loop ask for employees name and their salaries 
and append them into the list accordingly. 
Find out the total salary using accumulation concept but you 
need to call a function called EvaluateSalary() within the for loop passing the argument 
salary for each iteration. 

Output : Both of the lists with their items and the total salary. 
''' 

#Declare name list 
nameList = [] 

#declare salary list 
salaryList = [] 

#declare quit constant 
QUIT = "ZZZ" or 000 

employeeName = str(input("Please enter an Employee name or ZZZ to quit :   ")).upper() 
employeeSalary = float(input("Please enter the salary of the Employee or 000 to quit : ")) 

Unten ist, was ich nicht richtig mache. Ich möchte, dass die Gehaltseingabe durch jeden Durchlauf der Schleife hinzugefügt wird.

salary = 0 
def EvaluateSalary(salary): 
    salary = salary + employeeSalary 
    return salary 

while employeeName != QUIT: 
    nameList.append(employeeName) 
    salaryList.append(employeeSalary) 
    EvaluateSalary(salary) 
    employeeName = str(input("Please enter an Employee name or ZZZ to quit : ")).upper() 
    employeeSalary = float(input("Please enter the salary of the Employee or 000 to quit : ")) 

print("Goodbye!") 
print(nameList, salaryList, salary) 
+0

dies nicht Python ist, den Code eingerückt werden muss richtig – Pykler

+0

zu arbeiten ist. Ich weiß einfach nicht, wie man hier richtig schreibt –

+0

Es wurde meinen Code –

Antwort

1

Ihr Problem ist hier:

salary = 0 
def EvaluateSalary(salary): 

    salary = salary + employeeSalary 
    return salary 

Gehalt eine globale Variable ist. Es gibt keine Notwendigkeit, es an Ihre Funktion zu übergeben, also, was Sie übergeben müssen, ist employeeSalary.

ich denke, das

arbeiten
salary = 0 
def EvaluateSalary(employeeSalary): 

    salary = salary + employeeSalary 

Sie brauchen nichts zurück seit Gehalt global ist, können Sie es überall aus dem Code zugreifen können.

Methode 2:

Ohne die Verwendung von globalen Variablen:

def EvaluateSalary(employeeSalary, salary): 
    salary = salary + employeeSalary 
    return salary 

salary = 0 
while ...whatever...: 
    salary = EvaluateSalary(employeeSalary, salary) 
    (...) 

Also, Sie den Wert des globalen Gehalts in jeder Iteration der while-Schleife aktualisieren, und nur accummulating halten.

+0

Danke Jungs und @nhouser für die Bearbeitung meines Codes. Das war mein erster Beitrag. Entschuldigung für das Chaos. –

+0

@myhst, wenn ich den Code zu dem, was Sie gezeigt haben, ändern. Und ich glaube, ich habe das vorher versucht. Ich erhalte den folgenden Fehler: UnboundLocalError: lokale Variable 'Gehalt' referenziert vor der Zuweisung –

+0

Sorry, ich habe vergessen, dass in Python innerhalb einer Funktion, müssen Sie vor einer globalen Variable global angeben. Schreibe "globales Gehalt" zwischen der def-Linie und der anderen. – mhyst

2

Obwohl Stack-Überlauf ist nicht ein Ort, an dem Sie Menschen bitten, Code für Sie zu schreiben, ich denke, dieser Beitrag kann neuen Programmierern helfen, ein Codebeispiel zu sehen und lernen einige Techniken, von denen globale und/oder funktionale Programmiertechniken zu vermeiden .

, wenn ich den Code neu zu schreiben, würde ich es wie folgt schreiben:

def input_employees(): 
    while True: 
     name = input(
      "Please enter an Employee name or Hit Enter to quit : " 
     ).upper() 
     if not name: 
      break 
     salary = input(
      "Please enter the salary of the Employee or Hit Enter to quit : " 
     ) 
     if not salary: 
      break 
     yield {'name': name, 'salary': float(salary)} 

def sum_salary(employees): 
    # this is a guess from your code. my guess is you wanted a salary sum 
    return sum([e['salary'] for e in employees]) 

def main(): 
    employees = list(input_employees()) 
    print('Total Salaries:', sum_salary(employees)) 
    print(employees) 

main() # run the main function, ie the script 
+0

Das sieht super aus. Danke für die Hilfe. Ich kann nicht warten, bis ich auf diesem Niveau bin, ich verstehe noch nicht viel davon. Aber ich werde dahin kommen und weiter studieren, was du mir hier gezeigt hast. –

+0

@MichaelVivirito meine Vermutung ist das härteste Stück in diesem Code sind die [yield Statement] (http://www.python-course.eu/generators.php) und die [Liste Verständnis] (http: //www.learnpython. org/de/List_Comprehensions). Hoffentlich würden diese Links diese Stücke klären. – Pykler

Verwandte Themen