python爱好者. 发表于 2022-2-11 09:59:05

一个能帮助你背单词的程序 V3.0

上一个版本:传送门


此版本更新了两处:
1.提单词提的更加高效了,不会像之前一样 —— 遇到几个没达到要求的,就卡在那里,直到达到位置 —— 加了阀值
2.增加提词方式 —— 根据自己的情况选择
3.总体来看,更加精简,因为定义了许多函数

小缺陷:
1.在回答 "不会" 或 回答的错了时,不会返回对的答案{:10_284:}
2.老生常谈的话题{:10_262:}   —— 还未丰富词库
3.老生常谈的话题{:10_245:}—— 还不能分多批背诵

废话不多说,上代码:
import random

def make_button(ranswer,mean_list): #生成选项
    number0 = mean_list.index(ranswer) #计算出正确翻译 ranswer 在翻译列表 mean_list 里的索引
    number1 = random.randint(0,len(mean_list) - 1) #生成出除 number0 之外的随机索引
    while number1 == number0:
      number1 = random.randint(0,len(mean_list) - 1)
    number2 = random.randint(0,len(mean_list) - 1) #生成除 number0 和 number1 之外的随机索引
    while number2 == number0 or number2 == number1:
      number2 = random.randint(0,len(mean_list) - 1)

    button = ,mean_list,mean_list] #生成答案与假答案的混合列表
    button_list = random.sample(range(0,3),3) #生成将 button 列表的引用索引打乱后的顺序
    button_dict = {i:button)] for i in zip(,["A","B","C"])} #合成随机提问选项

    return button_dict

def check_answer(): #检查答案是否合法
    global answer
    while answer.isspace() or answer == "": #规范输入
      answer = input("请选择正确的一项:")
    answer = answer.strip() #去掉选项两边可能存在的空格
    answer = answer.upper() #将用户输入的选项变成大写
   
def question(button_dict,guess,choose): #打印题目
    if choose == 0: #打印选择意思题
      for each in button_dict.items():
            print(each,".",each)
    elif choose == 1:
      print(f"单词:{guess}")
      for each in zip(["A","B"],["会","不会"]):
            print(each,".",each)

def check_first_question(button_dict,answer,ranswer):
    if button_dict.get(answer) == ranswer: #如果猜对
      return True
    else:
      return False

def over(word_list,now_heavy_list,heavy_list): #更新是否全部背完的列表
    finish = ["" for i in range(len(word_list))]
    for each in zip(now_heavy_list,heavy_list,range(len(word_list))):
      if each >= each or now_heav_list] >= max_heav:
            finish] = True
      else:
            finish] = False
    return finish


word_list = ["nice","good","wow","cow","car","jar","mud","you","human","wine"] #可自行添加
mean_list = ["棒的","好的","表示吃惊","奶牛","车","坛子","泥土","你","人类","红酒"] #可自行添加


jian = 1 #设置每道题之间是否插入间隔#######################可自行更改

heavy = 2 #设置默认每个要背出多少才算背会#######################可自行更改
heavy_list = #默认每个要背出的次数列表

now_heavy = 0 #设置每个默认已背出的次数#######################可自行更改
now_heavy_list = #默认每个已背出的次数列表


max_heav = 3 #设置每个单词最多的背诵次数#######################可自行更改

now_heav = 0 #设置每个默认已背的次数#######################可自行更改
now_heav_list = #默认每个已背的次数列表


first_know = ["" for i in range(len(word_list))] #设置第一次就会的单词


finish = over(word_list,now_heavy_list,heavy_list)



I = 0
while not all(finish): #如果没有结束背诵任务
    i_list = random.sample(range(len(word_list)),len(word_list)) #不重复的随机抽选要提问的单词的先后顺序
    for i in i_list:
      if finish == False: #如果这个单词还没有背完
            ranswer = mean_list #设置正确的翻译
            guess = word_list #设置要提问的单词

            button_dict = make_button(ranswer,mean_list)


            #打印题目部分
            if I == 1 and first_know == True:
                question(button_dict,guess,choose = 1) #打印判断题
            else:
                question(button_dict,guess,choose = 0) #打印选择意思题

      
      
            #向用户提问选项部分
            if I == 1 and first_know == True: #如果是判断题
                answer = input("请节和你的自身情况给予回答:")
            else: #如果是选择题
                answer = input(f"请选择单词 {guess} 的意思在上方选项中的最贴切的一项:")
               
            check_answer() #强制用户合法输入


            #判断部分
            now_heav_list += 1
            if I == 1 and first_know == True: #如果是判断题
                question(button_dict,guess,choose = 0) #不管上一个判断题选择的是 A 或 B ,都直接再提选择题
               
                answer = input(f"请选择单词 {guess} 的意思在上方选项中的最贴切的一项:")
                check_answer() #强制用户合法输入

                if check_first_question(button_dict,answer,ranswer): #如果猜对
                  now_heavy_list += (heavy_list - now_heavy_list) #直接将此单词设为会了
                  print("答对了!")
                else: #如果没猜对
                  print("答错了!")
               
            else:
                if check_first_question(button_dict,answer,ranswer): #如果猜对
                  now_heavy_list += 1 #增加答对的次数
                  if I == 0:
                        first_know = True #设置此单词第一次提问时就会了
                  print("答对了!")
                else: #如果没猜对
                  print("答错了!")


            #遮挡部分
            if jian:
                for i in range(70): #打印间隔
                  print(f"{'|':^156}")
                print()

      #更新 是否结束背诵任务
      finish = over(word_list,now_heavy_list,heavy_list)

      if all(finish): #如果都结束了,退出循环
            break
      
    I += 1 #更新目前提的遍数
   


#计算尾部空格数量部分
max_long_word_length = len(max(word_list,key = lambda x : len(x))) #计算出单词列表 word_list 中最长的一个单词的长度
word_with_space = [(max_long_word_length * 3) - len(each) for each in word_list] #计算出每个单词后面跟着的空格数量列表# 3 是可更改的,最小为 2

#向用户输出结尾部分
print("\n" * 3) # 3 是可更改的
print("你已背完了这些单词:{}!".format(",".join(word_list)))

#输出每个单词的正确率部分
True_list = / (now_heav_list) if (now_heav_list) > 0 else 1:.1%}" for i in range(len(word_list))] #每个单词的正确率列表
print("你做题时对这些单词分别的正确率:")
for each in zip(word_list,True_list,range(len(word_list))):
    space = " " * word_with_space]
    print(f"单词{each}{space}正确率:{each}")



制作不易,喜欢的话,就给个好评,评个分吧!
{:10_257:} {:10_297:} {:10_281:} {:10_298:}
最后,祝大家新年快乐,寒假作业不被老师检查......{:10_288:}

python爱好者. 发表于 2022-2-11 09:59:50

@shiyouroc

小伤口 发表于 2022-2-11 10:58:40

支持继续更新,到时候希望还能做一个界面。
建议:用户如果写出d选项之类的,能够提示没有这个选项{:9_236:}

hornwong 发表于 2022-2-12 22:03:10

{:5_95:}
页: [1]
查看完整版本: 一个能帮助你背单词的程序 V3.0