【问题标题】:Codecademy Python lesson: It's Okay to be AverageCodecademy Python 课程:平均水平没关系
【发布时间】:2014-01-29 12:15:45
【问题描述】:

我坚持这个练习:

tyler = {
    "name": "Tyler",
    "homework": [0.0, 87.0, 75.0, 22.0],
    "quizzes": [0.0, 75.0, 78.0],
    "tests": [100.0, 100.0]
}

# Add your function below!

def average(lst):
    for item in lst:
        if lst[item] == float:
            print sum(lst[item]) / len(lst[item])

average(tyler)

为什么我不能打印出所有三个平均值? 当它到达字典中的字符串键时循环会中断吗? 我怎样才能只打印出浮动平均值?

【问题讨论】:

  • 我觉得Codecademy也有问答论坛?没有?
  • 键不是浮点数。因此 if 语句总是错误的。
  • tyler 不是一个列表,因此当它是 average 函数的参数时,调用 is lst 会让人感到困惑。 for item in lst 产生 dict 的密钥。
  • 你觉得lst在这里是什么?也许您想为tyler 字典中的每个 调用average
  • 是的,lst[item] == float 应该做什么? float 是一个 type 对象,你的值都不是 type,它们都是浮点数列表。

标签: python list dictionary average


【解决方案1】:

您可能想检查当前项目是否为列表。你可以用isinstance函数来做,像这样

def average(lst):
    for item in lst:
        if isinstance(lst[item], list):
            print sum(lst[item]) / len(lst[item])

输出

51.0
100.0
46.0

请记住,我们不能保证字典中键的顺序。因此,打印平均值的顺序可能会令人困惑。

【讨论】:

    【解决方案2】:
    if lst[item] == float:
    

    此行在字典中查找 lst[item] - 但是字典中的所有值都是字符串或列表。因此,上述逻辑表达式的值始终为 False。

    改为:

    if type(lst[item]) == list:
    

    我还认为,如果您要遍历字典,不将其称为“lst”会更好。

    def average(lst):
        return sum(lst)/len(lst)
    
    for key, value in tyler.iteritems():
        if type(value) == list:
            print average(value)
    

    【讨论】:

    • 因为我评论的东西已经不存在了,所以我完全删除了我的 cmets。随意做同样的事情。它会整理一下:)
    【解决方案3】:

    你可以这样做:

    def average(lst):
        for item in lst:
            if item != 'name':
                print sum(lst[item]) / len(lst[item])
    

    这意味着只要项目不是'name',您就会计算并打印平均值。您已将变量命名为 lst,但它实际上是一个字典。因此,您可以更新代码以使其工作如下(更具可读性):

    def average(person):
        for key, value in person.items():
            if key != 'name':
                print sum(value) / len(value)
    

    【讨论】:

      【解决方案4】:

      这里是你所期待的,

      tyler = {
          "name": "Tyler",
          "homework": [0.0, 87.0, 75.0, 22.0],
          "quizzes": [0.0, 75.0, 78.0],
          "tests": [100.0, 100.0]
      }
      
      # Add your function below!
      
      def average(lst):
          for item in lst:
              if type(lst[item]) == list:
                  print sum(lst[item]) / len(lst[item])
      
      average(tyler)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        相关资源
        最近更新 更多