可自己做题库随机出题的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的具体成本分析。技术人员开销通过自主建立一支专业的开发团队,需要
2023-06-05
自学编程做app难吗知乎
自学编程做app是现在很多人想要尝试的事情,因为移动互联网行业的快速发展和电子产品的普及,app开发成为了一个非常热门的领域。虽然有些人可能认为自学编程很难,但是实际上只要掌握了正确的方法和技能,就可以轻松的入门并慢慢成长。接下来,我会从原理和详细介绍两个
2023-06-05
自己怎么开发跑腿app软件
跑腿app是一种以移动化和互联网思维为背景的生活服务平台,目的是通过技术手段帮助用户高效地解决生活中的各种问题,同时也为企业提供了新的商业机会。一般而言,开发跑腿app需要满足以下几个步骤:1.构建需求分析首先,在开发跑腿app之前,需要对用户的需求和市场
2023-06-05
自己开发记账app
开发一款记账app,需要掌握一定的编程技术和数据库知识,以下是一些主要的原理和介绍。1. 数据库设计原理记账app离不开数据库,我们需要设计一个结构合理、存储效率高的数据库。通常情况下,一个账单记录应该包含如下信息:日期、分类、金额、备注等。我们可以考虑用
2023-06-05
怎么做到让app不记录自己的喜好数据呢
当你使用应用程序时,许多应用程序会收集你的个人信息和数据,例如你的搜索记录、位置信息、设备信息、语音命令和交互历史等等。这些数据通常被用来改善应用程序的用户体验和广告营销。但是,对于那些更加关心隐私的用户,这样的数据收集可能会产生不必要的疑虑和担忧。所以,
2023-06-05
有什么可以自己做app的网站
想要自己做一个APP是一件很有挑战性的事情,从前端UI设计、后端开发、数据库构建到测试发布等都需要技术储备。不过,现在有许多网站可以帮助没有编程经验的人士创建自己的APP,下面就简单介绍几个常用的网站。1. Appy PieAppy Pie是一款无需编写代
2023-06-05
团队自己开发的app
我们团队开发的APP是一款社交类应用程序,旨在为用户提供一个安全保密的交流平台。在传统社交网络中,用户发布的信息往往是公开的,用户在发布信息时无法控制信息的流传范围,这也经常导致用户在社交网络中遇到一些尴尬的事情。因此,我们设计开发这款APP,让用户能够更
2023-05-31
跑腿app自己如何制作软件
跑腿App是一种非常方便的服务,能够将用户需要的物品通过专业配送人员带到指定的地点。跑腿服务已经成为生活中必不可少的一部分,所以许多人都想知道如何制作一款跑腿App。下面我们来介绍制作跑腿App的原理和详细步骤。一、跑腿App的原理 跑腿App是一个基于移
2023-05-30
如何把自己开发的app放到应用商店
如果你开发了一款优秀的移动应用程序,并且想要将其发布到应用商店中以供用户下载和使用,你需要遵循以下步骤。1. 注册开发者账号如果你想在应用商店中发布你的应用程序,你需要先注册一个开发者账号,这个账号会让你有权限发布应用。不同的平台有不同的注册程序,比如苹果
2023-05-30
可以自己做动画的app
随着互联网技术的不断发展,自主制作动画成为了一个越来越热门的话题。然而,许多人却发现自己缺乏专业的技能来完成这项任务。今天,我们将介绍一些可以帮助人们轻松制作动画的应用程序。首先,我们来介绍一些流行的基于云端服务的动画制作工具:1. AnimakerAni
2023-05-30
东营自营商城app开发
东营自营商城app是一款基于移动端的购物平台app。东营市是山东省的一个地级市,该商城是由东营市商务局主导打造的。商城主要以本地生产和本地优质商品为主要销售对象,旨在提高本地商品的知名度和消费者对本地商品的信任度。东营自营商城app的开发主要包括前端UI设
2023-05-30
java要学习多久才可以自己做app
Java是一种广泛应用的高级编程语言,可以用于开发各种软件和应用程序,包括手机应用程序。对于一个初学者,学习Java编程需要一定的时间和耐心。要开发一款自己的手机应用程序,需要具备Java开发基础、了解Android平台开发、和学习相关的开发工具和技能。J
2023-05-30
©2015-2021 自建app开发平台 www.appbyme.cn 蜀ICP备17005078号-1