Das entsprechende Bit ist in diesem Teil:
for i in range(0, self._iteraciones, 1):
self._string = self._string_a_repetir + self._string + '\n'
die durch die Iterationen einer nach dem anderen gehen lassen:
# Initially
_string = ''
_string_a_repetir = '*'
_iteraciones = 3
# i = 0
_string = _string_a_repetir + _string + '\n'
= '*' + '' + '\n'
= '*\n'
# i = 1
_string = _string_a_repetir + _string + '\n'
= '*' + '*\n' + '\n'
= '**\n\n'
# i = 2
_string = _string_a_repetir + _string + '\n'
= '*' + '**\n\n' + '\n'
= '***\n\n\n'
Wie Sie sehen können, ist dies völlig zu erwarten passieren, da man nie Wiederhole dieses Zeichen mehr als einmal pro Zeile. Und Sie verketten auch die vorherige Zeichenfolge falsch mit der neuen Zeichenfolge (platzieren Sie es zwischen dem Text der aktuellen Zeile und dem Zeilenumbruch).
Was Sie suchen, ist so etwas wie dieses:
for i in range(0, self._iteraciones, 1):
self._string = self._string + (self._string_a_repetir * (i + 1)) + '\n'
Die string * number
arbeitet die string
für number
mal zu wiederholen.
Als allgemeine Anmerkung, sollten Sie nicht diejenigen, die Teilnehmer auf diese Weise verwenden:
class Triangulo_String:
_string = ''
_iteraciones = 0
_string_a_repetir = ''
Dies wird die Mitglieder als Klasse Variablen erstellen, die sich über alle seine Instanzen gemeinsam genutzt werden. Dies ist nicht direkt ein Problem, wenn Sie die Klassenmitglieder nie ändern, aber es könnte später zu Verwirrung führen. Sie sollten stattdessen alle Instanz initialisieren innerhalb der __init__
Attribute:
class Triangulo_String:
def __init__(self, string_a_repetir, iteraciones):
self._string = ''
self._string_a_repetir = string_a_repetir
self._iteraciones = iteraciones
Sie nur Zeilenumbrüche am Ende das Hinzufügen .. Sie wollen * zwischen * der vorhandenen Zeichenfolge und der neuen. –