可自己做题库随机出题的app

在如今这个数字化时代,越来越多的教育机构和个人开始使用app来进行教学和学习。其中比较常见的就是一些做题类app。许多人都很好奇,在背后这些app是如何实现随机出题的呢?本篇文章将介绍一种可自己做题库随机出题的app的原理和详细介绍。

1. 原理介绍

一、数据存储

做题库随机出题app的实现必须要首先有做题库的数据存储。有很多种数据存储方式,包括MySQL、mongodb、redis等等。在这里,我们使用MySQL作为数据库进行数据库操作。将我们所需的题目题干、题目选项、题目答案等信息存储到MySQL数据库中,随时可以调用使用。

二、随机抽取

做题库随机出题app的另一个重要部分就是“随机抽取”,即从数据库中随机抽取学生需要给出答案的题目。在随机抽取过程中,我们需要配置一些参数来确定抽取多少道题目、抽取题目的类型和难易程度等。

三、展示界面

做题库随机出题app的最后一步就是展示界面。需要将我们所随机抽取的题目展示出来,并且获取学生的答案进行判断。展示界面主要包含题目展示、选项展示、答案展示、答案正确性确认等方面。

2. 详细介绍

接下来,我们就可以详细地介绍一下,如何使用MySQL数据库实现做题库随机出题app。

一、数据存储

在数据库中,我们需要先创建一个表来存储题目的信息。表中应该包括题目ID、题干、选项A、选项B、选项C、选项D、答案等字段(可根据实际需要增加、减少字段)。

```sql

CREATE TABLE IF NOT EXISTS `questions` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`stem` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT '问题题干',

`choice_a` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '选项A',

`choice_b` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '选项B',

`choice_c` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '选项C',

`choice_d` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '选项D',

`answer` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '问题答案',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='问题表';

```

二、存储数据

将存储好的题目信息放到一个外面的文件里,这里我们用json格式文件,这个文件的本地路径是question_bank.json。其中,每个问题由题目stem、选项choice与答案answer三个字段组成,要注意的是answer字段中是记录正确答案的。

```json

[

{

"stem": "我国对外开放的首倡者和开创者是:",

"choice_a": "邓小平",

"choice_b": "邓颖超",

"choice_c": "陈毅",

"choice_d": "周恩来",

"answer": "a"

},

{

"stem": "下列地理位置最偏远的城市是:",

"choice_a": "拉萨",

"choice_b": "哈尔滨",

"choice_c": "三亚",

"choice_d": "乌鲁木齐",

"answer": "d"

},

{

"stem": "中国通用的地理经度基准线是什么?",

"choice_a": "东经110°",

"choice_b": "东经108°",

"choice_c": "东经105°",

"choice_d": "东经120°",

"answer": "b"

}

]

```

下面的代码演示了如何将json格式的数据存入到MySQL数据库中。

```python

import json

import pymysql

def save_data2mysql(conn, data, tb_name):

if len(data)>0:

cur = conn.cursor()

sql_create_tb = '''

CREATE TABLE IF NOT EXISTS `''' + tb_name + '''` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`stem` varchar(200) NOT NULL COMMENT '问题题干',

`choice_a` varchar(100) DEFAULT NULL COMMENT '选项A',

`choice_b` varchar(100) DEFAULT NULL COMMENT '选项B',

`choice_c` varchar(100) DEFAULT NULL COMMENT '选项C',

`choice_d` varchar(100) DEFAULT NULL COMMENT '选项D',

`answer` varchar(10) NOT NULL COMMENT '问题答案',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=''' + tb_name + '''';

'''

cur.execute(sql_create_tb)

conn.commit()

sql_insert = '''INSERT INTO `''' + tb_name + '''`

(`stem`, `choice_a`, `choice_b`, `choice_c`, `choice_d`, `answer`)

VALUES (%s,%s,%s,%s,%s,%s)'''

for item in data:

cur.execute(sql_insert, (item['stem'], item['choice_a'], item['choice_b'], item['choice_c'], item['choice_d'], item['answer']))

conn.commit()

cur.close()

if __name__ == '__main__':

dbName = 'test' # 数据库名

tbName = 'questions' # 数据表名

# 配置数据库连接信息

conn = pymysql.connect(

host='127.0.0.1',

user='root',

passwd='root',

db=dbName,

port=3306,

charset='utf8mb4')

# 开始存储数据

with open('question_bank.json', 'r') as f:

data = json.load(f)

save_data2mysql(conn, data, tbName)

```

三、随机抽取和展示题目

操作MySQL数据库后,我们就可以根据学生所需抽取的题目的数量和类型等参数,从MySQL中随机抽取题目。接下来的代码演示了如何实现从MySQL数据库中随机抽取题目。并同时将这些题目封装成一个函数帮助我们在app中随时调用。

```python

import random

import pymysql

def get_questions(qtb_name, num_per_choice, choices):

'''

从数据库qtb_name中获取num_per_choice个题目,

每个题目的答案类型必须在choices所代表的答案类型中

'''

db = pymysql.connect("localhost", "user", "password", "dbname")

cursor = db.cursor()

questions = [] # 获取的题目

for choice in choices:

sql = '''

SELECT `stem`, `choice_a`, `choice_b`, `choice_c`, `choice_d`, `answer`

FROM `''' + qtb_name + '''` WHERE `answer`="%s" ORDER BY RAND() LIMIT %d;

''' % (choice, num_per_choice)

try:

cursor.execute(sql)

results = cursor.fetchall()

for row in results:

question = {}

question['stem'] = row[0]

question['choices'] = [row[1], row[2], row[3], row[4]]

question['answer'] = row[5]

questions.append(question)

except:

print("Error: select question list failed!")

db.close()

# 让每个题目随机排列

for question in questions:

question['choices'].append(question['answer']) # 选项中加入答案

random.shuffle(question['choices']) # 随机排列选项,使A、B、C、D的位置不固定

return questions

```

在获取到随机抽取的题目列表后,我们就可以在展示界面中展示出来,并根据学生所输入的答案判断正误。接下来的代码演示了如何封装一个函数用于展示随机抽题的题目并获取用户提交的答案。函数中以问题列表questions作为参数,其中每条问题的格式为{stem:'', choices:[choice_a, choice_b, choice_c, choice_d, correct], answer:''}。其中stem和choices都是字符串。

```python

import tkinter as tk

class QuizUI:

def __init__(self, master, stem, choices):

self.master = master

self.stem_canvas = tk.Canvas(self.master, width=480, height=50)

self.choice_canvas = tk.Canvas(self.master, width=480, height=240)

self.check_button = tk.Button(self.master, text="确认", command=self.check_answer)

self.show_results = tk.Label(self.master, text=" ", font=('Arial', 14))

# 设置题干

self.stem_canvas.create_text(240, 30, text=stem, font=('Arial', 16), width=460, justify='center')

self


相关知识:
做一个适合自己公司运营的app
在如今,手机app已经成为了各种商业运营的必然选择。无论是传统零售业,还是电商或服务行业,都有着自己的app来提高客户体验、提升用户留存和增加销售额。在本文中,我们将介绍一些构建一个适合自己公司运营的app的原理和步骤。一、定位首先,需要明确自己公司的主营
2023-06-05
自建流量app
自建流量app是一种通过开发手机应用程序来获取流量的方法。通过这种方法,你可以将应用程序推广给更多的人,并通过用户使用应用程序来获得流量。下面是自建流量app的原理和详细介绍:1. 原理自建流量app的原理是通过应用程序自带的广告或者是通过推广其他的应用程
2023-06-05
自己做的app可以在哪个平台发布信息
做好一款app后,需要将其发布到一个或多个平台,以便让用户下载和使用。以下是常见的app发布平台介绍以及其原理和详细介绍。1. 苹果App Store苹果App Store是苹果公司提供的应用程序下载平台,可供iOS设备用户使用。其原理是将app提交到苹果
2023-06-05
自己制作公众号封面app
随着微信公众号越来越受到用户们的欢迎,在公众号的设计方面也日趋重要。一个好看的封面可以吸引更多的读者,提高访问率和阅读量。然而,你可能并不想花大量的金钱来请设计师设计专业的封面,那么自己制作公众号封面app就是一个很好的选择。自己制作公众号封面需要掌握一定
2023-06-05
怎么自己做一个抽奖类的app
抽奖类的app是一种非常受欢迎的应用类型,特别是在举办促销活动或者推广产品的时候非常实用。本文将介绍如何自己做一个抽奖类的app,并提供一些具体的原理和步骤。一、抽奖app的原理抽奖app的原理就是通过随机算法,在指定的奖项中随机选择一个中奖者。随机算法的
2023-06-05
让自己开发的app用小米硬件
小米智能硬件开放平台提供了丰富的API接口和SDK供开发者开发小米硬件相关的应用。在使用小米硬件前,需要小米账号登录并进行授权,然后才能获取到对应的API接口和SDK。小米硬件开放平台主要提供了以下类型的硬件:智能家居、智能穿戴、智能投影、智能音响等等。每
2023-05-30
如何自己做一个简单的app
做一个简单的app对于有一定计算机知识的人来说并不难,我们可以使用现有的工具和技术来构建我们的app。以下是简单介绍如何做一个app的步骤:1.确定你的app功能和目标受众在做一个app之前,我们首先要确定我们的app的功能和目标受众。这有助于我们设计我们
2023-05-30
黎平工业自动化手机app开发报价
黎平工业自动化是一家致力于为工业客户提供先进自动化解决方案的公司。为了更好地满足客户的需求,我们计划开发一款手机app,为客户提供更加便捷和高效的服务。以下是我们的报价和开发原理的详细介绍。报价:我们将这款app命名为“黎平工业自动化客户端”,主要功能包括
2023-05-30
开发自己的app或网站
随着IT技术的不断发展,越来越多的人开始学习和开发自己的app或网站。这篇文章将为想要开发自己的app或网站的读者提供一些基本的原理和介绍。首先,我们需要明确自己开发app或网站的目的和需求。只有了解自己的目标和需求,才能更好地规划开发的流程和目标。例如,
2023-05-30
经销商自建社区团购app
随着互联网和移动互联网的普及,越来越多的经销商开始考虑如何利用互联网打造自己的社区团购平台。社区团购平台是一种近年兴起的电商平台模式,它以物美价廉、品质保证为特色,受到了越来越多消费者的青睐。如何搭建一款良好的社区团购应用程序呢?以下是一些原理和详细介绍。
2023-05-30
app自动开发票
随着智能手机的普及,移动应用已经成为现代人生活中不可或缺的一部分。在这个领域中,自动开发票已经成为一个非常热门的话题。自动开发票指的是利用移动应用程序实现开具发票的自动化过程。在这篇文章中,我们将介绍自动开发票的原理和详细介绍。一、原理实现自动发票的主要原
2023-05-30
app开发找外包做还是自己做比较好
在决定是否将App开发外包给第三方服务商之前,需要考虑许多因素。以下是研究外包和自主开发应该关注的一些重要考虑因素:1. 技能水平第一点很显然:请确保对于所想要开发的应用程序,您或您的团队有足够的技能和经验。如果您的团队没有经验,外包公司可以提供专业知识和
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1