2016-08-30 2 views
0

Ich beende eine Aufgabe für eine Klasse, wo ein Lehrer die Schüler ID-Nummern und die Schüler Noten eingeben können. Die endgültige Note wird berechnet und neben der Studentennummer zurückgegeben. Ich kann die Endnote gut berechnen, aber ich kann die Note nicht an die Liste der Studentenzahlen anhängen.Anfänger Python Benutzer benötigen Hilfe Daten zwischen Funktionen übergeben

def assignments(): 
    assign1 = int(input("Assignment 1 grade: ")) 
    if assign1 > 100: 
     print ("Please input a valid grade value.") 
     assign1 = int(input("Assignment 1 grade: ")) 
    assign2 = int(input("Assignment 2 grade: ")) 
    if assign2 > 100: 
     print ("Please input a valid grade value.") 
     assign2 = int(input("Assignment 2 grade: ")) 
    assign3 = int(input("Assignment 3 grade: ")) 
    if assign3 > 100: 
     print ("Please input a valid grade value.") 
     assign3 = int(input("Assignment 3 grade: ")) 
    assign4 = int(input("Assignment 4 grade: ")) 
    if assign4 > 100: 
     print ("Please input a valid grade value.") 
     assign4 = int(input("Assignment 4 grade: ")) 
    assign5 = int(input("Assignment 5 grade: ")) 
    if assign5 > 100: 
     print ("Please input a valid grade value.") 
     assign5 = int(input("Assignment 5 grade: ")) 
    assign6 = int(input("Assignment 6 grade: ")) 
    if assign6 > 100: 
     print ("Please input a valid grade value.") 
     assign6 = int(input("Assignment 6 grade: ")) 
    assign7 = int(input("Assignment 7 grade: ")) 
    if assign7 > 100: 
     print ("Please input a valid grade value.") 
     assign7 = int(input("Assignment 7 grade: ")) 
    assign8 = int(input("Assignment 8 grade: ")) 
    if assign8 > 100: 
     print ("Please input a valid grade value.") 
     assign8 = int(input("Assignment 8 grade: ")) 
    assign9 = int(input("Assignment 9 grade: ")) 
    if assign9 > 100: 
     print ("Please input a valid grade value.") 
     assign9 = int(input("Assignment 9 grade: ")) 
    assign10 = int(input("Assignment 10 grade: ")) 
    if assign10 > 100: 
     print ("Please input a valid grade value.") 
     assign10 = int(input("Assignment 10 grade: ")) 
    assignGrade = assign1 + assign2 + assign3 + assign4 + assign5 + assign6 + assign7 + assign8 + assign9 + assign10 
    aGrade = assignGrade/10 
    print("The final grade for all assignments is: ") 
    print(aGrade) 
    midterm = int(input("Midterm grade: ")) 
    if midterm > 100: 
     print ("Please input a valid grade value.") 
     midterm = int(input("Midterm grade: ")) 
    finalExam = int(input("Final Exam grade: ")) 
    if finalExam > 100: 
     print ("Please input a valid grade value.") 
     finalExam = int(input("Final Exam grade: ")) 
    testsGrade = midterm + finalExam 
    tGrade = testsGrade/2 
    print("The final grade for all test is: ") 
    print(tGrade) 
    participation = int(input("Participation grade: ")) 
    if participation > 100: 
     print ("Please input a valid grade value.") 
     participation = int(input("Participation grade: ")) 
    partGrade = participation 
    print("The final grade for Participation is: ") 
    print(partGrade) 
    finalGrade = aGrade + tGrade + partGrade/3 


def students(): 
    netIDList = [] 
    maxLengthList = 6 
    while len(netIDList) < maxLengthList: 
     ID = input("Enter Student's Net ID: ") 
     netIDList.append(ID) 
    for s in netIDList: 
     print("Please input grades for student " + s) 
     assignments() 
     f = assignments().finalGrade 
     netIDList.append(": " + f) 
    print(netIDList) 

def main(): 
    students() 

main() 
+0

Mit ' zurückkehren' einen Wert wieder zurück zu der angerufenen, grundlegenden OOP – Li357

+1

Identität ist falsch, bitte beheben, damit Sie ein Arbeitsprogramm haben – Vorsprung

+0

Die Einrückung ist korrekt in meiner IDLE-Umgebung, also ignorieren Sie diesen Teil davon. –

Antwort

0

Ihr Problem ist hier:

f = assignments().finalGrade 
netIDList.append(": " + f) 

Sie Zugriff auf assignments wie es ein Objekt eher als eine Funktion ist. Sie möchten, dass assignments einen Wert zum Anhängen zurückgibt.

def assignments(): 
    # do all your input and calculation here 
    finalGrade = aGrade + tGrade + partGrade/3 
    return finalGrade 

Auf diese Weise sendet die Funktion diesen Wert zurück an die Stelle, von der aus er aufgerufen wurde. Ändern Sie dann

f = assignments().finalGrade 

zu

f = assignments() 

EDIT: Ihre for-Schleife sollte grundsätzlich wie folgt aussehen:

for s in netIDList: 
     print("Please input grades for student " + s) 
     f = assignments() 
     netIDList.append(": " + f) 

aber in einer etwas verwirrenden Liste führen:

[student1_name, student2_name, student1_score, student2_score] 

So würde ich ein Wörterbuch verwenden:

student_score_map = {} 
for s in netIDList: 
      print("Please input grades for student " + s) 
      f = assignments() 
      student_score_map[s] = f 

Auf diese Weise können Sie alle Schülernamen mit ihrer Punktzahl wie so drucken:

for s in netIDList: 
    print(s + ' final score:' + student_score_map[s]) 
+0

Vielen Dank! das hat diesen Teil beantwortet. Jetzt wenn ich nur meine für jede Schleife richtig funktionieren kann. –

+0

@BryanHaoui Bearbeitet, ich denke, ich habe verstanden, was Sie hier gemeint haben, wenn Sie nicht eine neue Frage mit dem öffnen, was schief läuft. GLHF – Will

+0

Keine Notwendigkeit, danke für Ihre Hilfe. Der Code funktionierte genau so, wie ich es wollte. –