【问题标题】:Calling one list from a multi-list variable: Why isn't the print statements inside if statements not printing?从多列表变量中调用一个列表:为什么 if 语句不打印里面的打印语句?
【发布时间】:2021-07-02 21:31:06
【问题描述】:

我正在尝试创建一个生成最终成绩的函数。此函数应将课程成绩乘以课程奖金,因此第一个课程列表([55,21,30,58,49])应乘以 1.0 依此类推,考试成绩也是如此,但取而代之的是考试奖金。然后它将调整后的考试成绩和课程成绩相乘,得出总成绩。 if 语句中的 print 语句没有打印,我已经查看了有关 print() 不起作用的类似问题,但似乎没有任何相关性。

注意:我无法更改主程序

def finalized_grades(course_grades, exam_grades, course_exam_bonus, exam_bonus):
    adj_course = []
    adj_exam = []
    total = []
    print('Before update:')
    print('Coursework = {}'.format(course_grades))
    print('Exams = {}'.format(course_grades))
    print('Course Bonus = {},'.format(course_exam_bonus),end=' ')
    print('Exam Bonus = {}'.format(exam_bonus))
    print('After update:')
    for c in course_grades:
        if c == [0]:
            adj_course = [x*course_exam_bonus[0] for x in course_grades[c]]
            print('Coursework = {}'.format(adj_course))
        if c == [1]:
            adj_course = [x*course_exam_bonus[1] for x in course_grades[c]]
            print('Coursework = {}'.format(adj_course))
        if c == [2]:
            adj_course = [x*course_exam_bonus[2] for x in course_grades[c]]
            print('Coursework = {}'.format(adj_course))
    for e in exam_grades:
        if e == [0]:
            adj_exam = [x*exam_bonus[0] for x in exam_grades[e]]
            print('Exams = {}'.format(adj_exam))
        if e == [1]:
            adj_exam = [x*exam_bonus[1] for x in exam_grades[e]]
            print('Exams = {}'.format(adj_exam))
        if e == [2]:
            adj_exam = [x*exam_bonus[2] for x in exam_grades[e]]
            print('Exams = {}'.format(adj_exam))
    for t in range(len(adj_course)):
        total = [adj_exam[t]*adj_course[t]]
        print('Total = {}'.format(total))
    return

################################# MAIN PROGRAM #################################### 
def test_finalized_grades():
    course_grades = [[55,21,30,58,49], [47,39,29], [43,32,28,60]]
    exam_grades = [[35,14, 32,18,31] , [32,32,19], [15,21,24,39]]
    course_exam_bonus = [1.0,1.25,1.2]
    exam_bonus = [3.0,0.0,2.0]
    for i in range(len(exam_bonus)):
        grades = finalized_grades(course_grades[i],exam_grades[i],course_exam_bonus[i],exam_bonus[i])
    return

这就是我的输出的样子

Before update:
Coursework = [55, 21, 30, 58, 49]
Exams = [55, 21, 30, 58, 49]
Scale = 1.0, Bonus = 3.0
After update:
Before update:
Coursework = [47, 39, 29]
Exams = [47, 39, 29]
Scale = 1.25, Bonus = 0.0
After update:
Before update:
Coursework = [43, 32, 28, 60]
Exams = [43, 32, 28, 60]
Scale = 1.2, Bonus = 2.0
After update:

在“更新前”和“更新后”之间应该有语句。这就是它应该的样子。

Before update:
Coursework = [55, 21, 30, 58, 49]
Exams = [35, 14, 32, 18, 31]
Scale = 1.0, Bonus = 3.0
After update:
Coursework = [55.0, 21.0, 30.0, 58.0, 49.0]
Exams = [38.0, 17.0, 35.0, 21.0, 34.0]
Total = [93.0, 38.0, 65.0, 79.0, 83.0]

【问题讨论】:

  • adj_exam[t] 不正确。 tadj_exam 的元素,而不是索引。
  • 显然,您的if 条件永远不会为真。你为什么不 a) 将第二个和后续的 if 语句变成 elif (因为条件是排他的),然后 b) 然后添加一个 else: 打印例如ce 的值与前面的条件不匹配。
  • finalized_grades() 没有返回任何内容,为什么要将结果分配给grades
  • 不是print,是你的if永远不匹配
  • 不,它正在测试c 是否是一个包含单个零的列表。

标签: python list for-loop if-statement


【解决方案1】:

当你的程序到达

for c in course_grades:

那么 course_grades 在第一次调用 finalized_grades 时是 [55, 21, 30, 58, 49],所以你的 c 是 55,然后是 21,然后是 30,等等。

永远不是 [0]、[1] 或 [2]

finalized_grades 始终仅使用列表列表中的一个列表调用:

for i in range(len(exam_bonus)):
    grades = finalized_grades(course_grades[i],exam_grades[i],course_exam_bonus[i],exam_bonus[i])

如您所见,正确的考试奖励已作为参数传递,因此您无需检查第一个、第二个或第三个元素。

应该是这样的:

for c in course_grades:
    adj_course = [x*course_exam_bonus for x in course_grades[c]]
        print('Coursework = {}'.format(adj_course))

但我也看到您声明的输出与您的代码不匹配。这个输出在哪里?

课程奖金 = ...

【讨论】:

    【解决方案2】:

    你让这种方式变得比它需要的更复杂。

    您不应该在 for 循环中使用列表推导。每次调整只需要一个列表理解。

    您无需与course_exam_bonusexam_bonus 的索引进行比较。它只是函数中的一个数字,索引是在test_finalize_grades()中完成的。

    使用zip() 将两个调整后的列表一起迭代以将它们相加。

    def finalized_grades(course_grades, exam_grades, course_exam_bonus, exam_bonus):
        print('Before update:')
        print('Coursework = {}'.format(course_grades))
        print('Exams = {}'.format(course_grades))
        print('Course Bonus = {},'.format(course_exam_bonus),end=' ')
        print('Exam Bonus = {}'.format(exam_bonus))
    
        adj_course = [c * course_exam_bonus for c in course_grades]
        adj_exam = [e * exam_bonus for e in exam_grades]
        total = [c + e for c, e in zip(adj_course, adj_exam)]
    
        print('After update:')
        print('Coursework = {}'.format(adj_course))
        print('Exams = {}'.format(adj_exam)
        print('Total = {}'.format(total))
    
        return total
    

    【讨论】:

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