【发布时间】:2018-10-04 11:03:37
【问题描述】:
我一直在尝试编写一个程序,它会从问题列表中随机选择一个问题,然后显示问题本身。信息存储在.json 文件中。
这是我当前的代码:
import json
import random
with open("C:\\LearningArabic\\LiblibArriby\\Lessons\\L1_Letters\\L1_Letters.json", "r", encoding = "utf-8-sig") as read_file:
data = json.load(read_file)
t = data["letters"]["part one"]["meem"]["questions"]
print(t) #This prints all of the necessary information. Not actually necessary but it helps me know that this section of code is working
print("")
print(t.get(random.choice(("question"))))
print("")
最终我会进一步完善它,但现在这只是为了让这个想法发挥作用。
这是我的.json 文件:
{"letters":
{"part one": {
"meem": {
"questions": {
"question": "What sound does 'م' make?",
"arabic": "م",
"transliteration": "m",
"english": "m",
"answer": "m",
"wronganswer" : ["a", "b", "kh", "ta", "da", "du",
"ee", "yeh", "he", "ha", "l", "n", "f"]},
"questions": {
"question": "What letters are in the word 'وز'?",
"arabic": "موز",
"transliteration": "mooz",
"english": "banana",
"answer": "م و ز",
"wronganswer": [
"ه و ز",
"ه و ر",
"م ف ز",
"م و ر",
"ه ف ر"]},
"questions": {
"question": "What word do the letters 'ه ر م' make",
"arabic": "ه ر م",
"transliteration": "haram",
"english": "pyramid",
"answer": "هرم",
"wronganswer": [
"مرم",
"هزم",
"موم",
"مرع",
"هبم"]}
}
}}
}
当我运行代码时,我得到以下信息:
{'question': "What word do the letters 'ه ر م' make", 'arabic': 'ه ر م', 'transliteration': 'haram', 'english': 'pyramid', 'answer': 'هرم', 'wronganswer': ['مرم', 'هزم', 'موم', 'مرع', 'هبم']}
None
主要问题:
当我print(t) 时,我想我应该得到所有问题的打印输出。相反,我只得到最后一个问题的打印输出。当我尝试打印一个随机问题时,我得到的结果是“无”,我不明白。我的列表都已填充,为什么 python 找不到任何东西?我的主要目标是学习如何从 json 文件中选择随机值 - 如果我的 json 文件格式需要更新,请告诉我。
【问题讨论】:
-
这与
json允许重复键有关,但是一旦将其翻译成字典,重复键就会被覆盖,因此只保留最后一个。 -
那里没有问题列表。
-
@toti08,这是一个重复的问题吗?尽管某些 python 机制可能是相似的(比如我的 .json 文件结构不充分),但我们的问题是要求两个不同的东西。在另一个问题中进行随机选择没有任何意义(这是我的主要观点),如果您想学习如何随机选择元素,那么另一个问题将无济于事 - 特别是对于像我这样的 python 初学者。如果我需要重组我的 .json 文件,那么也许这个问题可以帮助向其他人展示同样的东西。
-
@JackDuane 您说您无法打印所有问题,这是因为您的
json文件中有重复的部分。一旦你解决了这个问题,选择一个随机问题是一个完全不同的问题,与 json 无关,但我认为关键是修复重复的键。
标签: python json python-3.x random