谢博文pro 2023-02-10 19:31 采纳率: 50%
浏览 20
已结题

Python英语听写器为何重复报单词?

问个问题,这个程序为什么会重复报单词?能不能帮我让它不重复报单词?
代码如下:

import random

u1_words = {"guitar": "n.吉他",
            "sing": "v.唱歌",
            "swim": "v. & n.游泳",
            "dance": "v.跳舞 n.舞蹈",
            "draw": "n.画",
            "chess": "n.国际象棋",
            "play chess": "下国际象棋",
            "speak": "v.说(某种语言);说话",
            "speak English": "说英语",
            "join": "v.参加;加入",
            "club": "n.俱乐部;社团",
            "be good at ...": "擅长于……",
            "tell": "v.讲述,告诉",
            "story": "n.故事;小说",
            "write": "v.写作;写字",
            "show": "n.演出;节目",
            "or": "conj.或者;也不(用于否定句)",
            "talk": "v. & n.说话,交谈",
            "talk to ...": "跟……说",
            "kung fu": "n.(中国)功夫",
            "drum": "n.鼓",
            "play the drums": "敲鼓",
            "piano": "n.钢琴",
            "play the piano": "弹钢琴",
            "violin": "n.小提琴",
            "play the violin": "拉小提琴",
            "also": "adv.也;而且",
            "people": "n.人;人们",
            "home": "n.家;活动本部 adv.到家,在家",
            "be good with ...": "善于应付……的;对……有办法",
            "make": "v.使成为,制造",
            "make friends": "结交朋友",
            "today": "adv.在今天",
            "help (sb.) with sth.": "在某方面帮助(某人)",
            "center": "n.中心,中央",
            "weekend": "n.周末",
            "on the weekend": "(在)周末",
            "teach": "v.教;讲授",
            "musician": "n.音乐家",
            "Lisa": "莉萨(女名)",
            "Jill": "吉尔(女名)",
            "Peter": "彼得(男名)"}

"""
u2_words至u12_words在此跳过
"""

dictation_words = {}
dictationed_words = []

u1_yesno = input("Unit 1是否可被听写?(y/n)")
if u1_yesno.lower() == "y":
   dictation_words.update(u1_words)
u2_yesno = input("Unit 2是否可被听写?(y/n)")
if u2_yesno.lower() == "y":
   dictation_words.update(u2_words)
u3_yesno = input("Unit 3是否可被听写?(y/n)")
if u3_yesno.lower() == "y":
   dictation_words.update(u3_words)
u4_yesno = input("Unit 4是否可被听写?(y/n)")
if u4_yesno.lower() == "y":
   dictation_words.update(u4_words)
u5_yesno = input("Unit 5是否可被听写?(y/n)")
if u5_yesno.lower() == "y":
   dictation_words.update(u5_words)
u6_yesno = input("Unit 6是否可被听写?(y/n)")
if u6_yesno.lower() == "y":
   dictation_words.update(u6_words)
u7_yesno = input("Unit 7是否可被听写?(y/n)")
if u7_yesno.lower() == "y":
   dictation_words.update(u7_words)
u8_yesno = input("Unit 8是否可被听写?(y/n)")
if u8_yesno.lower() == "y":
   dictation_words.update(u8_words)
u9_yesno = input("Unit 9是否可被听写?(y/n)")
if u9_yesno.lower() == "y":
   dictation_words.update(u9_words)
u10_yesno = input("Unit 10是否可被听写?(y/n)")
if u10_yesno.lower() == "y":
   dictation_words.update(u10_words)
u11_yesno = input("Unit 11是否可被听写?(y/n)")
if u11_yesno.lower() == "y":
   dictation_words.update(u11_words)
u12_yesno = input("Unit 12是否可被听写?(y/n)")
if u12_yesno.lower() == "y":
   dictation_words.update(u12_words)
   
number = int(input("请输入所报单词个数:"))
for i in range(number):
   english = list(dictation_words.keys())
   chinese = list(dictation_words.values())
   word = random.choice(chinese)
   print(word)
   en_num = chinese.index(word)
   dictationed_words.append(english[en_num])
   del english[en_num]
   del chinese[en_num]
   ok = input("写完请按回车键:")
   print()

print("答案如下:")
for j in dictationed_words:
   print(j)

帮个忙吧!

  • 写回答

1条回答 默认 最新

  • cjh4312 2023-02-10 20:28
    关注

    word = random.choice(chinese)这个会出现重复的,你可以先产生number 个不同随机数值,你的程序还会简化不少。
    dd=random.sample(range(len(dictation_words)), number )
    不用一会键值了,一会索引了,一会还要删除了,也不用dictationed_words来存背的单词

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月20日
  • 已采纳回答 2月12日
  • 创建了问题 2月10日

悬赏问题

  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error