向用户询问列表索引,Python

时间:2015-05-20 13:01:32

标签: python list search dictionary indexing

这些词典杀了我!

这是我的JSON(问题),其中包含2个dicts列表。

[
{
"wrong3": "Nope, also wrong",
"question": "Example Question 1",
"wrong1": "Incorrect answer",
"wrong2": "Another wrong one",
"answer": "Correct answer"
},
{
"wrong3": "0",
"question": "How many good Matrix movies are there?",
"wrong1": "2",
"wrong2": "3",
"answer": "1"
}
]

我试图让用户搜索索引,然后列出该索引的值(如果有的话)。目前我提示用户输入然后找到问题的索引然后检查输入是否等于索引,现在它返回False,即使输入正确的索引也是False。我是在正确的轨道上,但在语义错误?或者我应该研究另一条路线?

import json


f = open('question.txt', 'r')
questions = json.load(f)
f.close()

value = inputSomething('Enter Index number: ')

for i in questions:
    if value == i:
        print("True")

    else:
        print("False")

2 个答案:

答案 0 :(得分:1)

您正在遍历列表值。 for i in questions 将迭代列表值而不是列表索引,

你需要迭代列表的索引。为此你可以使用枚举。你应该这样试试..

for index, question_dict in enumerate(questions):
  if index == int(value):
        print("True")

    else:
        print("False")

答案 1 :(得分:1)

在Python中,最好not check beforehand, but try and deal with error if it occurs

这是遵循这种做法的解决方案。花点时间仔细看看这里的逻辑,它可能会对你有所帮助:

import json
import sys

    # BTW: this is the 'pythonic' way of reading from file:
# with open('question.txt') as f:
#     questions = json.load(f)


questions = [
    {
        "question": "Example Question 1? ",
        "answer": "Correct answer",
    },
    {
        "question": "How many good Matrix movies are there? ",
        "answer": "1",
    }
]


try:
    value = int(input('Enter Index number: ')) # can raise ValueError
    question_item = questions[value] # can raise IndexError
except (ValueError, IndexError) as err:
    print('This question does not exist!')
    sys.exit(err)

# print(question_item)

answer = input(question_item['question'])

# let's strip whitespace from ends of string and change to lowercase:
answer = answer.strip().lower() 

if answer == question_item['answer'].strip().lower():
    print('Good job!')
else:
    print('Wrong answer. Better luck next time!')