2017-08-19 6 views
-2

Say y 10
= und x = 0
für x liegen im Bereich (y) Funktion würde Zahlen auszudrucken von 0 bis 9.
Teststring = "{} - {}" Format (x, x + 1)
wie kann ich String rekursiv für die Ausgabe zu drucken.
0 - 1
1 bis 2
2 - 3 und so weiter?Rekursionsformel für "{} - {}". Format (x, x + 1) (Python 3)

Ich habe versucht zu tun:

def inrangetest(): 
    x = 0 
    y = 10 
    for x in range(y): 
     teststring = "{} - {}\n".format(x, x+1) 

    return teststring 

print(inrangetest()) #prints only 0 - 1 and nothing else 

Obwohl, wenn ich die inrangetest() Funktion in

def inrangetest(): 
    x = 0 
    y = 10 
    for x in range(y): 
     teststring = "{} - {}\n".format(x, x+1) 
    print(teststring) 


Es funktioniert ändern, aber es druckt, ohne dass ich die Zahlen automatisch aus es zu wollen. Was kann ich tun, damit die Zahlen nicht gedruckt werden, sondern nur zurückgegeben werden, wenn sie tatsächlich von einer Druckfunktion aufgerufen werden?

+0

Keine Ihrer Funktionen nennt sich selbst, ich sehe hier keine Rekursion. – timgeb

+0

Natürlich kehrt die Funktion zurück und die for Schleife läuft nur 1 Mal. Sie können Teststring an eine Liste anfügen, die in Ihrer Funktion erstellt wurde und die nach der Schleife zurückgibt. – ROAR

+0

Ich denke, ich könnte es falsch ausgedrückt haben, wenn ich Rekursion oder eine rekursive Formel sagte, sollte es aus einer Liste von Scores aufrufen und tatsächlich zeigen die Spieler mit der höchsten Punktzahl, und jedes Mal, wenn eine Person das Spiel spielt, fügt es der Liste hinzu. Obwohl ich denke, das ist nicht wirklich Rekursion. Wie auch immer, die Lösung von Aaron_ab hat das Problem gelöst, und ich verstand den Punkt, den ROAR gemacht hat. Danke euch allen! – YuriMasticass

Antwort

2

Erstens, beachten Sie bitte, dass 'x = 0' im 'inrangetest' Methode nichts tut. Bereich (y) alle nums erzeugen aus '0' beginnen, so dass selbst wenn Sie die Methode mit Start: 'x = 23' es wird immer noch erzeugen alle nums von ..

Sie können dieses Problem beheben, indem Sie etwas wie das Schreiben:

for i in range(x,y): 
    # do what ever.. 

Jede Art und Weise, die Lösung, die Sie suchen wird mit ‚Ertrag‘. Etwas wie:

def generate_str(_from, _to): 
    for i in range(_from, _to): 
     yield '{}-{}'.format(i, i+1) 


gen = generate_str(10, 30) 
print(next(gen)) # 10-11 
print(next(gen)) # 11-12 

diese Weise können Sie steuern, wenn Sie das nächste erzeugt Zeichenfolge empfangen möchten und was damit zu tun ..

Hinweis, dass der Generator Aufruf von:

next(gen) 

wird schließlich eine StopIteration auslösen, damit Sie etwas tun können:

with contextlib.suppress(StopIteration): 
    print(next(gen)) # or what ever you need.. 
+0

Das hat tatsächlich den Trick gemacht! Vielen Dank! Ich bin immer noch neu in Python und leider ist dies das erste Mal, dass ich dieses "Ausbeute" Dienstprogramm vorgestellt werde. Wie auch immer, vielen Dank! – YuriMasticass