【问题标题】:Get random line from CSV file in Python and find corresponding word, like a quiz从 Python 中的 CSV 文件中获取随机行并找到相应的单词,如测验
【发布时间】:2012-05-23 05:57:01
【问题描述】:

抱歉标题不明确。想不出更好的表达方式。

我有一个包含德语/英语单词的 CSV 文件,如下所示:

Ja,Yes
Nein,No
Katze,Cat

我希望我的 python 脚本从 CSV 文件中随机打印一个德语单词,并要求他们输入英语单词。当这样做并点击返回时,它应该打印正确或错误。

我对代码有一些大纲:

loop = 1
choice = 0

while loop == 1:
    randWord = choice(de)

    correctAnswer = ? 

    answer = raw_input("Answer: ")

    if answer == correctAnswer:
        print ("Correct")
        print ("")
    elif answer == "exit":
        loop = 0
    elif answer != correctAnswer:
        print ("False")
        print ("The correct answer was ") + correctAnswer
        print ("Let's try another.")
        print ("")

我的问题有两个:

1) 从 CSV 文件中选择随机行和单词。 2) 将 CSV 文件中随机选择的单词与德语对应词进行匹配。

关于我如何处理这两个方面的任何想法?

谢谢

【问题讨论】:

  • 这似乎是 Python dictionary 数据结构的完美选择。将csv文件读成一个,在字典中生成一个随机键来给你这个词(你的键),然后将用户的答案与相关的值(给定你的键)进行比较

标签: python csv


【解决方案1】:

试试这样的:

import csv
import random

words = dict(csv.reader(open("file.csv")))
randWord = random.choice(words.keys())
correctAnswer = words[randWord]

if answer == correctAnswer:
    ...

编辑:我应该注意,如果您使用的是 Python 3,则应首先将 words.keys() 转换为列表,因为 dict.keys() 在 Python 2.x 中返回列表,但生成器在 Python 3 中。

【讨论】:

  • 谢谢,看起来不错。我正在使用 Python 2.x。虽然,我使用了您在此处发布的确切代码,并使用正确的文件和我的代码代替了 ...,但我收到了错误 File "germanvocab.py", line 7, in <genexpr> words = dict( (de, en) for (de, en) in csv.reader("Words.csv"))。你知道这可能是什么吗?谢谢。
  • words = dict(csv.reader(open("file.csv"))) 应该足够了。
  • @samiles,我只是忘了放一个文件句柄而不是一个字符串。我的歉意。还有蒂姆,我添加了你的零钱。
【解决方案2】:
with open(filename, 'r') as f:
    lines = [line for line in f]
    ger, correctAnswer = random.choice(lines).split(',')

我认为你可以从这里拿走它:-)

【讨论】:

  • 这种方法将结束行字符留在正确答案中。
  • 此外,它不处理某些 CSV 格式选项,如引号等。 csv 模块是处理 csv 文件的更好方法。
猜你喜欢
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 2016-12-25
相关资源
最近更新 更多