0
    def askme(answers):
            question = raw_input("Do you want to see my name, age or favorite fruit?\n")
            if not question in answers:
                    print "I have no answer for that, ask something else"
                    askme(answers)
            answer_to_question = answers[question]
            return answer_to_question

    answers = {"name":"John", "age":18, "fruit":"apple"}

    while True:
            answer_to_question = askme(answers)
            print "Answer is %s" % answer_to_question

実行方法: 入力が辞書にない場合は、新しい入力を求めます 入力が辞書にある場合は、入力をキーとして使用します

何が問題なのか: キーに含まれていない値を渡すと、新しい入力を求められます。キーにある値を渡すと、KeyError が返されます。

これはなぜ起こり、どうすれば修正できますか?

4

1 に答える 1

0

問題はあなたが再発しているからです。無効な質問が行われると、プログラムは正しく認識して再発しますが、回答が見つかると、中断したところから再開します。

最善の解決策は、再帰を回避するために関数の上部を変更することだと思います。

question = raw_input("Do you want to see my name, age or favorite fruit?\n")
while not question in answers:
    print "I have no answer for that, ask something else"
    question = raw_input("Please type 'name', 'age' or 'fruit'.\n")

別の修正方法は、再帰形式を維持することですが、質問が無効だった場合にプログラムが中断したところから再開できないようにします。この場合、再帰呼び出しを次のように置き換えるだけです。

return askme(answers)
于 2012-10-14T02:16:48.967 に答える