为了背单词,我花了两天写了一款背单词小程序

前言

       “要是考试不考英语就好了”
        哎,提起英语,都是伤心事。有时候严重怀疑自己不是一块学习英语的料。单词背了忘,忘了背,背了又忘。考试之前看啥单词都会,一上考场:这单词啥意思?
        前两个月又开始了痛苦的英语学习。起步:背单词。开始还是按照以前的方法,每天规定背多少个单元,以此类推…当背完之后,测试自己的单词数。懵了,明明背过的单词,依然记不住…
        总结失败经验,百度:为什么单词记不牢?发现:艾宾浩斯遗忘曲线[了解一点,没有实践过]。为了验证艾宾浩斯遗忘曲线是否有效,海轰按照遗忘表格背了一个月单词[中间有几天没有坚持住]点开测试网站,哈哈,单词量居然还真的提高了[具体提高多少就不说了,不然就可以猜出一共会多少个词了]
        至今也用过几款单词APP,很好,但是感觉不适合自己。
        不如,给自己写个吧o( ̄︶ ̄)o    希望实现的功能如下:

  • 利用艾宾浩斯遗忘曲线记忆单词,统计每个单词自己错误的次数,便于复习
  • 界面尽量简单,好操作一点
  • 背诵一遍单词后,需要对之前的单词进行复习

程序截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

过程

1、确定数据结构

  • 首先,需要一个集合记录单词,组成词库,一个集合记录用户的个人信息、背诵情况,便于之后数据分析。

2、确定功能

  • 明确小程序应该具备的一些功能:背诵单词、复习、单词分析…起初开发一个测试版本,用于验证基础功能是否可以实现,然后在后续的版本慢慢更新新功能。
  • 作为第一个版本,验证基础功能: 读取艾宾浩斯遗忘表格,确定当天需要新学、复习的单词章节
  • 对于在背诵单词过程中,不认识的单词需要进行复习,一直到了解其意思为止//利用while循环
  • 统计单词信息:每个单词错误次数、当天背诵单词数量、单词章节//为后续版本作基础

3、具体思路
        对于艾宾浩斯遗忘表格,开始想的办法是将其存为一张二维表。首次加载界面时,获取当前日期,与数据库用户日期进行作差,计算出当天应该背诵复习的章节。之后不知道咋了,一直报错,不知道哪里出了问题。后面只好采用了比较笨的一种方法:一维数组存储。部分代码如下:

  form_18: [3,11,14,16,17,18],form_19: [4,12,15,17,18,19],form_20: [5,13,16,18,19,20],form_21: [6,14,17,19,20,21],form_22: [7,15,18,20,21,22],form_23: [8,16,19,21,22,23],form_24: [9,17,20,22,23,24],

        如何背诵单词呢?这里海轰采用的方法是:根据计算出的章节数组,依次获取对应章节里面的单词,然后再依次循环显示在界面上。背诵单词,首先界面只会显示一个单词,用户需要根据自己是否认识其含义,选择"不认识"or"认识"。选择"不认识",显示其含义,并将其单词信息加入复习队列,错误次数+1;选择"认识",则读写下一个单词。在学习完今日的单词之后,再开始对不认识的单词进行重温,必须将单词意思全部了解方可结束。只有不认识,则一直循环,直到认识为止。//是不是有点狠

fontFamily: 'HaihongPro',//字体名字loaded: false,//判断字体加载是否完成first_words:1,//递增 用于翻转数组words:"",//一章节的单词words_length:0,//一章节单词的个数word:"",//当前单词isshowexplain:false,//是否展现单词意思 默认:falseid_word:0,//一个章节中单词的位置 第几个 初始:0id_day_length:0,//背诵表数组的长度id_day: "",//背诵表数组review_words:[],//不认识的单词isreview:false,//是复习单词吗 默认:不是ishaveload_reviewwords:false,//是否已经加载不认识的单词isknow:true,// 复习模式 判断是认识的next 还是不认识的next 默认:trueisrv:false,isexist:false,//是否含有用户openid:"",//用户openidtoday_wordnums:0,//今日背诵单词数量review_wordnums:0,//今日复习单词数量today_chapter:1,//今日单词章节result:false,

         从思路上看,难度不大。开始的时候海轰也是这样认为的。然而,真正自己开发的时候,完了,太难了。其他不论是"认识"/“下一个”,方法都是一样的,难就难在如何在一个方法中区分不同的情况。比如,认识有新学时候的认识,也有复习时候的认识。逻辑性比较强,这里花费的时间最多!部分demo代码如下:

// 下一个单词nextword:function(){wx.vibrateShort({})var k=this// 背诵新单词+复习前几天的单词if(k.data.isreview==false){// 没有背完一个章节if (k.data.id_word < k.data.words_length - 1) {k.setData({id_word: k.data.id_word + 1,word: k.data.words[k.data.id_word + 1],isshowexplain: false,})}// 背完了该章节else {// 所有章节都背完了if (k.data.first_words == k.data.id_day_length+2) {console.log("所有章节背完")wx.showToast({title: '背完啦\(^o^)/~',icon: "none",mask:true})// 当今天新单词背诵完毕 立刻复习今天的单词k.setData({isshowexplain:false,isreview:true,isrv:true,       })}// 获取下一章节 单词else {wx.showLoading({title: '下一章节',mask: true})console.log("本章节背完了,背下一个章节了")// 获取下个一个背诵章节的单词db.collection('words').where({chapter: parseInt(k.data.id_day[k.data.id_day_length - k.data.first_words])}).get().then(res => {console.log(res.data[0])//这一天第一个需要背诵的章节wx.hideLoading()k.setData({words: res.data[0].words,//第一章节的所有单词words_length: res.data[0].words.length,//第一章节单词数量word: res.data[0].words[0],//第一章节第一个单词first_words: k.data.first_words + 2,id_word: 0,//isshowexplain: false,review_wordnums: k.data.review_wordnums + res.data[0].words.length})}).catch(err => {wx.showToast({title: '出错啦',icon: "none",mask: true})})}}}// 复习今天背诵的单词else{// 不需要复习if(k.data.review_words.length==0){wx.showLoading({title: '\(^o^)/~',})var time = util.formatTime(new Date())// 如果记录中存在该用户console.log(k.data.isexist)if (k.data.isexist==="true"){console.log("更新数据x")console.log(time)console.log(k.data.today_chapter)console.log(k.data.today_wordnums)console.log(k.data.openid)// 调用云函数 积分减一wx.cloud.callFunction({// 要调用的云函数名称name: 'HHPro_functions',// 传递给云函数的event参数data: {function_name: "update_words",openid: k.data.openid,last_time: time,today_chapter: k.data.today_chapter,//今日章节words_nums:k.data.today_wordnums,//已经背诵单词总数}}).then(res => {console.log("更新数据")k.setData({result:true})wx.hideLoading()}).catch(err => {console.log(err)})}// 不存在else{db.collection('study_user').add({// data 字段表示需新增的 JSON 数据data: {study_openid:k.data.openid,//用户idfirst_time:time,//第一次背诵单词的时间last_time:time,//最后一次背诵的时间words_nums:k.data.today_wordnums,//已经背诵单词总数today_chapter:k.data.today_chapter,//今日章节days:1,//累积天数}}).then(res => {console.log(res)k.setData({result: true})wx.hideLoading()}).catch(console.error)}}else{// 加载需要复习的单词if (k.data.ishaveload_reviewwords == false) {k.setData({words: k.data.review_words,//今天不认识单词集合words_length: k.data.review_words.length,//第一章节单词数量word: k.data.review_words[0],//第一章节第一个单词id_word: 0,//isshowexplain: false,ishaveload_reviewwords: true,isrv: false,})}// 实现 复习单词中的 下一个 功能else {console.log(k.data.id_word)console.log(k.data.review_words.length)console.log(k.data.review_words)if (k.data.review_words.length == 1 || k.data.review_words.length == 0) {console.log("复习完成")wx.showLoading({title: '复习完成\(^o^)/~',})var time = util.formatTime(new Date())// 如果记录中存在该用户if (k.data.isexist === "true"){// 调用云函数 积分减一wx.cloud.callFunction({// 要调用的云函数名称name: 'HHPro_functions',// 传递给云函数的event参数data: {function_name: "update_words",openid: k.data.openid,last_time: time,today_chapter: k.data.today_chapter,//今日章节words_nums: k.data.today_wordnums,//已经背诵单词总数}}).then(res => {console.log("更新数据")k.setData({result: true})wx.hideLoading()}).catch(err => {})}// 不存在else {db.collection('study_user').add({// data 字段表示需新增的 JSON 数据data: {study_openid: k.data.openid,//用户idfirst_time: time,//第一次背诵单词的时间last_time: time,//最后一次背诵的时间words_nums: k.data.today_wordnums,//已经背诵单词总数today_chapter: k.data.today_chapter,//今日章节days: 1,//累积天数}}).then(res => {console.log(res)k.setData({result: true})wx.hideLoading()}).catch(console.error)}}// 依然存在需要复习的单词else {// 删除当前单词k.data.review_words.splice(0, 1)k.setData({word: k.data.words[0],isshowexplain: false,})}}}}},

4、问题反馈

  • 第一个版本的demo写完以后,上线测试了一下。bug非常多!
  • 页面自动滚动、单词显示不全
  • 新用户无法读取最新单词库 用户无法更新
  • 单词未背完,直接返回,程序会崩溃 单词数量出现异常
  • 之后根据bug,一个一个找原因。后面还是慢慢找到了一些原因,比如啥变量声明错误、程序异常终止… 当然目前小程序上的背单词模块部分bug已经修复,但是依然有很多bug存在,只有在今后的版本更新再修复了//最近时间不太充足

5、收获
        其实很久没有写过小程序了,很多语法都忘得差不多了。这几天稍微有点空,加上前段时间被英语折磨,一时心血来潮,就写了这个模块,希望以后有时间再慢慢完善吧。
         这次觉得收获最大的事,学会了动态加载字体吧。以前对于字体这块,觉得没有啥,能看就行。后面发现单词如果还是默认字体的话,有点不好看。然后就不断百度,找方法。大多数的方法就是将字体库加载到本地或者服务器,再使用。加载到本地这个,不太行,一个字体都几M了,小程序代码限制在2M以内[近期内测,小程序最多16M];部署到服务器,不占空间,但是延迟大,用户体验不是很好。综合一些因素,选择了后者,部署在云服务器吧,自己用用也是可以了。[bug:部分手机无法加载新字体]
         虽然目前自己的背单词模块使用体验不是很好,但是毕竟是自己一点一点写出来的,非常喜欢!!

总结

         "巧记单词"模块已经上线小程序,感兴趣的小伙伴可以体验体验【小程序:海轰Pro,在"创意小屋"中】
        目前还处在测试阶段,bug,肯定是非常多,以后有时间再慢慢更新吧。之后版本会依次加入单词默写、单词错误次数分析等功能。程序是一时头脑发热写的,很多地方写的不好,大佬勿喷。开发差不多用了一个下午+一个晚上,时间跨度2天。
        如果有小伙伴发现bug或有什么好的提议,欢迎留言,谢谢♪(・ω・)ノ
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33552.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大量背单词有用吗?

前言 从三年级开始接触英语&#xff0c;到今为止已经14年了&#xff0c;可是自己的英语水平虽不至于茫然无知&#xff0c;可是真正做到和老外进行交流&#xff0c;还是有一定的困难的。不仅是老外&#xff0c;和小伙伴进行topic的时候&#xff0c;也有卡壳的时候&#xff0c;类…

单词背记系统

题目 B4&#xff1a;基于关键词的文本排序检索系统 一、 课题内容和要求 题目 B4&#xff1a; &#xff08;一&#xff09;课题内容 “背单词—个性化背词”是背诵英语单词的软件。用户可以根据自己的需求 导入需背诵的词库&#xff0c;并可以编辑自己的词库。背单词时有两种…

背单词超实用的微信小程序来了

如果你还找不到快速背单词的工具&#xff0c;查询单词最便捷的工具&#xff0c;那你得赶紧了&#xff0c;自己独自开发到上线得微信小程序来了。

分享一款好用的电脑背单词软件

推荐一下这款单词风暴&#xff0c;虽然看起来很老了&#xff0c;但是好用&#xff0c;功能多。 下载地址 单词风暴免费版下载_官方免费版_单词风暴官方网站 (wordstorming.com) 下面是主界面 需要登陆ID:285804755-QGJTE-HCUMQ 下面是词库 不过我最喜欢的功能是这里面可以…

chatgpt赋能python:使用Python编写计算器

使用Python编写计算器 你是否曾经被手头上的计算器的功能所限制&#xff1f;或者需要一种高级计算器来解决你的问题&#xff1f;如果是这样的话&#xff0c;那么你可以使用Python编写一个自己的计算器。Python是一种功能强大而又容易入门的编程语言&#xff0c;可以用于各种各…

chatgpt赋能python:Python计算器代码实现——简单又实用

Python计算器代码实现——简单又实用 Python 作为一门高级编程语言&#xff0c;具有易读易写的特性&#xff0c;其语法简单&#xff0c;易于上手&#xff0c;受到越来越多的程序员和爱好者的喜欢。在Python中&#xff0c;实现计算器功能也是非常简单的一件事情。 为了方便大家…

chatgpt赋能python:Python计算器:简单易用的数学工具

Python计算器&#xff1a;简单易用的数学工具 作为一种脚本语言&#xff0c;Python被广泛用于数据分析、Web开发、机器学习等领域&#xff0c;它也是一款非常适合编写计算器的语言。Python计算器作为一款基于Python语言编写而成的数学工具&#xff0c;它不但可以快速进行各种基…

chatgpt赋能Python-python函数计算器

简介 Python是一种高级编程语言&#xff0c;它在数据科学和机器学习等领域非常流行。但是&#xff0c;很多人可能不知道它也可以用来编写简单的函数计算器。 在本文中&#xff0c;我们将介绍一些基本的Python函数&#xff0c;并教你如何使用它们来编写一个简单但强大的函数计…

chatgpt赋能python:Python计算器-让数学计算更简单

Python计算器- 让数学计算更简单 Python是一种广泛使用的编程语言&#xff0c;它有许多功能&#xff0c;从数据分析到人工智能应用。今天&#xff0c;我们来看看如何使用Python计算器来进行数学计算&#xff0c;这样你就可以处理复杂的数字问题并轻松地获得正确的结果。 Pyth…

chatgpt赋能python:Python简单计算器代码

Python简单计算器代码 Python是一种高级的编程语言&#xff0c;被广泛用于开发各种类型的应用程序&#xff0c;包括计算器应用程序。在本文中&#xff0c;我们将介绍Python简单计算器代码的实现和用法。 Python简单计算器代码介绍 一个简单的计算器能够实现基本的算术运算&a…

熵权法原理及应用

熵权法原理及应用 一、熵权法简述 熵&#xff1a;起源于物理学&#xff0c;表示物质微观热运动时的混乱程度&#xff0c;在信息论中是衡量系统无序程度度量值。 熵权法&#xff1a;根据信息熵的定义&#xff0c;对于某项指标&#xff0c;可以用熵值来判断某个指标的离散程度&…

微信常用接口

微信常用接口 一、公众号 1、准备工作 公众号的帐号及密码 公众号的AppID&#xff0c;AppSecret AppID&#xff1a; ​ 开发者ID是公众号开发识别码&#xff0c;配合开发者密码可调用公众号的接口能力。 AppSecret&#xff1a; ​ 开发者密码是校验公众号开发者身份的密码&a…

如何利用chatgpt进行深度学习

ChatGPT云炬学长 1 人赞同了该文章 我们都知道可以用chatgpt来进行学习&#xff0c;但是具体深入到某一个领域的时候&#xff0c;就会不知所措&#xff0c; 正所谓隔行如隔山&#xff0c; 在没有chatgpt之前&#xff0c;我认为入局某一个行业最好的办法就是知识付费&#x…

国内大模型争霸赛,你最看好哪家?这是你心目中的大模型排名吗?

知乎&#xff1a;绝密伏击地址&#xff1a;https://www.zhihu.com/question/598051793/answer/3034073973深度学习自然语言处理 分享 进NLP群—>加入NLP交流群 OpenAI Vs Google 目前大模型 top2 应该就是 OpenAI 的 GPT-4&#xff0c;以及谷歌的PALM-2。这两家公司早已布局…

OpenAI 创始人再签联名信,一句话声明简短有力AI或引发灭绝风险

作者 | 刘燕&#xff0c;核子可乐 全球 AI 大牛又签署一封公开信&#xff1a; AI 或将引发“灭绝风险” 本周二&#xff0c;人工智能安全中心&#xff08;CAIS&#xff09;发布了一份由 OpenAI 及 DeepMind 高管、图灵奖获得者及其他 AI 研究人员签署的简短声明&#xff0c…

大模型激战正酣,王坚能否带领阿里云王者归来?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 5月11日&#xff0c;有消息称&#xff0c;十年前卸任阿里云总裁的王坚&#xff0c;将于近日以全新职位&#xff0c;全职加入阿里云。公开资料显示&#xff0c;作为阿里云创始人&#xff0c;王坚在2009年创办阿里云&#xff…

吴恩达杨立昆亲自下场开直播:GPT-5不能停!

编&#xff5c;梦晨 源&#xff5c;量子位 大模型研究不能停&#xff01;吴恩达和LeCun为了这事儿&#xff0c;甚至亲自搞了场直播。毕竟再不出手&#xff0c;事态眼看着越来越严重了&#xff1a;马斯克等人叫停GPT-5研发的事态再次升级&#xff0c;已从千人联名发展到超过135…

GPT-5不能停!吴恩达直播回怼马斯克:汽车都还没发明,要什么安全带?

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年3月份热门报告合集 【限时免费】ChatGPT4体验&#xff0c;无需翻墙直接用 ChatGPT&#xff1a;AI模型研究框架 ChatGPT团队背景研究报告 ChatGPT的发展历程、原理、技…

GPT-5 不能停!吴恩达 LeCun 直播回怼马斯克:汽车都还没发明,要什么安全带

转自&#xff1a;量子位 | 公众号 QbitAI 大模型研究不能停&#xff01; 吴恩达和LeCun为了这事儿&#xff0c;甚至亲自搞了场直播。毕竟再不出手&#xff0c;事态眼看着越来越严重了&#xff1a; 马斯克等人叫停GPT-5研发的事态再次升级&#xff0c;已从千人联名发展到超过135…

GPT-5 不能停!吴恩达回怼马斯克:汽车都还没发明,要什么安全带?

转自&#xff1a;量子位 | 公众号 QbitAI 大模型研究不能停&#xff01; 吴恩达和LeCun为了这事儿&#xff0c;甚至亲自搞了场直播。毕竟再不出手&#xff0c;事态眼看着越来越严重了&#xff1a; 马斯克等人叫停GPT-5研发的事态再次升级&#xff0c;已从千人联名发展到超过135…