2017-03-19 1 views
0

Was ich versuche, ist eine Liste von Namen und Noten basierend auf Benutzereingaben zu machen, und dann die Liste anzuzeigen sowie die Liste in einer Tabelle zu organisieren und schließlich die Durchschnittsnote zu berechnen.Berechnung der durchschnittlichen Note mit Funktionen und Listen in Python 3.6

Also möchte ich, dass mein Skript den Benutzer auffordert, einen Namen und eine Note einzugeben und sie dann in einer Liste zu speichern. Diese Eingabeaufforderung wird wiederholt, bis der Benutzer eine leere Zeichenfolge eingibt (drücken Sie einfach die Eingabetaste, während Sie zur Eingabe eines Namens aufgefordert werden).

Ich habe ein Problem, die Liste zu speichern und den Druck und die Berechnung einzuleiten, wenn ein leerer String eingegeben wird.

Hier ist, was ich bisher habe:

# Importing Python tabulate package 
from tabulate import tabulate 

# Defining functions 
def getRec(): 
    # Get a record from user input, return an empty of the user entered an empty string as input 
    name = str(input("Enter a name: ")) 
    if name != "": 
     score = int(input("Enter the grade of " + name +": ")) 
     return name,score 
    else: 
     return None 

def addList(List,rec): 
    # Add a rec into the list 
    List = tuple(rec) 
    return List,rec 

def putRec(List): 
    # Print a record in a specific format 
    print(List) 

def printTable(List): 
    # Print a table with a heading 
    print(tabulate(List,showindex="always",headers=["Index","Name","Grade"])) 

def average(List): 
    # Computes the average score and return the value 
    total = List[0][1] 
    avg = total/len(List) 
    print("Average Grade: ",avg) 

# Main function 

List = [] 
rec = [] 
while True: 
    rec = list(getRec()) 
    List = addList(List,rec) 

    if rec == None: 
     for index in range(len(List)): 
      print() 
      putRec(List) 
      print() 
      printTable(List) 
      print() 
      average(List) 
     break 

Wenn ich versuche, den Druck und die Berechnung zu starten, ein Fehler ist, weil ich eine ‚None‘ auf meiner ersten Funktion zurückgegeben. Aber wenn ich Nullen zurückgebe, wird die Liste zu Nullen. Ich brauche Hilfe beim Versuch, meine anderen Funktionen zu initiieren und vielleicht zu beheben, wie ich meine Liste basierend auf den Eingaben erstelle.

Jede Hilfe wird geschätzt. Danke im Voraus.

Antwort

0

Sie benötigen, ob getRec() kehrt keine zu überprüfen, bevor die Aufzeichnung der Liste hinzuzufügen:

# Main function 

List = [] 
rec = [] 
while True: 
    result = getRec() 
    print(result) 

    if result == None: 
     for index in range(len(List)): 
      print() 
      putRec(List) 
      print() 
      printTable(List) 
      print() 
      average(List) 
     break 

    else: 
     rec = list(result) 
     addList(List,rec) 

Es gab auch einen Fehler in Ihrer addList Funktion. Sie müssen die Methode .append() verwenden, um ein Element zu einer Liste hinzuzufügen. Kein Rückgabewert wird dann benötigt.

def addList(List,rec): 
    # Add a rec into the list 
    List.append(tuple(rec)) 

Der Code sollte mit diesen 2 Änderungen ohne Problem laufen, aber die Durchschnittsnote wird immer noch falsch sein. Sie müssen die Summe aller Qualitäten zu berechnen for-Schleife verwenden:

def average(List): 
    # Computes the average score and return the value 
    total = 0 

    for r in List: 
     total += r[1] 

    avg = total/len(List) 
    print("Average Grade: ",avg) 

Hope it :)

EDIT hilft:

nicht sicher, warum Sie eine Schleife verwendet, um die gesamte Tabelle zu drucken. Du brauchst es einfach nicht. Hier ist der Code ohne Schleife:

while True: 
    result = getRec() 
    print(result) 

    if result == None: 
     print() 
     putRec(List) 
     print() 
     printTable(List) 
     print() 
     average(List) 
     break 

    else: 
     rec = list(result) 
     addList(List,rec) 
+0

Der Code funktioniert! Vielen Dank für deine Hilfe. Der Code druckt jedoch die Liste, die Tabelle und den Durchschnitt zweimal. –

+0

Ich habe meine Antwort bearbeitet;) –

+0

Sie haben Recht! Wenn ich die for-Schleife verwende, drucke ich alles nach der Anzahl der Elemente in der Liste. Danke, dass du aufguckst. –

Verwandte Themen