2017-03-26 5 views
1

drucken Ich bin ein absoluter Anfänger zu Python und bin damit beauftragt, ein Programm zu schaffen, die ein paar Dinge tut:Python-Schleife Gehälter innerhalb der Reichweite des durchschnittlichen

  1. Eingänge Mitarbeiternamen in eine Liste.
  2. Gibt das Gehalt des Mitarbeiters nach der Eingabe seines Namens ein.
  3. Summiert die Gehälter in einer Liste, (2 Listen: Namen [] und Gehälter []).
  4. Findet das durchschnittliche Gehalt nach der Summierung.
  5. Druckt Mitarbeiter, die innerhalb von 5.000 US-Dollar des Durchschnittslohns verdienen (wo ich feststecke). siehe

Bitte meinen Code unten:

# function to total the salaries entered into the "newSalary" variable and "salaries[]". 
def totalSalaries(salaries): 
    total = 0 
    for i in salaries: 
     total += i 
    return total 

# Finds the average salary after adding and dividing salaries in "salaries[]". 
def averageSalaries(salaries): 
    l = len(salaries) 
    t = totalSalaries(salaries) 
    ave = t/l 
    return ave 

# Start main 
def main(): 
    # Empty names list for "name" variable. 
    names = [] 

    # Empty salaries list for "salary" and "newSalary" variables. 
    salaries = [] 

    # Starts the loop to input names and salaries. 
    done = False 
    while not done: 
     name = input("Please enter the employee name or * to finish: ") 
     salary = float(input("Please enter the salary in thousands for " + name + ": ")) 

     # Try/except to catch exceptions if a float isn't entered. 
     # The float entered then gets converted to thousands if it is a float. 
     try: 
      s = float(salary) 

     # Message to user if a float isn't entered. 
     except: 
      print("Please enter a valid float number.") 
      done = False 
     newSalary = salary * 1000 

     # Break in the loop, use * to finish inputting Names and Salaries. 
     if name == "*": 
      done = True 

     # Appends the names into name[] and salaries into salaries[] if * isn't entered. 
     # Restarts loop afterwards if * is not entered. 
     else: 
      names.append(name) 
      salaries.append(newSalary) 
    # STUCK HERE. Need to output Names + their salaries if it's $5,000 +- the total average salary. 
    for i in range(len(salaries)): 
     if newSalary is 5000 > ave < 5000: 
      print(name + ", " + str(newSalary)) 

    # Quick prints just to check my numbers after finishing with *. 
    print(totalSalaries(salaries)) 
    print(averageSalaries(salaries)) 


main() 

Jede Info wird sehr geschätzt. Ich hoffe, dass der Rest der Funktionen und Logik in diesem Programm sinnvoll ist.

+0

Es gibt viele Fehler hier. Zu Beginn müssen Sie den Rückgabewert von averageSalaries irgendwo speichern, wenn Sie ihn außerhalb dieser Funktion verwenden möchten. –

+0

Das ist eine Menge Code. Sie können [die Tour] (http://stackoverflow.com/tour) zuerst und lernen [Wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) und erstellen Sie eine [ Minimal, vollständig und verifizierbar] (http://stackoverflow.com/help/mcve) Beispiel. Das erleichtert es uns, Ihnen zu helfen. –

Antwort

0

Sie haben Ihren Iterator nicht korrekt geschrieben. Bei einem Array können Sie einfach for element in array: verwenden und die Schleife wird über ein Array iterieren, indem jedes Element in ein Element eingefügt wird. Ihre For-Schleife wird also for salary in salaries.

Außerdem müssen Sie Ihre Bedingung in zwei teilen und Zusätze und Subtraktionen verwenden. Ihr Code sollte prüfen, ob das Gehalt höher oder gleich dem Durchschnitt minus 5000 ist und ob es niedriger oder gleich dem Durchschnitt plus 5000 ist. Wenn Sie dies mathematisch formalisieren möchten, wäre es: Gehalt> = Durchschnitt - 5000 und Gehalt < = Mittelwert + 5000

so ist die Bedingung in Zeile wird if salary >= (average - 5000) and salary <= (average + 5000)

Schließlich Sie rufen Sie nicht averageSalaries bevor die Schleife eintritt, so dass der durchschnittliche Gehalt noch nicht berechnet worden. Sie sollten die Funktion aufrufen und das Ergebnis vor der for-Schleife in eine Variable schreiben.

+0

und woher kommt 'ave'? –

+0

Aus dem Benutzercode. Ich habe nicht bemerkt, dass sie vor der for-Schleife keine durchschnittlichen Gehälter aufgerufen haben. – Lunar

+0

Vielen Dank für Ihre Informationen. Ich ging voran und fügte die folgende Zeile vor der Schleife hinzu: "ave = averageSalaries (Löhne), und es zieht jetzt Benutzer korrekt aus der Liste. – BPeretz95

Verwandte Themen