0

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.")
4

1 に答える 1

6

の後はcorrect = next_line(the_file)correctのような文字列です'1\n'correct[0]次に、のような文字列を取得します。これは、後で、末尾にaが含まれていない'1'の結果と比較されます。したがって、最初のキャラクターを出すために行う必要があります。raw_input\n[0]

代わりに使用する方がおそらく良いでしょう。そう.strip()すれば、単一のキャラクターではない回答(10以上の回答、または別の種類の名前の回答をサポートするようにゲームを変更した場合)で機能する可能性があるためです。何が起こっているのかがもう少しわかりやすくなり、ファイルまたはユーザーの入力のいずれにも明らかに関係のない端のスペースが無視されます。

于 2012-04-22T00:54:44.927 に答える