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

如何实现支持随机选项且按答案类型计分的问答游戏

问答游戏计分逻辑优化方案

我是编程新手,想开发一款问答游戏,要求根据答案类型而非显示位置计算得分——哪怕打乱选项顺序,也能识别correct_choice、good_choice等类型并对应计分。

目前我通过索引判断的方式实现计分,这种方式要求选项必须固定顺序,无法支持随机排序。

当前实现代码(quiz_brain.py中QuizBrain类的check_answer方法)

def check_answer(self, user_answer):
    """Check the answer from the user and assign it the appropriate score"""
    points_awarded = 0

    if user_answer == self.current_question.choices[0]:
        points_awarded = 4
    elif user_answer == self.current_question.choices[1]:
        points_awarded = 3
    elif user_answer == self.current_question.choices[2]:
        points_awarded = 2
    elif user_answer == self.current_question.choices[3]:
        points_awarded = 1

    self.score += points_awarded
    return points_awarded

问题数据结构

question_data = [
    {
        "question": "Kada ugledaš djevojku, kako ćeš joj prići??",
        "choices": {
            "correct_choice": "Cititat ćeš joj omiljene stihove Zoke Bosanca.",
            "good_choice": "Mala, dobro izgledaš. Ajmo na sok.",
            "decent_choice": "Čija si ti, mala?",
            "fair_choice": "Želiš li možda da zajedno popijemo neko pićence?",
        }
    },
    {
        "question": "Gdje ćeš izvesti djevojku na prvi spoj?",
        "choices": {
            "correct_choice": "U kvartovsku ćevabdžinicu, jest ću ćevape s lukom, kako i dolikuje.",
            "good_choice": "U ZOO, da posjeti svoju familiju.",
            "decent_choice": "Prošetat ćemo Maksimirom, možda se nešto i dogodi.",
            "fair_choice": "Izvest ću ju na kavu.",
        }
    },
    # Add more questions here
]

优化方案

1. 定义得分映射表

先创建一个字典,把选项类型和对应的分数绑定,方便后续快速查找:

# 可放在QuizBrain类内作为类属性,或单独定义
SCORE_MAP = {
    "correct_choice": 4,
    "good_choice": 3,
    "decent_choice": 2,
    "fair_choice": 1
}

2. 修改Question类(保留类型与文本的映射)

让每个Question实例同时保存「类型-文本」的映射关系,以及随机排序的选项列表用于显示:

import random

class Question:
    def __init__(self, question_dict):
        self.text = question_dict["question"]
        # 保存选项类型到文本的映射,用于后续匹配
        self.choice_type_map = question_dict["choices"]
        # 提取所有选项文本,打乱顺序后作为显示用的选项列表
        self.choices = list(self.choice_type_map.values())
        random.shuffle(self.choices)

3. 重写check_answer方法

不再依赖选项索引,而是通过用户答案的文本反向查找对应的类型,再从得分映射表中获取分数:

def check_answer(self, user_answer):
    """检查用户答案并分配对应分数"""
    points_awarded = 0
    # 遍历类型-文本映射,找到用户答案对应的类型
    for choice_type, choice_text in self.current_question.choice_type_map.items():
        if choice_text == user_answer:
            points_awarded = SCORE_MAP.get(choice_type, 0)
            break
    self.score += points_awarded
    return points_awarded

4. 效果验证

修改后,不管选项列表怎么随机打乱,只要用户选择的文本属于某个类型,就能正确匹配到对应的分数,完全摆脱了选项顺序的限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:54:54