教小学生学英语系统(一次课设项目)

md每次都烦csdn下资源,本着开源知识共享原则,本文全部代码、文件已上传GitHub,点此获取

设计要求:

屏幕上随机出现一个汉语单词,英语单词,汉语词组,英语词组或一短句提示小学生给出相应答案,答错了要提示要求重新输入,直到答对为止。要统计给分,且累计,够一定分数后可进级,即从单词到词组,从词组到短句。同样,也可降级。起步阶段可各选30个,软件可扩充,即扩大词库的容量。

分步实施:

  1. 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
  2. 完成最低要求:能教单词,并有统计功能,即一次答对的成功率为90%以上后可晋级;
  3. 进一步要求:完成词组和短语的问答,也有晋级功能。

设计内容

1. 程序的总体设计

首先,针对于该课设的要求功能,我们将该英语学习系统划分为几个功能模块,如词汇类型的识别、增加、查询、删除、学习等。按照不同的功能要求进行设计各子函数。其中可以通过词汇类型的识别以更好的添加词汇并分组。即各函数模块相互独立但又有一定的功能嵌套。本程序主要设计主函数和其他功能的子函数,包括运行时的主菜单,即首先函数运行时会弹出一个主菜单,然后输入对应的数字选择操作,运行不同的函数命令。

2. 数据结构

本课设系统的数据结构主要为数组,数组分为三组,分别由于存储单词、词组、短句。这三组数据都通过txt文件的形式保存在项目文件中。

3. 函数的定义

def judge_book(word): 用以判断英文字符串的类型

def add_new(e, z): 添加新的单词、词组、短句到对应的文件中

def del_new(e): 删除,从单词、词组、短句分块查找

def show_new(): 查看所有单词、词组、短句

def search_zh(eng): 查询英文的汉语意思,分块查找

def search_eng(zh): 查询汉语的英文,逐级查找匹配汉语

def recite_word(): 背单词

def main(): 主菜单

4. 运行界面设计

(其实就是打印输入输出以便于交互,一开始还以为是要界面开发,搞得我还学了点tkinter,后发现这不应该是只学了一点python基础的人能做的😓)

本设计界面友好、有良好的人机交互,具体实现方式如下:

欢迎界面:欢迎来到单词学习系统O(∩_∩)O 妈妈再也不用担心我的学习了(~ ̄▽ ̄)~。

然后打印一列“-”分割上下部分。下部分数字代号表示个功能的选择。

(1.添加生词 2.删除生词 3.查看所 4.查询生词 5.背 生 词 6.退 出)

代码如下


import random as r


def judge_book(word):  # 用以判断英文字符串的类型
    name = '单词'  # 定义一字符串变量,初值为‘单词’
    count = 0  # 空格计数器,判断词汇类型
    for tra in word:  # 如果tra等于空格 count就加1,count的值用于判断词汇类型
        if tra == ' ':
            count += 1
    if count == 0:
        name = '单词'
    elif count == 1:
        name = '词组'
    elif count >= 2:
        name = '短句'
    return name  # 返回词汇本名字(单词、词组、短句)


def add_new(e, z):  # 添加新的单词、词组、短句到对应的文件中
    eng_and_zh = e.strip() + '-' + z + '\n'  # 将英文和中文组合并换行(英-中\n)
    flag = True  # 标记,单词已存在时不进行添加操作
    book_name = judge_book(e)  # 判断字符串类型,在不同的词汇本查找
    with open(book_name+'.txt', 'r', encoding='utf-8') as f:  # 先只读查看单词是否已存在
        line = f.readlines()  # 读取所有文件行
        for index in line:  # 遍历查找
            h = index.split('-')[0]  # 以 “-” 为标志取出英文字符
            if e == h:
                print("该单词已经在单词本")
                flag = False
        if flag:  # flag 为 True 时做添加操作
            with open(book_name+'.txt', 'a+', encoding='utf-8') as file:  # a+: 附加读写方式打开
                file.writelines(eng_and_zh)  # 写入英中组合行


def del_new(e):  # 删除,从单词、词组、短句分块查找
    flag = False
    book_name = judge_book(e)  # 判断字符串类型
    with open(book_name+'.txt', 'r', encoding='utf-8') as f1:
        lines = f1.readlines()
        with open(book_name+'.txt', 'w+', encoding='utf-8') as f2:  # 新建读写,重新写入
            for line in lines:
                k = line.split('-')[0]
                if e == k:
                    flag = True
                    continue
                f2.write(line)  # 未被查找的重新写入
    if flag:
        print('删除成功!')
    else:
        print("未有该单词")


def show_new():  # 查看所有单词、词组、短句
    print("以下为单词:\n")
    with open('单词.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        for line in lines:
            line = line.strip('\n')  # 去掉行尾的换行符,以免影响观感
            print(line)
    print("以下为词组:\n")
    with open('词组.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        for line in lines:
            line = line.strip('\n')  # 去掉行尾的换行符,以免影响观感
            print(line)
    print("以下为短句:\n")
    with open('短句.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        for line in lines:
            line = line.strip('\n')  # 去掉行尾的换行符,以免影响观感
            print(line)
    print("查询成功!")


def search_zh(eng):  # 查询英文的汉语意思,分块查找
    flag = False
    book_name = judge_book(eng)  # 判断字符串类型
    with open(book_name+'.txt', 'r', encoding='utf-8') as files:
        line = files.readlines()
        for index in line:
            h = index.split('-')[0]
            if eng == h:
                print(index)
                flag = True
    if not flag:
        print("单词本里未有该单词")


def search_eng(zh):  # 查询汉语的英文,逐级查找匹配汉语
    flag = False
    with open('单词.txt', 'r', encoding='utf-8') as files:
        line = files.readlines()
        for index in line:
            o = index.split('-')[1]  # 拆分字符串,获取第二个
            if zh + '\n' == o:
                print(index)
                flag = True
    with open('词组.txt', 'r', encoding='utf-8') as files:
        line = files.readlines()
        for index in line:
            o = index.split('-')[1]  # 拆分字符串,获取第二个
            if zh + '\n' == o:
                print(index)
                flag = True
    with open('短句.txt', 'r', encoding='utf-8') as files:
        line = files.readlines()
        for index in line:
            o = index.split('-')[1]  # 拆分字符串,获取第二个
            if zh + '\n' == o:
                print(index)
                flag = True
    if not flag:
        print("单词本里未有该单词")


def recite_word():  # 背单词
    n = 0  # 答错题数
    m = 0  # 答对题数
    book_name = '单词'
    is_continue = "y"
    while is_continue == "y" or is_continue == "Y" or is_continue == "\n":
        with open(book_name+'.txt', 'r', encoding='utf-8') as wordFile:
            world_list = wordFile.readlines()
            for index in r.sample(world_list, 1):  # 随机选取一行
                bu = r.randint(0, 1)  # 记录布尔值0或1
                x = index.split("-")[bu].strip('\n')  # 随机选取英文或汉语
                y = index.split("-")[(bu + 1) % 2].replace('\n', '').replace('\r', '')  # 选取x的反
                # split分的汉语最后有个换行符,淦,我说哪里有问题,这里用 .replace('\n', '').replace('\r', '') 或 .strip('\n') 可以去掉换行符
                print("\n随机英语或汉语:")
                print(">------>   " + x)

                if bu:
                    guess = input("输入英语: ").strip()  # 防止用户误操作录入空白
                else:
                    guess = input("输入汉语: ").strip()  # 防止用户误操作录入空白

                flag = 1  # 标记,防止同一个题多次出错,影响总体正确率
                while guess != y:
                    print("对不起,不正确。")
                    if flag == 1:  # 多次出错 n 只增加一次,不重复计数
                        n = n + 1
                    flag = 0
                    rate = m / (n + m)
                    print('——>正确率:%.1f' % (rate*100), '%')
                    guess = input("继续输入:").strip()
                if guess == y:
                    print("真棒!答对了!!")
                    m = m + 1
                    rate = m / (n + m)
                    print('——>正确率:%.1f' % (rate*100), '%')
                is_continue = input("是否继续(Y/N):")
                # 判断晋级(条件:答了至少5道题,且正确率大于或等于0.9)
                if n+m >= 5 and rate >= 0.9 and book_name == '单词':
                    book_name = '词组'
                    n = m = 0  # 晋级重新计数
                    print('——恭喜晋级!——')
                elif n+m >= 5 and rate >= 0.9 and book_name == '词组':  # 判断晋级
                    book_name = '短句'
                    n = m = 0  # 晋级重新计数
                    print('——恭喜晋级!——')
                elif n+m >= 5 and rate < 0.9 and book_name == '词组':  # 判断降级
                    book_name = '单词'
                    print('——降一等级!——')
                elif n+m >= 5 and rate < 0.9 and book_name == '短句':  # 判断降级
                    book_name = '词组'
                    print('——降一等级!——')
    print("太棒了!你又完成了一次学习!下次再来哦!")


def main():  # 主菜单
    print("""
                     欢迎来到单词学习系统O(∩_∩)O
                  妈妈再也不用担心我的学习了(~ ̄▽ ̄)~ 
            -------------------------------------------
                1.添加生词     2.删除生词      3.查看所有
                4.查询生词     5.背 生 词      6.退 出
                      --------------------
    """)
    while True:
        i = int(input("输入您要选择的功能:1.添加  2.删除  3.查看  4.查询  5.背  6.退出\n"))
        if i == 1:
            e = input("输入生词的英文:")
            z = input("输入生词的中文:")
            add_new(e, z)
        if i == 2:
            e = input("输入生词的英文:")
            del_new(e)
        if i == 3:
            show_new()
        if i == 4:
            a = input("查询中文or查询英文:(e表示英文,z表示中文)")
            if a == "z":
                e = input("请输入英文单词")
                search_zh(e)
            if a == "e":
                z = input("请输入该单词中文意思")
                search_eng(z)
        if i == 5:
            recite_word()
        if i == 6:
            print("确定要退出该程序吗?")
            u = input("yes or no:")
            if u == "yes" or u == "y" or u == 'Y':
                break


main()

觉得有用请点赞或留言支持 ~

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值