【问题标题】:python function calculate gradespython函数计算成绩
【发布时间】:2020-04-04 14:21:51
【问题描述】:

我想编写计算成绩的python程序

第一个列表是期末考试成绩。第二个列表是作业最终成绩列表。

考试成绩占70%(清单1),作业成绩占30%

def func_calc(a,b):

    for i in range(len(a)):
        exam1 = a[i]
        homework1= b[i]
         print(0.70*exam1+0.30*homework1)
    e = [70,80,67,89,100]
    h= [100,80,56,89,100]
    func_calc(e,h)

为什么main() 中的列表在func_calc 中不起作用(只发送了一个参数)?

【问题讨论】:

  • 你能添加你的预期输出吗,如果你的测试成绩

标签: python


【解决方案1】:

您忘记在循环中缩进 if 语句。试试

    for i in range(len(a)):
        exam1 = a[i]
        homework1= b[i]
        if a[i] < 60:
            print (a[i])
        else:
             print(0.70*exam1+0.30*homework1)

【讨论】:

    【解决方案2】:

    好吧,它不起作用,因为您的缩进非常不正确。您可以通过索引将成绩循环分配给未使用的变量。比你在循环之外对索引做一些事情(它要么是未定义的,要么是循环的最后一个值,所以在这种情况下是 4)。 使用列表生成器可以缩短很多时间:

    def func_calc(a,b):
       return [0.7*exam + 0.3*home if exam >= 60 else exam for exam,home in zip(a,b)]
    

    【讨论】:

      【解决方案3】:

      您的代码缩进不正确。请更正 if-else 部分的缩进如下:

      def func_calc(a,b):
          for i in range(len(a)):
              exam1 = a[i]
              homework1 = b[i]
              if a[i] < 60:
                  print (a[i])
              else:
                  print (0.70*exam1+0.30*homework1)
      

      【讨论】:

        【解决方案4】:

        我不确定您的背景是什么,但如果使用 java/c# 语法可能有助于更好地理解。 Python 使用缩进来显示属于嵌套块的内容。正如你有forif 它们将按顺序执行

        def func_calc(a,b):
        
            for i in range(len(a)):
                exam1 = a[i]
                homework1= b[i]
            if a[i] < 60:
                print (a[i])
            else:
                 print(0.70*exam1+0.30*homework1)
        
        

        重写为其他语言将被执行为

        void func_calc(a,b){
        
            for (i = 0; i < a.Length(a); i++){
                exam1 = a[i]
                homework1= b[i]
            }
        
            if(a[i] < 60){
                print (a[i])
            }
            else{
                 print(0.70*exam1+0.30*homework1)
            }
        }
        
        

        如果是这样,只需缩进它作为for循环的一部分执行

        def func_calc(a,b):
        
            for i in range(len(a)):
                exam1 = a[i]
                homework1= b[i]
                if a[i] < 60:                         # this is indented
                    print (a[i])                      # this is indented
                else:                                 # this is indented
                     print(0.70*exam1+0.30*homework1) # this is indented
        
        

        java/c# 中的等价物将是

        void func_calc(a,b){
        
            for (i = 0; i < a.Length(a); i++){
                exam1 = a[i]
                homework1= b[i]
        
                if(a[i] < 60){
                    print (a[i])
                }
                else{
                     print(0.70*exam1+0.30*homework1)
                }
            }
        }
        
        

        【讨论】:

          【解决方案5】:

          您正在遍历所有成绩并仅保留最后一个成绩,您可以通过在 for 循环下包含 if 语句来解决此问题


          另外,您可以使用列表推导:

          exam = [70,80,67,89,100]
          homework= [100,80,56,89,100]
          [0.7*e + 0.3*h if e > 60 else 0.7* e for e, h in zip(exam, homework)]
          

          输出:

          [79.0, 80.0, 63.7, 89.0, 100.0]
          

          【讨论】:

          • 不,因为如果学生不及格,你应该只返回其中的一部分这一事实并没有做任何事情
          • @Eric 是的,我希望现在更好
          • 如果考试是唯一的成绩,我认为考试不占 70% :) 不确定,但未在问题中指定。
          • @Eric ths OP 说If the student fails the test then only the test score is calculated.
          • 完全正确,所以它算作满级(我认为至少)。这也是原始代码中所做的,尽管循环不正确
          【解决方案6】:

          这是你的缩进。 应该是:

          def func_calc(a,b):
          
              for i in range(len(a)):
                  exam1 = a[i]
                  homework1= b[i]
                  if a[i] < 60:
                      print (a[i])
                  else:
                      print(0.70*exam1+0.30*homework1)
          
          def main():
              exam = [70,80,67,89,100]
              homework= [100,80,56,89,100]
              func_calc(exam,homework)
          
          main()
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-09-09
            • 2019-08-25
            • 2017-03-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多