Python bestimmte Stelle in Konsole ersetzen?
Hallo,
ich programmiere momentan im Informatik-Unterricht das Spiel Galgenmännchen in der Programmiersprache python. Allerdings weiß ich nicht wie ich eine bestimmte Stelle eines strings ersetzen kann. Ich meine nicht mit der replace-Funktion, da ich nur Unterstriche als string hab und nur einen an einer bestimmten Stelle ersetzen will. Z.B. ein "a" befindet sich an 3ter Stelle also will ich den 3ten Unterstrich mit dem Buchstaben "a" ersetzen. Am besten soll dann auch die Zeile IN der Konsole verändert werden (das ist aber nur optional).
LG Gerrit
2 Antworten
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
Danke für die Hilfe (das Projekt ist Partnerarbeit und ich bin sein Partner). Sie haben uns gut weitergeholfen
stimmt, in ansible und jinja2 tu ich das, und das basiert auf Python. aber dann liegt da wohl noch ein Mechanismus drunter.
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.
nicht in Python. Probier es mal aus.