为什么在Python中读取一行不仅仅给我该行的内容?

时间:2012-04-22 00:49:45

标签: python

我无法理解correct函数中的next_block(the_file)变量。如果correct变量未编入索引,则程序将无法正常工作。因此,correct[0]。所以我的问题是,如果它没有被索引,为什么它不能正常工作?如果整数不是可订阅的,为什么它甚至可以被编入索引。

它使用的文本文件是:

An Episode You Can't Refuse
On the Run With a Mammal
Let's say you turn state's evidence and need to "get on the lamb." /If you wait too long, what will happen?
You'll end up on the sheep
You'll end up on the cow
You'll end up on the goat
You'll end up on the emu
1
A lamb is just a young sheep.
The Godfather Will Get Down With You Now
Let's say you have an audience with the Godfather of Soul. /How would it be smart to address him?
Mr. Richard
Mr. Domino
Mr. Brown
Mr. Checker
3
James Brown is the Godfather of Soul.

这是代码:

# Trivia Time
# Trivia game that reads a plain text file

def open_file(file_name, mode):
    """Open a file."""
    try:
        the_file = open(file_name, mode)
    except(IOError), e:
        print "Unable to open the file", file_name, "Ending program.\n", e
        raw_input("\n\nPress enter to exit..")
        sys.exit()
    else:
        return the_file

def next_line(the_file):
    """Return the next line from the trivia file, formatted."""
    line = the_file.readline()
    line = line.replace("/", "\n")
    return line

def next_block(the_file):
    """Return the next block of data from the trivia file."""
    category = next_line(the_file)

    question = next_line(the_file)

    answers = []
    for j in range(4):
        answers.append(next_line(the_file))

    correct = next_line(the_file)
    if correct:
        correct = correct[0]

    explanation = next_line(the_file)

    return category, question, answers, correct, explanation

def welcome(title):
    """Welcome the player and get his/her name."""
    print "Welcome to Trivia Challenge!\n"
    print title, "\n"

def main():
    trivia_file = open_file("trivia.txt", "r")
    title = next_line(trivia_file)
    welcome(title)
    score = 0
    # get first block
    category, question, answers, correct, explanation = next_block(trivia_file)
    while category:
        # ask a question
        print category
        print question
        for j in range(4):
            print j + 1, "-", answers[j]
        # get answer
        answer = raw_input("What's your answer?: ")
        # check answer
        if answer == correct:
            print "\nRight!",
            score = score + 1
        else:
            print "\nWrong.",
            print explanation
            print "Score:", score, "\n\n"
        # get next block
        category, question, answers, correct, explanation = next_block(trivia_file)
    trivia_file.close()
    print "That was the last question!"
    print "Your final score is:", score

main()
raw_input("\n\nPress the enter key to exit.")

1 个答案:

答案 0 :(得分:6)

correct = next_line(the_file)之后,correct是一个类似'1\n'的字符串。 correct[0]会为您提供类似'1'的字符串,您稍后会将其与raw_input的结果进行比较,该结果最后不包含\n。所以你需要[0]来获得第一个角色。

使用.strip()可能会更好,因为它可能适用于不是单个字符的答案(如果您更改游戏以支持10+个答案,或者使用不同类型的答案如果发生了什么,它会更加明显,它会忽略两端的空格,这在文件或用户的输入中肯定是无关紧要的。