2017-03-14 19 views
0

私は現在、宇宙船が一定の距離を移動するのにかかる時間を計算するコードを作成しようとしています。 1メートル未満の距離が残っている場合は、1分以上かかるだけです。Python再帰コード(初心者)

def space_time(d,t=0): 

    if d <= 1: 
     print("- It takes 1 minute to travel", d, "meters") 
    elif d > 1: 
     t = t + 1 
     return space_time(d/2, t) 
    else: 
     t = t + 1 
     print("- ", t, "minutes to travel", d, "meters") 


(space_time(10)) 

出力:

- It takes 1 minute to travel 0.625 meters 

Process finished with exit code 0 

が、私は私の問題は、このための私の考えは、関数は、それが意味でしょうトンに1を追加します繰り返されるたびたのt = tの+ 1であることがわかります1分。しかし、現在は動作していません。どんな助けでも大歓迎です。

+1

数学的には、それはあなたのコードが説明によって、または出力を示すことによって動作していない理由を明示してください全体の距離 – inspectorG4dget

+1

を移動することは決してないだろう。また、コード内のロジックを再評価する必要があります。たとえば、if文とelif文の比較は、両方ともd <= 1です。 – PrestonM

+0

距離が1未満になるまで、もう1分しかかかりません。 – Sam

答えて

1

上記の "if"条件とまったく同じ条件であるため、 "elif d < = 1:"文が呼び出されないという問題があります。つまり、このコードは決して実行されません。あなたはおそらく問題のカップルがここにありますそれらをマージ一緒

if d <= 1: 
    print("- It takes 1 minute to travel" , d, "meters") 

    elif d <= 1: 
    t = t + 1 
    return space_time(d/2) 
1

、より良いあなたがそれらの両方を実行したい場合は、「もし」を「のelif」に変更、または必要があります。 1つは、あなたの 'elif'ステートメントがifと同じ条件をチェックしています!私はあなたが「より大」をしたいと思う。

第2に、最初にtを0に設定し、再帰的ループでそれを渡さないようにします。元のdも戻されません。

最後に、私は、他のステートメントがキャッチしていると思われるものがわかりません。

編集:0 < d < 1の場合、1分以上かかる。最後の人はこれを今キャプチャします。

def space_time(d_0,d=None,t=0): 
    if d is None: 
     d = d_0 
    if d <= 0: 
     print("- It takes", t, "minutes to travel" , d_0, "meters") 

    elif d > 1: 
     t = t + 1 
     return space_time(d_0,d/2,t) 

    else: 
     print("- It takes", t + 1, "minutes to travel" , d_0, "meters") 

(space_time(10)) 

出力:

- It takes 5 minutes to travel 10 meters 
+0

こんにちは、ありがとう、同じ事をやっている私と、エリフについてあなたは正解でした。しかし、距離が1メートル未満になると、もう1分しかかからないので、これは間違っています。 – Sam

+0

さて、私は今それを見る。私はコードを編集しました。最後の距離を印刷する前に、最後に適切な距離を出力するように固定しました。これが役立つ場合は、必ず回答をアップヴォートしてください。 – Kewl

+0

これはちょうどそれでした。ご協力ありがとうございました。どのように答えを受け入れるのですか? – Sam