You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask接收用户输入动态计算时间序列循环数的实现问题

如何实现Flask动态接收用户输入的阈值来统计时间序列循环数?

我是Flask和HTML新手,现在开发一个统计时间序列曲线循环数的小应用:当曲线段的下限值<13且峰值>20时,统计波动次数。目前已经实现静态数据统计,但希望支持用户通过UI输入自定义阈值(如下限<4、上限>15)来动态计算,现有代码存在问题,求修正方案。

原代码存在的问题

  1. 路由函数get_count参数错误,且内部变量未定义(如x1)
  2. 用户输入的两个阈值被重复赋值给同一个变量,未正确区分
  3. 静态阈值硬编码在判断条件中,未替换为用户输入值
  4. 函数内存在多个无效return语句,逻辑混乱
  5. 启动时直接调用get_count(x)缺少必要参数,会报错

修正后的Flask代码

import numpy as np
from flask import Flask, render_template, request

app = Flask(__name__)

# 全局时间序列数据
x = np.array([0, 7, 18, 24, 26, 27, 26, 25, 26, 16, 20, 16, 23, 33, 27, 27,
22, 26, 27, 26, 25, 24, 25, 26, 23, 25, 26, 24, 23, 12, 22, 11, 15, 24, 11,
12, 11, 27, 19, 25, 26, 21, 23, 26, 13, 9, 22, 18, 23, 26, 26, 25, 10, 22,
27, 25, 19, 10, 15, 20, 21, 13, 16, 16, 15, 19, 17, 20, 24, 26, 20, 23, 23,
25, 19, 15, 16, 27, 26, 27, 28, 24, 23, 24, 27, 28, 30, 31, 30, 9, 0, 11,
16, 25, 25, 22, 25, 25, 11, 15, 24, 24, 24, 17, 0, 23, 21, 0, 24, 26, 24,
26, 26, 26, 24, 25, 24, 24, 22, 22, 22, 23, 24, 26,23])

def calculate_cycles(data, lower_threshold, upper_threshold):
    """工具函数:根据阈值统计循环数"""
    # 按下降点分割序列(保留原逻辑)
    split_points = np.where(np.diff(data) < 0)[0] + 1
    sub_lists = np.split(data, split_points)
    
    cycle_count = 0
    for segment in sub_lists:
        # 使用用户输入的阈值判断
        if (min(segment) <= lower_threshold 
            and max(segment) > upper_threshold 
            and len(set(segment)) > 1):
            cycle_count += 1
    return cycle_count

@app.route('/', methods=['GET', 'POST'])
def index():
    count_result = None
    lower = 13  # 默认下限阈值
    upper = 20  # 默认上限阈值
    
    if request.method == 'POST':
        # 获取用户输入并转换为整数
        try:
            lower = int(request.form['Input1'])
            upper = int(request.form['Input2'])
        except ValueError:
            # 处理输入非数字的情况
            count_result = "请输入有效的数字阈值"
            return render_template('index.html', count_result=count_result, lower=lower, upper=upper)
        
        # 计算循环数
        count_result = calculate_cycles(x, lower, upper)
    
    # GET请求或首次加载时,使用默认阈值计算
    if count_result is None:
        count_result = calculate_cycles(x, lower, upper)
    
    return render_template('index.html', count_result=count_result, lower=lower, upper=upper)

if __name__ == "__main__":
    app.run(debug=False, port=1223)

代码说明

  • 新增calculate_cycles工具函数,专门处理统计逻辑,接收数据和两个阈值参数,返回结果
  • 主路由/同时支持GET和POST请求,无需额外的/send路由
  • 处理用户输入时增加异常捕获,避免非数字输入导致崩溃
  • 默认使用原静态阈值(13和20),用户提交后替换为自定义值
  • 移除无效的递归调用和多余return语句,逻辑清晰

优化后的HTML页面代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>循环数统计计算器</title>
</head>
<body>
 <h1>时间序列循环数统计</h1>
 <form method="POST">
        <label>下限阈值(曲线段最小值需≤此值):</label>
        <input type="number" name="Input1" id="Input1" value="{{ lower }}">
        <br><br>
        <label>上限阈值(曲线段最大值需>此值):</label>
        <input type="number" name="Input2" id="Input2" value="{{ upper }}">
        <br><br>
        <input type="submit" value="计算循环数"/>

   <br />
   <br />
     <p>当前阈值下的循环数:{{ count_result }}</p>
  </form>
</body>
</html>

HTML优化点

  • 给输入框添加清晰的标签,用户明确知道输入的是哪个阈值
  • 使用type="number"代替text,限制用户只能输入数字,减少错误
  • 回显当前使用的阈值(默认或用户输入值),提升用户体验
  • 优化提示文本,更直观地展示结果

内容的提问来源于stack exchange,提问作者user20289810

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:20:43