python-3.x - 函数内的for循环
问题描述
我目前正在上一个关于 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))
解决方案
I'm not sure if this is cleaner or just more cryptic, but it uses less code and no global variables.
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---------------------------------------------")
Output
---------------------------------------------
Student Name: Fozzie
Mark: 34
Grade: Fail
---------------------------------------------
---------------------------------------------
Student Name: Kermit
Mark: 78
Grade: Distinction
---------------------------------------------
.......
推荐阅读
- python - 从行中删除一些部分
- python - 运行 /usr/bin/python3 -m pip install cImage 后 pycharm 中未解析的引用“cImage”
- llvm - 基本编译的 LLVM-IR 导致分段错误
- python - Python pandas:滚动总和不会产生 12 个月的总和
- python - 使用 junit-xml python 模块向 JUnit XML 添加失败测试
- google-cloud-platform - 查询当前 postgres 连接查询的 GCP 监控 API?
- javascript - Appium - 如何使用带有 React Native (Android) 和 JavaScript 的 UiAutomator2 和 WebdriverIO 向下滚动
- python - 如何有条不紊地加入两个列表?
- sql - SQL获取字符串和特殊字符之间的字符
- php - 如何删除“for”循环中的前一个变量并添加下一个变量?