Python bestimmte Stelle in Konsole ersetzen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Strings sind nicht änderbar. Verwende stattdessen eine Liste aus Zeichen:

wort = list("_____") # == [ '_', '_', '_', '_', '_' ] == [ '_' ]*5
wort[4] = "a"
print( ''.join(wort) )

Fürs Galgenmännchen brauchst Du wohl eine Liste von Listen von Zeichen:

grafik = [ list("_____")
         , list("    |")
         # usw.
         ]

grafik[0][4] = "a"
for zeile in grafik:
    print( ''.join(wort) )
Am besten soll dann auch die Zeile IN der Konsole verändert werden

Am einfachsten ist es, die Grafik nach jeder Änderungen neu auszugeben. Ein paar Leerzeilen ( print("\n"*20) ) davor können nicht schaden.

Mit dem Standardmodul curses kannst Du die Konsole wie eine Leinwand benutzen und sogar die Tastatur und Maus kontrollieren. Das erfordert aber etwas Einarbeitung.

String Wort = "_____"

Wort[4]="a"

dann hast du "____a", der index startet mit 0. Also zu deutsch, dein String ist ein Array von zeichen

NiceGuy569  30.11.2021, 09:12

Danke für die Hilfe (das Projekt ist Partnerarbeit und ich bin sein Partner). Sie haben uns gut weitergeholfen

1
ralphdieter  30.11.2021, 09:13
dann hast du "____a"

nicht in Python. Probier es mal aus.

0
rikks  30.11.2021, 09:47
@ralphdieter

stimmt, in ansible und jinja2 tu ich das, und das basiert auf Python. aber dann liegt da wohl noch ein Mechanismus drunter.

0
rikks  30.11.2021, 09:58
@rikks

Naja, dann mit Regex... und einer Suchen-Ersetzen-Funktion

^(.{3}).(.*)$

Kurze Erklärung:
. ist ein beliebiges Zeichen
.{3} die 3 bedeutet 3x ein belibiges Zeichen
(.{3}) Die Klammern um das Ganze bilden eine Gruppe, sprich, der Interpreter merkt sich, was er damit getroffen hat, und man kann es später mit \\1 \\2 \\3 und so weiter wieder aufrufen

^ und $ Bezeichnen Anfang und Ende des Strings

* bedeutet "beliebig viele oder keins", also ähnlich wie {3} genau 3 bedeutet

Also bedeutet das Suchmuster in Sprache übersetzt "Merke dir 3 Zeichen, dann überspring das Vierte und dann merk dir noch beliebig viele (alle) Zeichen, bis Zeilenende

Das Gesuchte wird ersetzt durch "Das, was in der ersten Klammer steht, dann a und dann den Rest in der 2. Klammer :-)

python
Python 3.8.10 (default, Sep 28 2021, 16:10:42)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> test='_____'
>>> print(re.sub(r"^(.{3}).(.*)$", "\\1a\\2", test))
___a_

Klingt erstmal schwer, weil man es etwas logisch durchdenken muss, ist aber dann sehr einfach und macht schnell viel weniger Arbeit.

0
rikks  30.11.2021, 10:08
@rikks

Weil der Onkel so nett ist, hat er für dich auch ne Funktion draus gemacht :-)

>>> import re
>>> def zeige(wort, pos, zeichen):
...   return re.sub(r"^(.{"+str(pos-1)+"}).(.*)$", "\\1"+zeichen+"\\2", wort)
...
>>> print(zeige('______', 4, 'b'))


0