Python / 学习 / 实践 · 2020年7月13日 0

毛概答题与错题记录器——python的简单json解析

临近期末考试,做了一个简单地毛概答题程序,调用的也是自己写的题库接口,题量不大,仅仅有我的老师发出的700道选择题

目前已知安全性问题,验证码没有在服务器端验证,后续会进行更改。

题库未按照单选与多选类型进行分类。


#  Copyright (c) 2020.
#  作者:Xiao Bao
#  邮箱:ztianb@foxmail.com
#  日期:2020-07-18 13:46
#  ---
#  项目:MyApi
#  文件名:maogai.py
#  路径:D:/pythonworkspace/MyApi/maogai.py
#  Copyright (c) 2020

import json
import os
import time

from suds.client import Client


def get(num, token):
    client = Client('题库接口')
    response = client.service.getQuestion(str(num), token)
    # print(response)
    dic = json.loads(response)
    return dic


def pr(dic, l):
    list = []
    sc = 0
    for i in range(0, l):
        os.system("cls")
        print("共{}题,已做{}题,错{}题,得分为{}".format(str(l), str(i), len(list), str(sc)))
        print(dic['data'][i]['q'] + "\n")
        print(dic['data'][i]['se1'] + "\n")
        print(dic['data'][i]['se2'] + "\n")
        print(dic['data'][i]['se3'] + "\n")
        print(dic['data'][i]['se4'] + "\n")

        ans = input("输入你的答案(大写且不要有空格,不定项选择):")
        if dic['data'][i]['a'] == ans.strip(""):
            print("回答正确!1.5s后进入下一题")
            sc = sc + 1
            time.sleep(1.5)
        else:
            print("正确答案为:" + dic['data'][i]['a'])
            list.append(dic["data"][i])
            print("已为您加入错题本,3s后进入下一题")
            time.sleep(3)
    return list


def save(list):
    try:
        str = '\n'
        with open("错题本.txt", "a", encoding="utf-8") as f:
            # f.write(str.join(list))
            for line in list:
                json.dump(line, f, ensure_ascii=False)
                f.write("\n")

    except:
        print("文件写入错误!错题保存失败")


def CuoTi():
    try:
        str = '\n'
        ctbook = []
        with open("错题本.txt", "r", encoding="utf-8") as f:
            # f.write(str.join(list))
            lines = f.readlines()
            for line in lines:
                dicc = json.loads(line)
                ctbook.append(dicc)
        return ctbook
    except:
        print("错题文件读取错误!")


def readCuoTi(ctbook):
    l = len(ctbook) - 1
    i = 0
    while i <= l:
        os.system("cls")
        print("共{}题,已复习{}题,剩余{}题".format(str(l), str(i), str(l - i)))
        JieXi(ctbook, i)
        key = input("输入回车进入下一题,输入1返回上一题\n")
        try:
            if key == "1":
                i = i - 2
        except:
            pass
        i = i + 1


def JieXi(ctbook, i):
    ans = ctbook[i]['a']
    print(ctbook[i]['q'] + "\n")
    if "A" in ans:
        A(ctbook, i)
    if "B" in ans:
        B(ctbook, i)
    if "C" in ans:
        C(ctbook, i)
    if "D" in ans:
        D(ctbook, i)


def A(ctbook, i):
    print(ctbook[i]['se1'] + "\n")


def B(ctbook, i):
    print(ctbook[i]['se2'] + "\n")


def C(ctbook, i):
    print(ctbook[i]['se3'] + "\n")


def D(ctbook, i):
    print(ctbook[i]['se4'] + "\n")


def main(G_token):
    CuoTi()
    num = input("输入题量:")
    dic = get(num, G_token)
    if dic['code'] == 200:
        l = len(dic['data'])
        save(pr(dic, l))
    else:
        print(dic['text'])


def saveLOG(list):
    try:
        with open("logmessage.txt", "w", encoding="utf-8") as f:
            # f.write(str.join(list))
            for line in list:
                json.dump(line, f, ensure_ascii=False)
                f.write("\n")

    except:
        print("文件写入错误!登录信息保存失败\n记牢以下信息:" + list[0]['token'])


def signCheck():
    return os.path.exists("logmessage.txt")


def getToken():
    with open("logmessage.txt", "r", encoding="utf-8") as f:
        # f.write(str.join(list))
        dicc = json.loads(f.readline())
        G_token = dicc['token']
    return G_token


def signIn():
    list = []
    email = input("注册本软件,请输入您的邮箱:\n")
    client = Client('token接口')
    response = client.service.get(email)
    # print(response)
    dic = json.loads(response)
    list.append(dic)
    if dic['code'] == 200:
        code = input("输入验证码:\n")
        if code == dic['emcode']['result'][0]['message']:
            saveLOG(list)


if __name__ == '__main__':
    while True:  # 永真循环
        if signCheck():
            G_token = getToken()
            se = input("进入答题模式请输入:1" + "\n" + "进入错题查看请输入:2 \n")
            if se == "1":
                main(G_token)
            elif se == "2":
                readCuoTi(CuoTi())
            else:
                exit(-1)
        else:
            signIn()

直接使用:

下载链接

蓝奏云下载

直链下载(易失效)

接口内容如下:

此内容仅供注册用户查看。请 %登录% .