这是什么“学生记录”?

时间:2020-06-23 18:33:47

标签: python python-3.x

我的代码以邓肯·贝茨(Duncan Betts)的代码为基础,但我听不懂,自他上次登录以来似乎已经3年了,所以我不能问他。

您能解释一下“ studentrecord”代码的来源吗?什么事?

num = int(input("How many students?: "))

physics_students = [[input("Input student name: "),float(input("Input grade: "))] for studentrecord in range(num)]
physics_students.sort(key=lambda studentrecord: float(studentrecord[1]))


lowest_grade = physics_students[0][1]

ind = 0
while physics_students[ind][1] == lowest_grade:
    ind += 1
    
second_lowest_grade = physics_students[ind][1]
second_lowest_students = []


while physics_students[ind][1] == second_lowest_grade:
    second_lowest_students.append(physics_students[ind][0])
    ind += 1
    if ind == num:
        break


second_lowest_students.sort()


print(*second_lowest_students, sep="\n")

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

studentrecord的两次出现是指2种不同的事物

list comprehension中,studentrecord用于保存范围range(num)中的每个元素。它基本上是一个索引,但无论如何都从未使用过。

编辑:我不认为列表理解应该将其称为studentrecord,因为该范围的元素是索引,而不是代表学生姓名和等级的列表。这有点令人困惑,该变量可能应该重命名为i_之类。

列表理解就像这样:

physics_students = []
for studentrecord in range(num):
  physics_students.append([input("Input student name: "),float(input("Input grade: "))])

或者这个:

physics_students = []
for studentrecord in range(num):
  physics_students[studentrecord] = [input("Input student name: "),float(input("Input grade: "))]

lambda expression中,studentrecord是匿名函数的参数名称。就像这样说:

def my_lambda(studentrecord):
  return float(studentrecord[1]
physics_students.sort(key=my_lambda)