2016-10-12 4 views
1

ich habe jetzt auf eine Frage für einige Zeit aufgeklebt:Wiederholen Sie einen String n-mal und Drucken von n Zeilen davon

Ich suche eine Python-Funktion zu erstellen, die eine Zeichenfolge und eine positive ganze Zahl verbraucht. Die Funktion druckt die Zeichenfolge n-mal für n Zeilen. I kann nicht Schleifen verwenden, ich muss nur Rekursion verwenden

z.

repeat("hello", 3) 

hellohellohello 
hellohellohello 
hellohellohello 

bei jedem Versuch, eine Funktion zu machen, das dies tut, nimmt die Funktion, um die Länge der Zeichenfolge, progressiv:

z.B.

repeat("hello", 3) 

hellohellohello 
hellohello 
hello 

hier ist, was mein Code wie folgt aussieht:

def repeat(a, n): 
if n == 0: 
    print(a*n) 
else: 
    print(a*n) 
    repeat(a, n-1) 

jede mögliche Hilfe würde geschätzt, danke!

+0

Sie sind also verwirrt, was die 'n-1' tut? –

+0

Ja, ich möchte die Anzahl der Male, die die Zeichenfolge in einer Zeile als eine feste Art von Parameter gedruckt wird, aber ich möchte die Funktion die Zeile n mal wiederholen. –

+0

Hinweis: Sie können das erste Argument so ändern, dass Sie das zweite Argument wiederholen.Anstatt "n" an den rekursiven Aufruf zu übergeben, übergeben Sie "n-1". Anstatt also "a" zu passieren, vielleicht etwas anderes passieren? – Riaz

Antwort

3

Versuchen Sie, diese

def f(string, n, c=0): 
    if c < n: 
     print(string * n) 
     f(string, n, c=c + 1) 

f('abc', 3) 
+0

Ich mag den Trick des Hochzählens, so dass Sie eine Standard "0" für den 3. Parameter verwenden können. – Sam

+0

das ist großartig und leicht zu verstehen! Danke! das Zählen ist eine gute Möglichkeit, es zu nähern –

+0

@AndrewLouis, könnten Sie dies als die Antwort akzeptieren? – zyxue

0

Sie wirklich in der Nähe waren.

def repeat(a, n): 
    def rep(a, c): 
     if c > 0: 
      print(a) 
      rep(a, c - 1) 
    return rep(a * n, n) 
print(repeat('ala', 2)) 
alaala 
alaala 

Eine Funktion mit Schließung würde die Aufgabe erledigen.

+0

Entschuldigung, repariere es. – Nf4r

+0

super nah, ich suche zu drucken (a * n) n mal –

+0

Keine Ahnung, warum dies Upvoted ist, wenn es buchstäblich das gleiche wie die OP-Methode tut. – Sam

1

Also brauchen Sie nur extra Argument, das Ihnen sagen wird, wie oft Sie diese Funktion bereits ausgeführt haben, und es sollte Standardwert haben, da in erster Stelle zwei Argumente (str und positive Zahl).

def repeat(a, n, already_ran=0): 
    if n == 0: 
     print(a*(n+already_ran)) 
    else: 
     print(a*(n+already_ran)) 
     repeat(a, n-1, already_ran+1) 
repeat('help', 3) 

Ausgabe

helphelphelp 
helphelphelp 
helphelphelp 
helphelphelp 
1

Sie sollten (optional) einen dritten Parameter übergeben, der die Dekrementierung, wie viele Zeilen Griffe sind links:

def repeat(string, times, lines_left=None): 
    print(string * times) 

    if(lines_left is None): 
     lines_left = times 
    lines_left = lines_left - 1 

    if(lines_left > 0): 
     repeat(string, times, lines_left) 
+0

Dies könnte reduziert werden, aber ich wollte wegen seiner selbsterklärenden Natur ausführlich sein. – Sam

+1

camelCase ist nicht sehr pythonisch. – zyxue

+0

Ugh, danke @zyxue! Es ist schon eine Weile her, seit ich in Python war ... habe ich vergessen. – Sam

5

One-Liner

def repeat(a,n): 
    print((((a*n)+'\n')*n)[:-1]) 

Lass uns das aufteilen

  1. a*n wiederholt String n mal, das ist, was Sie in einer Zeile wollen
  2. +'\n' auf die Zeichenfolge eine neue Zeile hinzufügt, so dass Sie in die nächste Zeile gehen
  3. *n, weil Sie es wiederholen müssen n mal
  4. die [:-1] ist die letzte \n als print entfernen setzt eine neue Zeile standardmäßig.
+0

Verwendet keine Rekursion, obwohl –

+0

es schwer zu lesen ist. – zyxue

+0

Ich nahm an "verwenden Rekursion, wenn nötig" –

Verwandte Themen