0
def answer(): 
    if True:
        ans = raw_input('Enter y/n:')

        if ans != "y" and ans != "n":
            print "Try again"
            answer()
        elif ans == "n":
            return False
        elif ans == "y":
            return True
if answer():
    print "It's working!, you entered Y"
else:
    print "You entered N"

このコードを実行すると、Enter キーを数回押すか、間違った文字を入力してから y を入力すると、「正常に動作しています!、Y を入力しました」ではなく、常に「N を入力しました」と表示されます。

何が問題なのかわかりません、助けてください。

4

2 に答える 2

9

ifブロック内の関数の戻り値を破棄しています。次のように変更する必要があります。

if ans != "y" and ans != "n":
    print "Try again"
    return answer()

値を返さない場合、関数は を返し、これは外側のNoneとして評価されます。また、関数内に必要はありません。Falseifif True:

PS: このタスクには再帰を使用しないでください。whileこれは、ユーザーが正しい入力を渡さなくなるまで繰り返し、成功するとすぐに中断するループを使用して簡単に行うことができます。また、無限ループを回避するために、正しい入力を渡す試行回数をユーザーに与えます。

于 2013-09-27T14:42:12.540 に答える
3

この場合、再帰は本当に必要ありません。無限ループを使用して、答えが「y」または「n」でない場合は返さないでください。

def answer(): 
    while True:
        ans = raw_input('Enter y/n:')
        if not ans or ans not in "yn":
            print "Try again"
        else:
            return ans == "y"  # This is more succinct

if answer():
    print "It's working!, you entered Y"
else:
    print "You entered N"
于 2013-09-27T14:45:52.357 に答える