【问题标题】:Applying a function to various keys in a dictionary at a time一次将函数应用于字典中的各个键
【发布时间】:2013-11-16 04:06:48
【问题描述】:

如何更新 print_quiz_averages 函数,以便一次打印每个人的所有分数,而不是显示每个人的每个项目的分数?

from __future__ import division

def main():
    quiz_averages = quiz_average(remove_zeros([57,0,36,29,38,31,33,0,42,0,52,28,0,50,26,97,80,63,8,36,33,39,12,36,12,59,75,61,57,39,18,9,19,35,75,5,18,0,56,0,24,0,9],
                                              [83,0,64,45,66,82,52,0,43,0,53,49,43,82,44,74,74,58,52,52,60,18,24,34,19,42,72,65,79,99,75,24,35,70,74,43,55,0,82,0,34,0,22],
                                              [69,0,38,16,16,16,55,0,28,0,44.5,31,0,33,52,75,46,33,36,0,49,34.5,35,79.5,13,27,31,52,40.5,64.5,15,0,31,47,26,0,36,0,68,0,64.5,0,20],
                                              [86,0,95,74,90,53,32,0,79,0,38,63,0,42,61,0,0,70,62,78,0,60,47,89,75,62,84,62,71,80,73,0,31,25,74,0,77,0,90,0,78,0,25]))
    student_quiz_scores = {'Raven':[61,65,52,62],
                           'Jacob':[39,99,64.5,80],
                           'Jessica':[35,70,47,25],
                           'Joe':[57,79,40.5,71],
                           'Aaron':[18,75,15,73]}
    print_quiz_averages(student_quiz_scores,quiz_averages)

def quiz_average(all_quizzes):
    averages = []
    for each_quiz in all_quizzes:
        each_average = find_average(each_quiz)
        averages.append(each_average)
    return averages

def print_quiz_averages(student_quiz_scores,the_averages):
    for i, average in enumerate(the_averages):
        print "\nThe average for quiz",i+1,"is:",average
        for student, student_data in student_quiz_scores.iteritems():
            if student_data[i]>average:
                print student, "got a",student_data[i],"which is",(str(student_data[i]-average))+"%", "higher than the average. :)"
            else:
                print student, "got a", student_data[i], "which is", (str(-student_data[i]+average))+"%", "lower than the average. :("

if __name__ == '__main__':
    main()

【问题讨论】:

  • 嗯……作业……你说的“一次”是什么意思?您是否希望所有数字都打印在彼此之上?在同一条线上?一个接一个,中间没有英文?
  • @dg99:这不是家庭作业,只是练习 Python 的练习。我想打印例如:(每个笑脸后面应该有一个空行,然后显示剩下的4个人的数据) Ravi:测验1的平均值是:38.8055555556 你比平均值高出22.1944444444分! :) 测验 2 的平均分是:55.1891891892 你比平均分高出 9.81081081081 分! :) 测验 3 的平均分是:40.0606060606 你比平均分高出 11.9393939394 分! :) 测验 4 的平均分数是:65.3548387097 你比平均分数低 3.35483870968 分! :(
  • 而不是在average loop 内部运行student loop 你应该在外部运行student loopaverage loop 作为嵌套循环...
  • @adil:我没有关注,你能给我看一下代码吗?

标签: python function loops dictionary key


【解决方案1】:

@adil 所说的 - 切换嵌套循环。使用上面的代码示例...

for student, student_data in student_quiz_scores.iteritems():
    for i, average in enumerate(the_averages):
        print "\nThe average for quiz",i+1,"is:",average
        if student_data[i]>average:
            print student, "got a",student_data[i],"which is",(str(student_data[i]-average))+"%", "higher than the average. :)"
        else:
            print student, "got a", student_data[i], "which is", (str(-student_data[i]+average))+"%", "lower than the average. :("

当然,如果您希望措辞与评论中示例中所述完全一致(以及添加空格等),您将不得不更改一些字符串。

【讨论】:

    猜你喜欢
    • 2020-06-19
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2019-04-30
    • 2021-09-17
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多