老王来也 发表于 2021-10-28 22:30:35

想了一天实在是搞不懂了

import random

words = ["abandon", "band", "husband", "bound",]
chinese = [["放弃", "放纵"], ["乐队", "布条", "波段"], ["丈夫"], ["被束缚的"]]

w_c = zip(words, chinese)
list_w_c = list(w_c)
new_list_w_c = []

while True:
    if len(new_list_w_c) == len(list_w_c):
      new_list_w_c.clear()
      break
    word_choice = random.choice(list_w_c)            这些代码主要目的是随机打印出一个单词,且不重复,
    if word_choice in new_list_w_c:
      continue
    new_list_w_c.append(word_choice)
    print(word_choice)


主要问题在这里
    while True:
      put_chinese = input()
      put_chinese_es = put_chinese.split(',')
      for each_put_chinese in put_chinese_es:
            if each_put_chinese in word_choice:
                print("哎呦,不错哦,继续加油吧!!!")
                break                                                                        在这里写break,不知道为什么跳不出这个循环,会出现你写对了汉语也打印了“”这句话,但是他不会给你一个新单词,光标就停
            else:                                                                              在那里了,然后你按enter时 他会打印出 else中的话也不是给你一个新单词
                print("你写的意思不正确哦,想一想或者查看资料后在填写吧!!!")
                print(word_choice)
                continue
         break                                                                                    只有在这里写他才会当你输入正确后会立即返回给你一个值,相当于结束了这个小循环,又来了一次大循环,但是,此时你若
                                                                                                   是写错了汉语,他也是结束小循环,再来一次大循环,但我的目的是让他在重复一次小循环

      
我目前就只知道这么写,有哪位大神可以帮忙解决这个问题,,,,或者有自己的方法来实现次目的,
跪求跪求跪求

wutianlong220 发表于 2021-10-28 23:02:34

发代码的时候能不能放在代码专用区域里面,类似这样:
int main(void) {
}
你这样看的好累。复制下来格式也有点乱

jackz007 发表于 2021-10-28 23:11:48

本帖最后由 jackz007 于 2021-10-29 11:26 编辑

      如果我没有猜错的话,楼主是想随机抽取英语单词,然后从键盘输入对应中文词意,并判断是否正确吧?
#coding:gbk

import random

words = ["abandon", "band", "husband", "bound",]
chinese = [["放弃", "放纵"], ["乐队", "布条", "波段"], ["丈夫"], ["被束缚的"]]

w_c = zip(words, chinese)
list_w_c = list(w_c)
new_list_w_c = []

while True:
    if len(new_list_w_c) == len(list_w_c):
      break
    else:
      word_choice = random . choice(list_w_c)
      if not word_choice in new_list_w_c:
            f = True
            while f:
                put_chinese = input('英语单词 [ %s ] 的汉语意思是 : ' % word_choice) . strip()
                put_chinese_es = put_chinese . split(',')
                for each_put_chinese in put_chinese_es:
                  if each_put_chinese in word_choice:
                        print("哎呦,不错哦,继续加油吧!!!")
                        new_list_w_c . append(word_choice)
                        f = False
                if f:
                  print("你写的意思不正确哦,想一想或者查看资料后再填写吧!!!")
                print()

wutianlong220 发表于 2021-10-28 23:13:46

复制了你的代码,不知道是不是下面这样的。python语法我不是很懂,但是里面有几个我看的有点奇怪。
import random

words = ["abandon", "band", "husband", "bound",]
chinese = [["放弃", "放纵"], ["乐队", "布条", "波段"], ["丈夫"], ["被束缚的"]]

w_c = zip(words, chinese)
list_w_c = list(w_c)
new_list_w_c = [] #这里new_list_w_c 不是空的么?为什么下面可以从里面拿出来遍历?

while True:
    if len(new_list_w_c) == len(list_w_c):
      new_list_w_c.clear()
      break
    word_choice = random.choice(list_w_c)         
    if word_choice in new_list_w_c:#比如这个地方,new_list_w_c 这个不是空的么?
      continue
    new_list_w_c.append(word_choice)
    print(word_choice)


#主要问题在这里
    while True:
      put_chinese = input()
      put_chinese_es = put_chinese.split(',')
      for each_put_chinese in put_chinese_es:
            if each_put_chinese in word_choice:
                print("哎呦,不错哦,继续加油吧!!!")
                break                                                                        
            else:                                                                              
                print("你写的意思不正确哦,想一想或者查看资料后在填写吧!!!")
                print(word_choice)
                continue
         break            #还有这个位置的break是干嘛用的?我有点看不明白,明明没有条件判断,怎么突然蹦出来一个break                                                                        

老王来也 发表于 2021-10-29 07:21:20

wutianlong220 发表于 2021-10-28 23:13
复制了你的代码,不知道是不是下面这样的。python语法我不是很懂,但是里面有几个我看的有点奇怪。

我也很奇怪但必须在这里写一个break才能在执行一次大循环。你可以在pycharm里面试一下

老王来也 发表于 2021-10-29 07:29:52

wutianlong220 发表于 2021-10-28 23:13
复制了你的代码,不知道是不是下面这样的。python语法我不是很懂,但是里面有几个我看的有点奇怪。

他开始是一个空列表,但当你取一个单词,就会把他放进这个列表,遍历是为了在随机抽取单词时,不重复,大致就是随机取一个单词,判断是否在这个列表,在的话说明随机取得重复了,就在执行一遍,不在说明是个新的元素,所以就走上面的,然后打印出来,我的问题是处在下面的小循环,至于那个为什么加break ,说实话我也搞不懂。但必须在这里加上才会再次执行上面的大循环,即上面的while

老王来也 发表于 2021-10-29 07:31:08

wutianlong220 发表于 2021-10-28 23:02
发代码的时候能不能放在代码专用区域里面,类似这样:

你这样看的好累。复制下来格式也有点乱

在哪里找代码专用区域,怎么发这样的帖子,新人求指导

zlj19931010 发表于 2021-10-29 08:30:15

本帖最后由 zlj19931010 于 2021-10-29 08:31 编辑

加个标识量判断当前输入的翻译是否正确 就行了
is_find = False
import random

words = ["abandon", "band", "husband", "bound", ]
chinese = [["放弃", "放纵"], ["乐队", "布条", "波段"], ["丈夫"], ["被束缚的"]]

w_c = zip(words, chinese)
list_w_c = list(w_c)
new_list_w_c = []

while True:
    if len(new_list_w_c) == len(list_w_c):
      print("你已经复习完毕了!")
      break
    word_choice = random.choice(list_w_c)
    if word_choice in new_list_w_c:
      continue
    new_list_w_c.append(word_choice)
    print(word_choice)

    while True:
      put_chinese = input()
      put_chinese_es = put_chinese.split(',')
      # 开始循环查找是否翻译正确
      is_find = False
      for each_put_chinese in put_chinese_es:
            if each_put_chinese in word_choice:
                print("哎呦,不错哦,继续加油吧!!!")
                is_find = True
                break

      # 判断是否找到
      if is_find:
            break
      else:
            print("你写的意思不正确哦,想一想或者查看资料后在填写吧!!!")
            print(word_choice)

傻眼貓咪 发表于 2021-10-29 10:29:46

Python 就是简单化代码,为什么复杂化?
import random
dictionary = {"abandon": ["放弃", "放纵"], "band": ["乐队", "布条", "波段"], "husband": ["丈夫"], "bound": ["被束缚的"]}
res = []
while True:
    word = random.choice(list(dictionary.keys()))
    if word in res: continue
    res.append(word)
    while True:
      print(word)
      answer = input()
      if answer in dictionary:
            print("哎呦,不错哦,继续加油吧!!!")
            break
      else: print("你写的意思不正确哦,想一想或者查看资料后在填写吧!!!")
    if len(res) == len(list(dictionary.keys())): break
print("你已经复习完毕了!")

老王来也 发表于 2021-10-29 12:25:05

zlj19931010 发表于 2021-10-29 08:30
加个标识量判断当前输入的翻译是否正确 就行了
is_find = False

哥们,确实可以了,我以前也试过,我用的是count=0   然后在 如果正确就写count==1,然后判断count是否等于1 但是结果却是不行,我没有想到用true和flase,,谢谢了

老王来也 发表于 2021-10-29 12:40:50

傻眼貓咪 发表于 2021-10-29 10:29
Python 就是简单化代码,为什么复杂化?

哥们确实不错,但是我的一个最重要的目的你没有解决,,,那就是我前面问的一个小问题,就是一个单词有很多意思,我不可能保证全部写出来所以当我写出其中的一个或者两个,或者顺序错误,都能搞算已经掌握了这个单词,所以有加了很多,是吧

傻眼貓咪 发表于 2021-10-29 12:48:32

本帖最后由 傻眼貓咪 于 2021-10-29 12:50 编辑

老王来也 发表于 2021-10-29 12:40
哥们确实不错,但是我的一个最重要的目的你没有解决,,,那就是我前面问的一个小问题,就是一个单词有很 ...

你先试了我的代码再说,看是不是你想要的:“只输入单一意思就可以当作掌握这个词”,我的代码应该完全没有这方面问题

傻眼貓咪 发表于 2021-10-29 12:50:08

老王来也 发表于 2021-10-29 12:40
哥们确实不错,但是我的一个最重要的目的你没有解决,,,那就是我前面问的一个小问题,就是一个单词有很 ...

看来你根本没有试我的代码啊!我哭啊!{:10_266:}

傻眼貓咪 发表于 2021-10-29 12:57:29

学习是为了提升自己的知识水平,不是看见不明白的就略过

兄弟,如果知道你会略过我的代码,我就不写了

zlj19931010 发表于 2021-10-29 14:45:05

老王来也 发表于 2021-10-29 12:25
哥们,确实可以了,我以前也试过,我用的是count=0   然后在 如果正确就写count==1,然后判断count是否等 ...

嗯 都是用标识量 0、1和True、False一样

你不行可能是代码有其他逻辑错误吧。

老王来也 发表于 2021-10-29 18:08:37

傻眼貓咪 发表于 2021-10-29 12:50
看来你根本没有试我的代码啊!我哭啊!

跟门我亲自创建了一个film去试验你的代码,你告诉我如歌打印出band这个单词但是我只知道其中两个汉语意思,你写上去试试,你怎么写都不行只能写一个

老王来也 发表于 2021-10-29 18:10:30

傻眼貓咪 发表于 2021-10-29 12:57
学习是为了提升自己的知识水平,不是看见不明白的就略过

兄弟,如果知道你会略过我的代码,我就不写了

额,不会呀,凡是回答的楼主我都会仔细 去看 去思考 去亲自试试

老王来也 发表于 2021-10-29 18:15:31

傻眼貓咪 发表于 2021-10-29 12:48
你先试了我的代码再说,看是不是你想要的:“只输入单一意思就可以当作掌握这个词”,我的代码应该完全 ...

husband
丈夫
哎呦,不错哦,继续加油吧!!!
band
"乐
你写的意思不正确哦,想一想或者查看资料后在填写吧!!!
band
乐队,波段
你写的意思不正确哦,想一想或者查看资料后在填写吧!!!
band
乐队波段
你写的意思不正确哦,想一想或者查看资料后在填写吧!!!
band
乐队,波段
你写的意思不正确哦,想一想或者查看资料后在填写吧!!!
band
乐队 波段
你写的意思不正确哦,想一想或者查看资料后在填写吧!!!
band
哥们你说说这是怎么回事,并且你怎么输入能让他报正确,我是试了好多,或许可以,可能是我还不知道怎么能让他报正确吧
页: [1]
查看完整版本: 想了一天实在是搞不懂了