2017-03-14 10 views
0

Ich versuche gerade, einen Code zu erstellen, der berechnet, wie lange ein Raumschiff benötigt, um eine bestimmte Strecke zurückzulegen, jede Minute springt es die Hälfte der verbleibenden Strecke. Wenn eine Entfernung von weniger als 1 Meter übrig ist, dauert es nur noch eine Minute.Python Rekursive Code (Anfänger)

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)) 

Ausgang:

- It takes 1 minute to travel 0.625 meters 

Process finished with exit code 0 

kann ich sehen, dass mein Problem die für diese jedes Mal war t = t + 1. Meine Idee ist, die Funktion wiederholt wird 1 bis t hinzufügen würde, die bedeuten würde 1 Minute. Aber momentan funktioniert es nicht. Jede Hilfe würde sehr geschätzt werden.

+1

Mathematisch wird es nie die gesamte Strecke – inspectorG4dget

+1

reisen Bitte geben Sie an, warum Ihr Code nicht durch Erklärung Arbeit oder durch die Ausgabe zeigt. Außerdem müssen Sie die Logik in Ihrem Code neu bewerten. Zum Beispiel sind die Vergleiche in Ihren if- und elif-Anweisungen beide d <= 1. – PrestonM

+0

Bis die Entfernung weniger als 1 ist, dauert es nur eine weitere Minute. – Sam

Antwort

1

Ein Problem ist, dass es unmöglich ist, dass die Anweisung "elif d < = 1:" aufgerufen wird, weil die Bedingung genau die gleiche ist wie die obige Bedingung "if", was bedeutet, dass dieser Code nie ausgeführt wird. Sie sollten wahrscheinlich die „Elif“ ändern „wenn“, wenn Sie wollen, dass sie beide ausgeführt werden, oder noch besser, verschmelzen sie zusammen

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

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

Es gibt ein paar Probleme hier. Zum einen überprüft deine "elif" -Anweisung den gleichen Zustand wie dein if! Ich denke du willst 'größer als'.

Zweitens, Sie setzen immer t am Anfang auf 0 und übergeben das nicht mit der rekursiven Schleife. Das Original d wird ebenfalls nicht zurückgegeben.

Schließlich bin ich nicht sicher, was die else-Anweisung fangen soll.

EDIT: Wenn 0 < d < 1, dann dauert es noch eine Minute. Der letzte Else fängt das jetzt ein.

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)) 

Ausgang:

- It takes 5 minutes to travel 10 meters 
+0

Hey vielen Dank dafür, du hast richtig über mein if und elif getan, das gleiche zu tun. Dies ist jedoch falsch, denn wenn die Entfernung weniger als 1 Meter beträgt, dauert es nur eine weitere Minute. – Sam

+0

Okay, das sehe ich jetzt. Ich habe den Code bearbeitet. Ich habe es auch repariert, so dass es den richtigen Abstand am Ende ausgibt (bevor es nur die letzte Entfernung druckte). Wenn dies hilft, achten Sie darauf, die Antwort zu verbessern und/oder zu akzeptieren! – Kewl

+0

Hey, das war genau das. Danke für Ihre Hilfe. Wie akzeptiere ich die Antwort? – Sam