python - 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)
好的,它工作得很好,但是我怎样才能改进我的代码并打印所有这些发布成绩的平均值?
解决方案
要计算成绩,请将它们相加并除以成绩数。或者您可以使用以下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 位的字符串,然后放入result
dict 以便在模板中可用。
模板将显示结果,但是,您可能希望更好地格式化它。
推荐阅读
- sql - 传递多个值ssrs sql
- java - 在 android 的 xml 中制作 4 档渐变
- javascript - React 中的函数组件(钩子)中的拼接是如何工作的?
- python - 我怎样才能实时获得我的实习计算机音频?
- swift - swiftui拖放益智游戏
- java - 在 java 中使用接口和组合 - 重用具有不同变量的代码
- c++ - std::this_thread::sleep_for() 与 main() 中的 sleep()
- google-colaboratory - 如何在 Colab 中使用“链接到单元格”
- javascript - 将移动设备的 target="_blank" 更改为 target = "_self"
- macos - Docker 映像失败 - 使用了 8080 端口