2020-12-01

马克思主义基本原理答题小程序

简介

老师发布了马原题库后,排版简直令人发麻。
为了看着方便将excel表格编写成一个答题小程序,为了方便,没有用图形化编程,在cmd运行界面也可以看。
使用的python编写,写好后直接使用pyinstaller编译

界面

在这里插入图片描述

代码

import pandas as pd
import os
import random
import time
import ctypes
import sys

STD_INPUT_HANDLE = -10
STD_OUTPUT_HANDLE = -11
STD_ERROR_HANDLE = -12

# 字体颜色定义 text colors
FOREGROUND_BLUE = 0x09  # blue.
FOREGROUND_GREEN = 0x0a  # green.
FOREGROUND_RED = 0x0c  # red.
FOREGROUND_YELLOW = 0x0e  # yellow.

# 背景颜色定义 background colors
BACKGROUND_YELLOW = 0xe0  # yellow.

# get handle
std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)

def set_cmd_text_color(color, handle=std_out_handle):
    Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
    return Bool

# reset white
def resetColor():
    set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)

# green
def printGreen(mess):
    set_cmd_text_color(FOREGROUND_GREEN)
    sys.stdout.write(mess + '\n')
    resetColor()
# red
def printRed(mess):
    set_cmd_text_color(FOREGROUND_RED)
    sys.stdout.write(mess + '\n')
    resetColor()
# yellow
def printYellow(mess):
    set_cmd_text_color(FOREGROUND_YELLOW)
    sys.stdout.write(mess + '\n')
    resetColor()


def single_choice(num = 10):
    score = 0
    one = 100/num

    a = pd.read_excel(r"2020新修马克思主义基本原理概论单项选择题.xlsx")
    b = [['作者:伊尔安拉 时间 2020/12/1'],
         [],
         [],
         [],
         [],
         [],
         [],]

    # 将数据存入列表
    for i in range(a.shape[0]):
        for j in range(1,7):
            b[j].append(a[j][i])

    low = random.randint(0,a.shape[0]-num)
    for i in range(low, low+num):
        print(b[1][i])
        for j in range(2,6):
            print(chr(63 + j), b[j][i])
        reply = input()
        if reply == b[6][i]:
            printGreen('yes')
            score +=one
        else:
            printRed('No')
            printYellow("==答案为:{}".format(b[6][i]))

    return score

def multiple_choice(num = 10):
    score = 0
    one = 100 / num

    a = pd.read_excel(r"多选.xlsx")
    b = [['作者:伊尔安拉'],
         [],
         [],
         [],
         [],
         [],
         [], ]

    # 将数据存入列表
    for i in range(a.shape[0]):
        for j in range(1, 7):
            b[j].append(a[j][i])

    low = random.randint(0, a.shape[0] - num)
    for i in range(low, low + num):
        print(b[1][i])
        for j in range(2, 6):
            print(chr(63 + j), b[j][i])
        reply = input()
        if reply == b[6][i]:
            printGreen('yes')
            score+=one
        else:
            printRed('No')
            printYellow("==答案为:{}".format(b[6][i]))

    return score

def judgement(num = 10):
    score = 0
    one = 100 / num

    a = pd.read_excel(r"判断.xlsx")
    b = [['作者:伊尔安拉'],
         [],
         []]

    # 将数据存入列表
    for i in range(a.shape[0]):
        for j in range(1, 3):
            b[j].append(a[j][i])

    low = random.randint(0, a.shape[0] - num)
    for i in range(low, low + num):
        print(b[1][i])
        reply = input()
        if (reply == 'A' and b[2][i]=='正确') or reply=='B' and b[2][i]=='错误':
            printGreen('yes')
            score+=one
        else:
            printRed('No')
            printYellow("==答案为:{}".format(b[6][i]))

    return score

def maxture():
    a = single_choice(40)
    b = multiple_choice(20)
    c = judgement(20)
    # 计算权重
    return a*0.25 + b *0.5 + c*0.25

def __main__():
    anwser = ' '
    print('输入单次练习的习题数目(1-200)【只能输入1-200的整数】')
    num = int(input())
    while num<1 or num >200:
        print('输入单次练习的习题数目(1-200)')
        num = int(input())


    while anwser != '0':
        print('\n------------\n输入选择 [只能输入大写字母或0]'
              '\n A:单选'
              '\n B:多选'
              '\n C:判断 [A为正确,B为错误]'
              '\n D:混合 [共80道题,其中单:多:判=2:1:1]'
              '\n 0:退出')
        anwser = input()

        T1  = time.time()
        if anwser=='A':
            score = single_choice(num)
            printGreen('分数为 {}'.format(score))
        elif anwser=='B':
            score = multiple_choice(num)
            printGreen('分数为 {}'.format(score))
        elif anwser =='C':
            score = judgement(num)
            printGreen('分数为 {}'.format(score))
        elif anwser =='D':
            score = maxture()
            printGreen('分数为 {}'.format(score))
        elif anwser=='0':
            printGreen('感谢使用')
            break
        else:
            printRed("输入错误")
        T2 = time.time()
        print('时间:%s 秒' % ((T2 - T1)))

__main__()

资源

文件我已经编译好,在下面的链接
编译好的文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值