鱼C论坛

 找回密码
 立即注册
查看: 1453|回复: 3

[作品展示] 一个能帮助你背单词的程序 V3.0

[复制链接]
发表于 2022-2-11 09:59:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
上一个版本:传送门


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

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

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

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

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

  13.     return button_dict

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

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

  34. def over(word_list,now_heavy_list,heavy_list): #更新是否全部背完的列表
  35.     finish = ["" for i in range(len(word_list))]
  36.     for each in zip(now_heavy_list,heavy_list,range(len(word_list))):
  37.         if each[0] >= each[1] or now_heav_list[each[2]] >= max_heav:
  38.             finish[each[2]] = True
  39.         else:
  40.             finish[each[2]] = False
  41.     return finish


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


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

  45. heavy = 2 #设置默认每个要背出多少才算背会#######################可自行更改
  46. heavy_list = [heavy for i in range(len(word_list))] #默认每个要背出的次数列表

  47. now_heavy = 0 #设置每个默认已背出的次数#######################可自行更改
  48. now_heavy_list = [now_heavy for i in range(len(word_list))] #默认每个已背出的次数列表


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

  50. now_heav = 0 #设置每个默认已背的次数#######################可自行更改
  51. now_heav_list = [now_heav for i in range(len(word_list))] #默认每个已背的次数列表


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


  53. finish = over(word_list,now_heavy_list,heavy_list)



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

  61.             button_dict = make_button(ranswer,mean_list)


  62.             #打印题目部分
  63.             if I == 1 and first_know[i] == True:
  64.                 question(button_dict,guess,choose = 1) #打印判断题
  65.             else:
  66.                 question(button_dict,guess,choose = 0) #打印选择意思题

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


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

  83.                 if check_first_question(button_dict,answer,ranswer): #如果猜对
  84.                     now_heavy_list[i] += (heavy_list[i] - now_heavy_list[i]) #直接将此单词设为会了
  85.                     print("答对了!")
  86.                 else: #如果没猜对
  87.                     print("答错了!")
  88.                
  89.             else:
  90.                 if check_first_question(button_dict,answer,ranswer): #如果猜对
  91.                     now_heavy_list[i] += 1 #增加答对的次数
  92.                     if I == 0:
  93.                         first_know[i] = True #设置此单词第一次提问时就会了
  94.                     print("答对了!")
  95.                 else: #如果没猜对
  96.                     print("答错了!")


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

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

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


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

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

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

复制代码


制作不易,喜欢的话,就给个好评,评个分吧!

最后,祝大家新年快乐,寒假作业不被老师检查......

评分

参与人数 4荣誉 +10 鱼币 +9 收起 理由
ckblt + 1 + 1 鱼C有你更精彩^_^
YYL爱吃小甲鱼 + 5 + 5 真的很有用
shiyouroc + 1 鱼C有你更精彩^_^
小伤口 + 3 + 3 不是vip,只能评分这一点了

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-11 09:59:50 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-11 10:58:40 | 显示全部楼层
支持继续更新,到时候希望还能做一个界面。
建议:用户如果写出d选项之类的,能够提示没有这个选项


评分

参与人数 1鱼币 +5 收起 理由
python爱好者. + 5 谢谢评分

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 22:03:10 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 10:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表