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

如何实现Flask猜数字程序猜中数字后重置随机数?

Flask猜数字游戏:猜中后自动生成新随机数的实现方案

现有以下Flask猜数字代码:

from flask import Flask
from random import random, randint
def restart():
    number = randint(1, 10)
    print(number)

    app = Flask(__name__)

    @app.route('/')
    def start():
        return 'What number am I?'

    @app.route(f'/{number}')
    def found():
        return 'You found me!'

    @app.route('/<num>')
    def check(num):
        lownum = int(num)
        if lownum < number:
            return 'Too Low!'
        if lownum > number:
            return 'Too High!'

    if __name__ == "__main__":
        app.run(debug=True)

restart()

目前程序判断数字过高或过低的功能正常,现需要实现猜中数字后自动生成新的随机数字,请问是否有简便的实现方法?


实现方案

原代码的核心问题是随机数number在启动时就固定绑定到路由上,无法动态更新。最简便的方式是利用Flask的session存储用户专属的随机数,实现会话级别的动态更新,同时避免多用户互相干扰。

修改后的完整代码:

from flask import Flask, session
from random import randint

# 全局初始化Flask实例,避免重复创建
app = Flask(__name__)
# 必须设置密钥才能启用session功能,替换为任意随机字符串即可
app.secret_key = 'your_custom_secret_key'

@app.route('/')
def start():
    # 会话初始化时生成随机数
    if 'target_number' not in session:
        session['target_number'] = randint(1, 10)
        print(f"新随机数生成:{session['target_number']}")
    return 'What number am I?'

@app.route('/<int:num>')
def check(num):
    # 防止直接访问数字路由时无随机数的情况
    if 'target_number' not in session:
        session['target_number'] = randint(1, 10)
    
    target = session['target_number']
    if num < target:
        return 'Too Low!'
    elif num > target:
        return 'Too High!'
    else:
        # 猜中后立即生成新随机数并更新会话
        session['target_number'] = randint(1, 10)
        print(f"猜中!新随机数生成:{session['target_number']}")
        return 'You found me! A new number has been generated!'

if __name__ == "__main__":
    app.run(debug=True)

关键改动说明

  • 用session存储随机数:每个用户的会话独立保存目标数字,不会出现多用户互相干扰的问题。
  • 移除静态路由:原代码中@app.route(f'/{number}')是启动时固定的静态路由,改为统一的动态路由/<int:num>处理所有数字输入请求。
  • 猜中后即时更新:在判断用户猜中数字时,直接生成新随机数覆盖session中的值,下次请求自动使用新数字。
  • 全局管理Flask实例:避免原代码中每次调用restart()重复创建实例导致的路由冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:24:35