2012-04-22 52 views
0

我无法理解next_block(the_file)函数中的correct变量。如果correct变量未编入索引,程序将无法正常工作。因此,correct[0]。所以我的问题是为什么它不能正确工作,如果它没有索引,并且为什么它可以索引,如果一个整数是不可下标的。为什么在Python中阅读一行不会给我这行内容?

它使用纯文本文件是这样的:

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. 

这是代码:

correct = next_line(the_file)
# 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.") 
+0

如果您使用“正确”而不是“正确[0]”,它以何种方式失败? – 2012-04-22 00:54:19

回答

6

后,correct就像'1\n'一个字符串。 correct[0]然后得到一个像'1'这样的字符串,您稍后将其与raw_input的结果进行比较,该结果在末尾不包括\n。所以你需要做[0]以获得第一个字符。

它可能会更好地使用.strip()来代替,因为那样它可能适用于不是单个字符的答案(如果您将游戏更改为支持10多个答案或使用不同类型的名称进行答案) ,它会更明显地发生什么,它会忽略两端的空格,这在文件或用户的输入中绝对不相关。

+0

哈哈,忘了那个。谢谢你,你真棒。 – 2012-04-22 01:16:35

+0

小指馅饼:不要忘记接受答案 – 2012-04-22 01:35:55

+2

+1的答案。额外的评论:'正确'不是这个值的好名字;它建议一个布尔值(真/假)。 'correct_answer'将是一个更好的名字。 – 2012-04-22 01:46:06

相关问题