Python专题:十七、做个小游戏

终端小游戏

1、根据题库内容出单选题

2、提示作答,并给结果

思路

列表        保存题目

字典        保存题干,选项和答案

遍历        题目列表用于展示

input函数        等待用户输入

判断输入,并继续提示

计算正确率并打印

题库

{
    "name": "样例题库",
    "question_list": [
        {
            "question": "生命、宇宙以及一切事物的终极答案是?",
            "choices": [
                "42",
                "43",
                "44",
                "45"
            ],
            "answer": 0
        },
        {
            "question": "机器人 Marvin 今天高兴吗?",
            "choices": [
                "没有理由不高兴",
                "他今天一定很忧郁",
                "取决于他接到的任务",
                "一会儿高兴,一会儿不高兴"
            ],
            "answer": 1
        }
    ]
}
import json
import os
import sys

def read_question_file(filename):
    if not os.path.isfile(filename):
        return None
    with open(filename, 'r', encoding='utf-8') as f:
        try:
            return json.load(f)
        except ValueError as e:
            print(e)
            print('加载题库错误。')
            return None


def to_letter(n):
    return chr(ord('A') + n)


def to_answer(letter, c_len):
    letter = letter.upper()
    if len(letter) == 1 and 'A' <= letter <= 'Z':
        digit = ord(letter) - ord('A')
        if 0 <= digit < c_len:
            return digit, True
        else:
            return None, False
    else:
        return None, False


def ask_question(question, i):
    print('\n第 {0} 题:{1}'.format(i+1, question['question']))

    choices = question['choices']
    c_len = len(choices)
    for j in range(c_len):
        print('{0}:{1}'.format(to_letter(j), choices[j]))

    user_input = input('请输入答案:')
    user_answer, ok = to_answer(user_input, c_len)
    while not ok:
        user_input = input('输入错误,请输入选项前的单个字母做为答案:')
        user_answer, ok = to_answer(user_input, c_len)

    return user_answer == question['answer']


def main(argv):
    if len(argv) != 2:
        print('请指定题库 JSON 文件')
        sys.exit(-1)
    filename = argv[1]

    # 读取题库列表,每道题目为一个字典
    question_json = read_question_file(filename)
    if not question_json:
        print('题库文件读取失败,请检查:{0}'.format(filename))
        sys.exit(-1)

    name = question_json['name']
    question_list = question_json['question_list']

    print('答题开始,当前题库为:{0}'.format(name))

    # 遍历题库列表
    q_len = len(question_list)
    correct_count = 0
    for i, q in enumerate(question_list):
        # 展示题目、提示用户输入、判断答案
        if ask_question(q, i):
            correct_count += 1

    # 计算并展示正确率
    print('\n答题完成,共 {0} 道题目,你答对了 {1} 题。正确率 {2:.2f}%。'
          .format(q_len, correct_count, correct_count/q_len*100))


if __name__ == '__main__':
    main(sys.argv)



        

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值