{"id":13670474,"url":"https://github.com/seonon/knockdown","last_synced_at":"2026-01-17T07:38:20.895Z","repository":{"id":45559463,"uuid":"141805413","full_name":"seonon/knockdown","owner":"seonon","description":"答题小程序 - 自定义题库","archived":false,"fork":false,"pushed_at":"2019-10-25T09:10:32.000Z","size":1281,"stargazers_count":289,"open_issues_count":3,"forks_count":51,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-27T13:37:21.962Z","etag":null,"topics":["weapp"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seonon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-21T11:14:38.000Z","updated_at":"2025-04-19T17:37:03.000Z","dependencies_parsed_at":"2022-07-17T06:00:40.601Z","dependency_job_id":null,"html_url":"https://github.com/seonon/knockdown","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/seonon/knockdown","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonon%2Fknockdown","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonon%2Fknockdown/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonon%2Fknockdown/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonon%2Fknockdown/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seonon","download_url":"https://codeload.github.com/seonon/knockdown/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonon%2Fknockdown/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28504356,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["weapp"],"created_at":"2024-08-02T09:00:43.002Z","updated_at":"2026-01-17T07:38:20.876Z","avatar_url":"https://github.com/seonon.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# 将题目装进微信\n\n每个人都有微信，每个人都随身带着微信，微信小程序提供了一个快速便捷编写程序的选项。\n最近要参加一个竞赛，有官方题库分发下来，为了利用零碎的时间熟悉题目，我做了这个小程序，随时随地的背题。题库是独立的，我把小程序分享出来，只要制作自己的题库，任何人都可以制作自己的答题、背题小程序\n\n## 程序界面及特性\n\n主要有两个界面，主界面上选择练习方式，问题界面答题、背题。目前支持顺序学习，乱序学习和学习收藏的问题。\n\n### 界面\n\n![Home](https://raw.githubusercontent.com/seonon/knockdown/master/doc/images/home.PNG)\n![Picture Support](https://raw.githubusercontent.com/seonon/knockdown/master/doc/images/picture.PNG)\n![Favorite](https://raw.githubusercontent.com/seonon/knockdown/master/doc/images/favorite.PNG)\n\n### 特性\n\n1. 记录答题进度，使用local storage存储答题的进度\n2. 乱序答题\n3. 收藏题目，重点复习\n4. 题目完全放在本地，免除服务端开发，快速部署\n5. 提供脚本将文本文件格式的题目转化为题库，图片使用特殊的标记添加\n\n## 具体使用\n\n一共分三步：\n\n1. 准备题库\n2. 使用微信开发者工具调试\n3. 预览小程序/上传小程序，开始背题\n\n### 准备题库\n\n\n我提供了一个Python脚本，来将文本格式的题目解析为js格式的题库，即/scripts/parse.py。\n\n#### 处理题目\n\n首先将原始题目保存为文本，然后使用该脚本将其解析为题库\n该脚本对格式要求不高，以下几种题目结构都能正确识别\n\n```python\n# 题目和选项在一行\n1. 哪个小程序可以快速背题？A. KnockDown B. GreatChinaDream\n# 题目和选项不在一行\n1. 哪个小程序可以快速背题？\nA. KnockDown B. GreatChinaDream\n# 选项多行\n1. 哪个小程序可以快速背题？\nA. KnockDown\nB. GreatChinaDream\n```\n\n⚠️注意事项\n\n1. 题目编号和题干、选项字母和选项内容之间必须有分隔符号，目前支持的分隔符号有.，。和空格\n2. 新的题目必须从行首开始，且题目必须有编号，且编号后必须要分隔符号\n3. 选项必须是大写字母，即A，B，C...Z，选项后必须有分隔符号\n4. 如果题干或选项中有大写字母，务必确保该大写字母后没有分隔符号，以免错误的解析为选项\n\n#### 处理图片\n\n若原始题目中有图片，有两种处理方式：\n\n1. 将图片保存在小程序资源文件夹中，但是小程序的大小被限制在2M，图片太多的话就不能使用这种方式处理了\n2. 上传到图片CDN上，选择哪个CDN取决于个人选择，[SM.MS](https://sm.ms/)是比较简便的选择\n\n不管那种处理方式，都需要把图片的地址按照图片标记方式插入到题目的文本文件中，标记语法为\n\n```html\n\u003cpicture src=https://i.loli.net/2018/07/21/5b52ead65f0b2.png\u003e\n或者\n\u003cpicture src=\"https://i.loli.net/2018/07/21/5b52ead65f0b2.png\"\u003e\n```\n\n需要注意的是，图片一定要插在题干和选项之间\n\n```html\n1. 下图所示是哪个小程序？\n\u003cpicture src=https://i.loli.net/2018/07/21/5b52ead65f0b2.png\u003e\nA. KnockDown B. GreatChinaDream\n\u003c!--\u003e本地图片存储，路径必须是相对路径\u003c--\u003e\n1. 下图所示是哪个小程序？ \u003cpicture src=../../resource/avatar.png\u003eA. KnockDown B. GreatChinaDream\n```\n\n#### 答案\n\n答案有两种处理方式，第一种，答案在题目文件中，在这种情况下，答案需要出现在选项后面，即：\n\n```python\n1. 哪个小程序可以快速背题？A. KnockDown B. GreatChinaDream A\n# 或\n1. 哪个小程序可以快速背题？A. KnockDown B. GreatChinaDream \nA\n```\n\n第二种，提供另外的答案文本文件，答案的组织没要求，解析脚本会顺序的顺序读出文件中所有大写字母，并在读取题目文件的过程中动态的将这些选项依次的匹配上去。\n\n⚠️注意事项\n\n1. 如果指定了答案文件，题目中就不能有答案，且答案文件中选项个数和题目数一定要匹配\n\n```python\n# 答案文件组织\n1-5 ABDFA\n6-10 BDACA\n11-15 DEAFD   CCDCB\n1-5 ABDFA\n6-10 BDACA\n DEAFD  16-20 CCDCB\n1-5 ABDFA\nB\nDA\nCA\n11-15 DEAFD  16-20 CCDCB\n```\n\n#### 解析脚本的使用\n\n该脚本使用python编写，需要保证电脑上安装有python，python2.7和python3均支持。\n\n##### 脚本帮助\n\n```shell\n$ python parse.py -h\n# usage: parse.py [-h] [-a ANSWER_SHEET] rawfile output\n# \n# positional arguments:\n#   rawfile               text file contains questions \n#   output                output filename\n# \n# optional arguments:\n#   -h, --help            show this help message and exit\n#   -a ANSWER_SHEET, --answer_sheet ANSWER_SHEET\n#                         add a answer sheet if the answers are not included in\n#                         the text question file\n```\n\nrawfile即题目文本文件，output为输出文件，请指定为.js格式。可选参数answer_sheet即答案文件。\n具体使用方式如下：\n\n```python\n# 答案在题目中\npython parse.py questionsetwithanswer.txt res.js\n# 答案不在题目中，这时必须指定答案文件\npython parse.py questionsetwithoutanswer.txt res.js -a answser_sheet.txt\n```\n\n### 使用微信开发者工具调试\n\n小程序上手请参考[微信小程序](https://developers.weixin.qq.com/miniprogram/dev/index.html).\n\n#### 替换题库\n\n使用上一步生成的题库替换原来题库，题库位置为/resource/res.js。\n\n#### 将图片复制到资源目录下\n\n如果使用本地图片存储，需要将图片放到资源目录下\n\n#### 预览/上传\n\n下面就可以愉快的使用了！","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseonon%2Fknockdown","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseonon%2Fknockdown","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseonon%2Fknockdown/lists"}