2017-12-07 13 views
-1

こんにちは、パイソン - (?)ブール条件とエラー

私は、合計値が返されるかどうかを確認するためにreturn_3return_6return_9を取得しようとしていますall_return_values_funcは20を超えています。問題は、スクリプトを実行するとreturn_3が即座に印刷されることですs "返される値の総数が高すぎます"。

はどのようにall_return_values_func/RETURN_VALUEが実行された20の上方初めてreturn_3あるものとして計算してきますか?

スクリプトのポイントはreturn_3/return_6/return_9スクリプトのそれぞれから行くと、これらの機能のそれぞれが all_return_values_func機能に追加し、機能値が後であれば機能RETURN_VALUEで20の上にチェックされていることを確認することです

from sys import exit 
import time 

def all_return_values_func(): 
    combined_return_values = return_3() + return_6() + return_9() 
    return combined_return_values 

def return_value(i): 
    if i > 20: 
     print "The value is above 20" 
     time.sleep(2) 
     exit() 



def return_3(): 

    return_value(all_return_values_func)  
    print "Returns integer value: 3 and then jumps to function: return_6" 
    time.sleep(2) 
    return_6() 
    return 3 


def return_6(): 

    return_value(all_return_values_func)  
    print "Returns integer value: 6 and then jumps to function: return_9" 
    time.sleep(2) 
    return_9() 
    return 6 

def return_9(): 

    return_value(all_return_values_func) 
    print "Returns integer value: 9" 
    time.sleep(2) 
    return_3() 
    return 9 

return_3() 

乾杯、

サイモン

+0

'return_value(all_return_values_func)'は、関数 'all_return_values_func'を' all_return_values_func() 'の戻り値ではなく' return_value'に渡しています。 – Galen

+0

これは動作する方法がありません:P 1: 'return_value(all_return_values_func)' - 関数参照を渡していますか?その後 ?これを数と比較する。 ここで再帰の回数は非常に高いですか?すべての関数は 'all_return_values_func'を呼び出すでしょうか?それはまた自分自身を呼びますか? –

+1

"xを返してから関数yにジャンプする"というのは、Pythonで起こりうることではありません。 – TemporalWolf

答えて

0

問題はここにある:

あなたは return_value()でそう all_return_values_funcを呼び出していない
return_value(all_return_values_func) 

、あなたが関数自体は、使用しているのPython 2.xでは、では20よりも大きいか否かを比較している、これは常に真である:任意の関数であります任意の整数より大きい。 (この比較はあまり神秘良い取引である、Pythonの3.xではエラーがスローされます。)

ソリューションは、実際に関数を呼び出すことです。、しかし、それは本当に解決策ではありません

return_value(all_return_values_func()) 

ので、関数を呼び出すと、プログラムは再帰的ループに入ります。 all_return_values_func()return_3()all_return_values_func()を呼び出し、all_return_values_func()を呼び出すreturn_3()を呼び出します。スタックが1000コール深度に達すると、PythonはRuntimeErrorをスローします。

あなたのプログラムは何も役に立たないようではない、あるいは意味をなさえそうです。おそらくさらに進める前にそれに対処するでしょう。