python实现答题游戏

有这样一个需求:使用python实现一个游戏,一共有10个问题,依次回答每个问题,每个用户可以输入问题的答案,但是互相不能看到,有一个管理员可以看到所有人的答案,并且当所有人都填写完成后可以公布所有人的答案,并且打分。在回答的下面有一个得分表,每打完一轮问题的得分则实时计算总得分和排名。限制一个IP只能登录一个用户。

下面给出一个基于 Flask 的简化示例,演示如何用 Python 实现这样一个游戏的核心功能,主要包括:

  1. 10 个问题的答题流程。
  2. 用户只能看到自己的答案,管理员可以看到所有人的答案。
  3. 当所有人都填写完成后,管理员可以公布所有人的答案并进行打分。
  4. 显示得分表,每轮更新后实时计算总得分和排名
  5. 限制同一个 IP 地址只能登录一个用户。

为演示方便,以下示例仅做最小可行的流程说明,使用字典存储用户和答案信息;在实际生产环境中,可以结合数据库、认证机制、前端模板等进行更完善的开发。


主要功能说明

  1. 注册/登录

    • 用户首次进入时,需要填写用户名进行注册并登录。
    • 同一个 IP 地址只允许注册一个用户,后续从同一 IP 再访问则直接视为该用户登录或禁止二次注册。
  2. 答题

    • 一共 10 个问题,这里演示时以简单的问卷形式呈现。
    • 每个用户在提交完所有答案后,才能等待管理员公布结果。
  3. 管理员查看与公布答案

    • 管理员可以查看所有用户答案。
    • 管理员可进行打分,并将所有用户答案与分数公示。
    • 每完成一轮题目即可查看实时总得分并进行排名。
  4. 得分统计与排名

    • 每一轮提交答案后,管理员打分并把分数汇总到用户总分中。
    • 根据所有用户的总分动态计算排名并显示。

代码示例

下面的示例使用 Flask 进行演示,提供了若干路由(URL)以完成相应功能。请先安装 Flask:

pip install flask

然后创建一个脚本文件(如 quiz_game.py),内容如下:

from flask import Flask, request, session, redirect, url_for, render_template_string
import functools

app = Flask(__name__)
app.secret_key = "your_secret_key"  # 用于 session 加密

# 记录哪些 IP 已经注册过用户
ip_to_user = {
   }

# 存储用户信息,包括用户名、答案、分数等
# 结构示例:
# users_data = {
   
#   'alice': {
   
#       'answers': ["ans1", "ans2", ...],  # 当前轮次的答案
#       'scores': [5, ...],               # 历史每一轮的得分
#       'total_score': 5
#   },
#   'bob': {...},
#   ...
# }
users_data = {
   }

# 定义题目,这里示例 10 个问题
QUESTIONS = [
    "问题1:你最喜欢的颜色是什么?",
    "问题2:你最喜欢的动物是什么?",
    "问题3:你的故乡在哪里?",
    "问题4:你最喜欢吃什么?",
    "问题5:你最喜欢哪个季节?",
    "问题6:你最喜欢做的运动是什么?",
    "问题7:你最喜欢的电影类型是什么?",
    "问题8:假期里你最想去哪里旅行?",
    "问题9:你希望学习哪项新技能?",
    "问题10:你最喜欢的音乐类型是什么?",
]

# 标记当前答题是否开放,如果轮次结束后可以由管理员统一切换
answer_open = True
# 标记这一轮是否已经公布答案
answers_revealed = False

# ========== 帮助函数 ==========

def login_required(func):
    """需要用户已登录,否则跳转到登录页面。"""
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        if 'username' not in session:
            return redirect(url_for('login'))
        return func(*args, **kwargs)
    return wrapper

def admin_required(func):
    """需要管理员权限,否则跳转到登录。此示例简单地将用户名为 'admin' 视为管理员。"""
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        if session.get('username') != 'admin':
            return "只有管理员能访问此页面。", 403
        return func(*args, **kwargs)
    return wrapper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值