[英]For-loop within a function
我目前正在參加有關 Python 的短期課程,但在作業時遇到了一些麻煩。
任務是創建一個函數,該函數將姓名和分數列表(例如 [Student 1, 35, Student 2, 78] 等)作為參數,並根據評分方案輸出成績。
我有工作代碼,但我覺得它不太滿意這個問題。 我定義了一個確定等級的函數,然后使用 for 循環調用該函數並將其應用於列表中的每個項目。 我覺得有一個更優雅的解決方案,該函數正在執行循環,但正在努力使其工作。 我相信這與函數中的變量是局部的而不是全局的有關。
data = ["Fozzie", 34, "Kermit", 78, "Miss Piggy", 23, "Gonzo", 55, "Beaker", 88, "Honeydew", 59, "Animal", 10, "Rowlf", 54]
def assign_grades(source):
student_name = str(source[student])
mark = int(source[student + 1])
grade = str("")
if mark < 40:
grade = "Fail"
elif mark < 60:
grade = "Pass"
elif mark < 70:
grade = "Merit"
elif mark >= 70:
grade = "Distinction"
else:
grade = "Error"
return("---------------------------------------------"
+"\nStudent Name: "
+str(student_name)
+ "\nMark: "
+ str(mark)
+ "\nGrade: " + str(grade)
+"\n---------------------------------------------")
for student in range(0, len(data), 2):
print(assign_grades(data))
我不確定這是否更清晰或更神秘,但它使用更少的代碼並且沒有全局變量。
def get_marks():
# get marks from database or user input
# for testing, just return list
mks = [("Fozzie", 34), ("Kermit", 78), ("Miss Piggy", 23), ("Gonzo", 55), ("Beaker", 88), ("Honeydew", 59), ("Animal", 10), ("Rowlf", 54)]
return mks
def assign_grade(mark): # convert mark to grade
lmts = [(40,'Fail'),(60,'Pass'),(70,'Merit'),(200,'Distinction')] # mark never over 200
return [x[1] for x in lmts if x[0] >= mark][0] # return first matching range
marks = get_marks() # get name/mark data
grades = [assign_grade(m[1]) for m in marks] # pass/fail/...
for g in zip(marks,grades): # merge name/mark/grade
print ("---------------------------------------------"
+"\nStudent Name: "
+str(g[0][0])
+ "\nMark: "
+ str(g[0][1])
+ "\nGrade: " + str(g[1])
+"\n---------------------------------------------")
輸出
---------------------------------------------
Student Name: Fozzie
Mark: 34
Grade: Fail
---------------------------------------------
---------------------------------------------
Student Name: Kermit
Mark: 78
Grade: Distinction
---------------------------------------------
.......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.