【问题标题】:Word guessing game - problem with picking random word every time the loop runs猜字游戏 - 每次循环运行时选择随机单词的问题
【发布时间】:2020-11-18 22:20:17
【问题描述】:

我想在每次回答一个单词时选择一个新单词,但即使在使用 random.shuffle() 之后,我仍面临从单词列表中获取一个新的随机单词的问题。

我的回答:

  1. 通过从 csv 文件中提取键为德语、值为英语来创建德语单词的字典(键、值)

  2. 您想从字典中显示一个随机值并要求用户输入含义

    import csv
    import random
    play_game = input(' Press \'y\' for yes and \'n\' for no')
    while play_game == 'y':
        with open('/Users/pydev97/Desktop/wordlist.csv', mode='r') as csv_file:
            csv_reader = csv.DictReader(csv_file)
            for row in csv_reader:
                keys = row['MEANING']
                values = row['WORDS']
                new_dict = dict({keys : values})
    
        keys_list = list(new_dict.keys()) # converting dict values to a list
        random.shuffle(keys_list)
        for word in keys_list:
          display = '{}'
          print(display.format(word))
          user_answer = input('Answer : ')
    
          if user_answer == new_dict[word]:
             print('You got it right')
          else:
             print('You got it wrong')
    

我得到的输出:

Press 'y' for yes and 'n' for noy
to participate
Answer : dd
You got it wrong
to participate
Answer : es
You got it wrong
to participate
Answer : mit machen/teil nehmen
You got it right
to participate
Answer :

【问题讨论】:

  • I'm facing issue with getting a new random word from the word list 请解释一下这个问题,而不是说你有它。
  • 您的字典中只有一个条目。您在每个循环中重新创建 new_dict
  • @RandomDavis 所以我的意思是正如您在代码中看到的那样,我使用 random.shuffle 命令来打乱我的列表,因此每次我回答问题时都会给我一个新词。但不知何故,同一个词不断被问到,而且它没有被打乱。我希望在每次回答后都询问新词。
  • 也许你可以发一个minimal reproducible example?这样我们就可以粘贴你的代码,运行它,然后看到和你一样的问题。
  • @RandomDavis 好的,所以我确实尝试了最小的可重现示例,令人惊讶的是它有效!我创建了一个小字典,如下所示,每次我回答一个新词时都会被问到。但是为什么我无法通过导入的 csv 文件获得相同的输出?有什么问题吗?

标签: python python-3.x dictionary random


【解决方案1】:

检查一下

   import csv
   import random
   play_game = input(' Press \'y\' for yes and \'n\' for no')
   with open('/Users/pydev97/Desktop/wordlist.csv', mode='r') as csv_file:
       new_dict={}
       csv_reader = csv.DictReader(csv_file)
       for row in csv_reader:
           keys = row['MEANING']
           values = row['WORDS']
           new_dict[keys] = values     
           keys_list = list(new_dict.keys()) # converting dict values to a list
   while play_game == 'y':
       random.shuffle(keys_list)
       for word in keys_list:
         display = '{}'
         print(display.format(word))
         user_answer = input('Answer : ')
   
         if user_answer == new_dict[word]:
            print('You got it right')
         else:
            print('You got it wrong')
       play_game = input(' Press \'y\' for yes and \'n\' for no')

【讨论】:

    【解决方案2】:

    这一行只是将 new_dict 设置为最新的 key:value 对

    new_dict = dict({keys : values})
    

    而您可能想要追加到不断增长的 new_dict。

    new_dict[keys] = values
    

    【讨论】:

    • 我在哪里添加你说的那一行?
    • 紧接着 values = row['WORDS']
    • 当然你必须在循环之前创建一个空字典。
    • 或者,您可以在游戏循环之前移动 csv 读取部分。除非您希望允许在游戏中更改 csv 文件,否则似乎不必在每个新游戏中重新读取该内容。
    • @GeraldChu 试过它似乎不起作用:/ 一次又一次地询问同一个词而不是被洗牌,得到相同的结果..
    猜你喜欢
    • 2021-07-24
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多