请求代码说明 - Python函数

时间:2018-01-14 18:43:10

标签: python function

我希望有人可以解释/回答有关以下代码的一些问题(取自在线培训来源,而不是我的代码)。我开始学习和练习函数,这段代码通过将方法链接在一起并引用一个字典来进一步发展:

lloyd = {
    "name": "Lloyd",
    "homework": [90.0, 97.0, 75.0, 92.0],
    "quizzes": [88.0, 40.0, 94.0],
    "tests": [75.0, 90.0]
}
alice = {
    "name": "Alice",
    "homework": [100.0, 92.0, 98.0, 100.0],
    "quizzes": [82.0, 83.0, 91.0],
    "tests": [89.0, 97.0]
}
tyler = {
    "name": "Tyler",
    "homework": [0.0, 87.0, 75.0, 22.0],
    "quizzes": [0.0, 75.0, 78.0],
    "tests": [100.0, 100.0]
}


students=[lloyd,alice,tyler]

for student in students:
    print(student['name'])
    print (student["homework"])
    print (student["quizzes"])
    print (student["tests"])

def average(numbers):
    total=sum(numbers)
    total=float(total)
    media= total/ (len(numbers))
    return media

def get_average(student):
    homework=average(student["homework"])
    quizzes=average(student["quizzes"])
    tests=average(student["tests"])
    final=0.1*homework +0.3*quizzes + 0.6*tests
    return final

def get_letter_grade(score):
    if score >= 90:
        return "A"
    elif score >=80:
        return "B"
    elif score >=70:
        return "C"
    elif score >=60:
        return "D"
    else:
        return "F"

print (get_letter_grade(get_average(lloyd)))

我的问题是:

  1. 下面这部分如何知道引用它上面的字典值?我看到列表中的学生碰巧与dict键具有相同的值但是如何知道从字典中获取详细信息?

    students=[lloyd,alice,tyler]
    
    for student in students:
        print(student['name'])
        print (student["homework"])
        print (student["quizzes"])
        print (student["tests"])
    
  2. 如果我正确地阅读这个,那么以下两个函数纯粹得到平均值,然后是最终平均值/百分比,并且可以作为该程序之外的任何数字集的独立函数运行,并且不依赖于特定的学生在这一点上,对吗? ?

    def average(numbers):
        total=sum(numbers)
        total=float(total)
        media= total/ (len(numbers))
        return media
    
    def get_average(student):
        homework=average(student["homework"])
        quizzes=average(student["quizzes"])
        tests=average(student["tests"])
        final=0.1*homework +0.3*quizzes + 0.6*tests
        return final
    
  3. 即。 “学生”:

        def get_average(student):
    

    根本没有在它上面的For循环中引用学生,对吗?

    1. 最后,功能被“链接”在一起的部分:

      print (get_letter_grade(get_average(lloyd)))
      
    2. 我将其读作:无论你在那里插入什么学生,它都会首先在定义的get_average函数中获取该学生的平均值,然后从那里向外工作并获取该数字的字母等级。学生之间的转换会明显改变结果。我读得对吗?基本上,当它以这种方式链接在一起时,它可以在里面工作吗?

      感谢您的任何解释!

      **编辑** - 我猜这篇文章的所有负面投票都认为这个问题过于宽泛。我道歉

1 个答案:

答案 0 :(得分:1)

A1。在

students=[lloyd,alice,tyler]

for student in students:
    print(student['name'])
    print (student["homework"])
    print (student["quizzes"])
    print (student["tests"])

变量student将连续保留与lloydalicetyler相同的对象的引用。这些对象恰好是字典。所以例如在第一次迭代student中引用与lloyd相同的dict对象,因此student ['name']引用与lloyd ['name']相同的字典条目

A2。你的解释是正确的

A3。你的解释是正确的