使用;“用树莓皮学习Python”;从威利那里来的上一级来自哪里?
但不知道上一级位来自何处以及它是如何工作的,有什么帮助吗?在我看来,这段代码是不必要的复杂。这取决于这样一个事实,即如果标记使用;“用树莓皮学习Python”;从威利那里来的上一级来自哪里?,python,Python,但不知道上一级位来自何处以及它是如何工作的,有什么帮助吗?在我看来,这段代码是不必要的复杂。这取决于这样一个事实,即如果标记1打印报告卡() 打印成绩单(学生成绩单) 6.按等级划分的等级: 7如果标记8打印(科目:“:”,上一年级) 9休息 10上一级=等级[1] UnboundLocalError:赋值前引用的局部变量“prev_grade” 我们得到了您可能期望的UnboundLocalError。在我看来,这段代码是不必要的复杂。这取决于这样一个事实,即如果标记1打印报告卡() 打印成
grades
中的第一项:
students = [["Ben", {"Maths": 67, "English": 78, "Science": 72}],
["Mark", {"Maths": 56, "Art": 64, "History": 39, "Geography": 55}],
["Paul", {"English": 66, "History": 88}]]
等级[0]
为0
。而且学生
中的每个数字都大于0
。因此,跳过if
主体,我们得出:
grades = ((0, "FAIL"),(50, "D"),(60,"C"),(70, "B"), (80," A"), (101, "CHEAT!"))
因此,下次循环并进入if
body时,将定义prev_grade
。如果成绩低于0,该怎么办:
prev_grade = grade[1]
现在我们尝试调用函数:
In [3]: students = [["Ben", {"Maths": -1, "English": 78, "Science": 72}],
...: ["Mark", {"Maths": 56, "Art": 64, "History": 39, "Geography": 55}],
...: ["Paul", {"English": 66, "History": 88}]]
...:
[4]中的:打印报告卡()
学生班成绩单
---------------------------------------------------------------------------
取消绑定LocalError回溯(最近一次调用上次)
在()
---->1打印报告卡()
打印成绩单(学生成绩单)
6.按等级划分的等级:
7如果标记<等级[0]:
---->8打印(科目:“:”,上一年级)
9休息
10上一级=等级[1]
UnboundLocalError:赋值前引用的局部变量“prev_grade”
我们得到了您可能期望的
UnboundLocalError
。在我看来,这段代码是不必要的复杂。这取决于这样一个事实,即如果标记grades
中的第一项:
students = [["Ben", {"Maths": 67, "English": 78, "Science": 72}],
["Mark", {"Maths": 56, "Art": 64, "History": 39, "Geography": 55}],
["Paul", {"English": 66, "History": 88}]]
等级[0]
为0
。而且学生
中的每个数字都大于0
。因此,跳过if
主体,我们得出:
grades = ((0, "FAIL"),(50, "D"),(60,"C"),(70, "B"), (80," A"), (101, "CHEAT!"))
因此,下次循环并进入if
body时,将定义prev_grade
。如果成绩低于0,该怎么办:
prev_grade = grade[1]
现在我们尝试调用函数:
In [3]: students = [["Ben", {"Maths": -1, "English": 78, "Science": 72}],
...: ["Mark", {"Maths": 56, "Art": 64, "History": 39, "Geography": 55}],
...: ["Paul", {"English": 66, "History": 88}]]
...:
[4]中的:打印报告卡()
学生班成绩单
---------------------------------------------------------------------------
取消绑定LocalError回溯(最近一次调用上次)
在()
---->1打印报告卡()
打印成绩单(学生成绩单)
6.按等级划分的等级:
7如果标记<等级[0]:
---->8打印(科目:“:”,上一年级)
9休息
10上一级=等级[1]
UnboundLocalError:赋值前引用的局部变量“prev_grade”
我们得到了您可能期望的
UnboundLocalError
。上一个等级用于记住在if语句中输入代码之前检查的上一个等级[1]:
In [4]: print_report_card()
Report card for student Ben
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-6-aa68f0bb7206> in <module>()
----> 1 print_report_card()
<ipython-input-2-9f9e72e91ef4> in print_report_card(report_student)
6 for grade in grades:
7 if mark < grade[0]:
----> 8 print(subject, " : ", prev_grade)
9 break
10 prev_grade = grade[1]
UnboundLocalError: local variable 'prev_grade' referenced before assignment
如果标记<等级[0]:
打印(科目“:”,上一年级)
打破
如果等级值大于标记值,将执行if语句中的代码。当该值大于分数时,表示上一个成绩值是学生收到的成绩值
如果在输入If语句时打印了当前等级[1],则显示的等级值是错误的值,因为它的一个等级值太大。通过将代码中的“prev_grade”更改为“grade[1]”,可以在代码中测试这一点。打印值时,您将看到,对于等级[0]值“67”,所需的值“C”改为值“B” prev_等级用于记住在if语句中输入代码之前检查的上一个等级[1]:
In [4]: print_report_card()
Report card for student Ben
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-6-aa68f0bb7206> in <module>()
----> 1 print_report_card()
<ipython-input-2-9f9e72e91ef4> in print_report_card(report_student)
6 for grade in grades:
7 if mark < grade[0]:
----> 8 print(subject, " : ", prev_grade)
9 break
10 prev_grade = grade[1]
UnboundLocalError: local variable 'prev_grade' referenced before assignment
如果标记<等级[0]:
打印(科目“:”,上一年级)
打破
如果等级值大于标记值,将执行if语句中的代码。当该值大于分数时,表示上一个成绩值是学生收到的成绩值
如果在输入If语句时打印了当前等级[1],则显示的等级值是错误的值,因为它的一个等级值太大。通过将代码中的“prev_grade”更改为“grade[1]”,可以在代码中测试这一点。打印值时,您将看到,对于等级[0]值“67”,所需的值“C”改为值“B”
prev_grade
是在上一次迭代中找到的等级字符串
if mark < grade[0]:
print(subject, " : ", prev_grade)
break
循环。当我们第一次进入循环时,grade
被设置为(0,“FAIL”)
,因此grade[0]
为零。由于标记
总是>=0,因此下面的测试
for grade in grades:
它设置prev_grade
,以便在for
循环的下一轮中使用。我们需要prev_grade
,因为只有看到grade
元组的grade[0]
大于mark
,我们才知道正确的年级字符串是前一个grade
元组中的字符串
真正理解正在发生的事情的最好方法是在纸上手动“执行”代码。假设您是Python解释器,按照代码中的说明进行操作,看看会发生什么
但是,如果您没有耐心这样做,那么在代码中添加一些额外的打印语句会有所帮助,如下所示:
prev_grade = grade[1]
可以说,在
if
块中引用prev_grade
是一种糟糕的风格,因为之前没有定义它。当然,我的分析表明它是安全的,它不应该让一个有经验的程序员感到不安,但它仍然会减慢你阅读类似内容的速度。最好(IMHO)在循环之外定义prev_grade
,或者至少有一条注释解释发生了什么。或者两者都做。:)
对于主题,在学生[1]中标记。项()
上一级=无
按年级划分的年级:
#在第一个循环i上,此条件永远不可能为真
for subject, mark in student[1].items():
prev_grade = None
for grade in grades:
# This condition can never be True on the first loop iteration
if mark < grade[0]:
print(subject, " : ", prev_grade)
break
prev_grade = grade[1]