2016-08-30 25 views
0

我正在完成一個班級的作業,教師可以輸入學生ID號和學生成績。最終成績將被計算並返回到學生人數旁邊。我可以計算出最終成績,但是我無法將成績追加到學生號碼列表中。新手python用戶需要幫助功能之間傳遞數據

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

使用'返回'會返回一個值回給被調用的,基本的OOP – Li357

+1

標識是錯誤的,請修復,以便你有一個工作程序 – Vorsprung

+0

縮進在我的IDLE環境中是正確的,所以忽略它的那部分。 –

回答

0

你的問題是在這裏:

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

您正在訪問assignments就像它是一個對象,而不是功能。你想要assignments返回一個值來追加。

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

這樣,該函數將這個值發回了它是從所謂的地方。然後,更改

f = assignments().finalGrade 

f = assignments() 

編輯:您的循環應該基本上是這樣的:

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

但是這會導致有些混亂列表:

[student1_name, student2_name, student1_score, student2_score] 

所以我會用一本字典:

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

這樣你就可以打印所有學生的姓名與他們的得分像這樣:

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

謝謝!那回答那部分。現在,如果我只能讓我的每個循環正常工作。 –

+0

@BryanHaoui編輯,我想我在這裏得到了你的意思,如果不打開一個新的問題與任何錯誤。 GLHF – Will

+0

沒有必要,謝謝你的幫助。代碼完全按照我想要的方式工作。 –