首页 > 解决方案 > Flask / jinja 如何计算平均值

问题描述

我正在尝试研究 jinja / flash / python 组合,但是遇到了问题。我从互联网上找到了这种示例并让它运行良好,但现在我想改进代码并且不知道如何。我尝试了许多不同类型的操作来打印用户给出的平均成绩,但无法让它发挥作用。

有谁知道如何帮助?

成绩.html

<form action = "result" method = "POST">
   <p>Name <input type = "text" name = "Name" /></p>
   <p>Gymnastics <input type = "text" name = "Gymnastics" /></p>
   <p>English <input type = "text" name = "English" /></p>
   <p>Maths <input type ="text" name = "Maths" /></p>
   <p><input type = "submit" value = "submit" /></p>
</form>

结果.html

    <!doctype html>
  <table border = 1>
    {% for key, value in result.items() %}


    <tr>
       <th> {{ key }} </th>
       <td> {{ value }} </td>
    </tr>

    {% endfor %}


 </table>

应用程序.py

    from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def student():
   return render_template('grades.html')


@app.route('/result',methods = ['POST', 'GET'])
def result():
   if request.method == 'POST':
      result = request.form
      return render_template("result.html",result = result)

好的,它工作得很好,但是我怎样才能改进我的代码并打印所有这些发布成绩的平均值?

标签: pythonhtmlflaskjinja2

解决方案


要计算成绩,请将它们相加并除以成绩数。或者您可以使用以下statistics.mean()功能:

import statistics

@app.route('/result',methods = ['POST', 'GET'])
def result():
    subjects = ['Gymnastics', 'English', 'Maths']
    if request.method == 'POST':
        result = request.form.to_dict()
        average = statistics.mean([float(result[subject]) for subject in subjects])
        result['average'] = f'{average:.2f}'
        return render_template("result.html",result = result)

此代码提取每个已知科目的成绩并将其转换为浮点值。计算平均值,将其转换为小数点后 2 位的字符串,然后放入resultdict 以便在模板中可用。

模板将显示结果,但是,您可能希望更好地格式化它。


推荐阅读