如何实现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
相关产品推荐
相关产品推荐

