Hangman programmieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Sylvio83
User
Beiträge: 4
Registriert: Donnerstag 25. Juni 2020, 19:02

Hallo Zusammen,

ich habe ein Hangman - Programm vorliegen, was bisher beim Raten der einzelnen Buchstaben nur Kleinbuchstaben akzeptiert. Ich weiß, dass ich das mit der Stringmethode lower auf Großbuchstaben ausweiten kann, aber mein Problem ist, dass ich nicht weiß an welche Stellen das genau kommt. Bestimmt weiß jemand von euch wie man das lösen kann. Wäre nett, wenn ihr mir verraten könnt an welchen Stellen das lower gesetzt werden muss (müssen wohl insgesamt 3 Stellen sein).
Weiterhin muss ich noch einprogrammieren, dass das Programm keine Unwörter akzeptiert, hierbei geht es hauptsächlich um das Wort fuddel, welches durch den regex v[i!1][a@]gr[a@] mit allen Schreibvarianten abgedeckt ist. Wo und wie kann ich das am besten mit einbauen? Das Programm soll sich dann direkt beenden.

Im folgenden ist das Programm zum Hangman, ich wäre sehr dankbar über Hilfe :) :

import random
HANGMAN_PICS = ['''
+---+
|
|e
|
===''', '''
+---+
O |
|
|
===''', '''
+---+
O |
| |
|
===''', '''
+---+
O |
/| |
|
===''', '''
+---+
O |
/|\ |
|
===''', '''
+---+
O |
/|\ |
/ |
===''', '''
+---+
O |
/|\ |
/ \ |
===''']
words = "Umweltschutzorganisation Fussballweltmeisterschaft Nahrungsmittel Liebesabenteuer Sonnenuntergang Haftpflichtversicherung Eintrittskarte Schornsteinfeger Toilettenpapier Taschenmesser".split()

def displayBoard():
print(HANGMAN_PICS[len(missedLetters)], "\n")
print('Falsche Buchstaben:', end=' ')
for letter in missedLetters:
print(letter, end=" ")
print()
for i in range(len(secretWord)):
if secretWord in correctLetters:
print(secretWord, end=" ")
else:
print("_", end=" ")
print()

def getGuess():
# Returns the letter the player entered. This function makes sure the player entered a single letter and not something else.
while True:
guess = input("Raten Sie einen Buchstaben! ")
if len(guess) != 1:
print('Geben Sie genau einen Buchstaben ein!', end = '')
elif guess in correctLetters or guess in missedLetters:
print('Sie haben diesen Buchstaben bereits eingegeben.' , end = '')
elif guess not in 'abcdefghijklmnopqrstuvwxyz':
print('Das war kein Buchstabe! ', end = '')
else:
return guess

print('H A N G M A N')
secretWord = words[random.randint(0, len(words) - 1)]
missedLetters = []
correctLetters = []
while True:
gameIsDone = False
displayBoard()
guess = getGuess()
if guess in secretWord:
correctLetters.append(guess)
foundAllLetters = True
for i in range(len(secretWord)):
if secretWord not in correctLetters:
foundAllLetters = False
break
if foundAllLetters:
print("Hurra! Das geheime Wort lautet \"" + secretWord + "\"! Sie haben gewonnen!")
gameIsDone = True
else:
missedLetters.append(guess)
if len(missedLetters) == len(HANGMAN_PICS) - 1:
displayBoard()
print("Sie haben nach", len(missedLetters), " falschen Buchstaben und", len(correctLetters), "richtigen Buchstaben zu viele Versuche benötigt. Das gesuchte Wort war\"", secretWord,"\"!")
gameIsDone = True
if gameIsDone:
if input("Möchten Sie nochmal spielen? (ja or nein)").lower().startswith('j'):
secretWord = words[random.randint(0, len(words) - 1)]
missedLetters = []
correctLetters = []
else:
break
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Funktionen schreibt man wie Variablennamen klein_mit_unterstrich. Konstanten schreibt man komplett gross: WORDS.
Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen. Bei `display_board` fehlt `missed_letters`, `correct_letters` und `secret_word`.
Über einen Index zu iterieren ist ein Antipattern. Bei der ersten for-Schleife machst Du es ja auch korrekt, warum bei der zweiten nicht?
Das sähe dann so aus:

Code: Alles auswählen

def display_board(secret_word, missed_letters, correct_letters):
    print(HANGMAN_PICS[len(missed_letters)], "\n")
    print('Falsche Buchstaben:', end=' ')
    for letter in missed_letters:
        print(letter, end=" ")
    print()
    for letter in secret_word:
        print(letter if letter in correct_letters else "_", end=" ")
    print()
Bei `get_gess` fehlen fast die gleichen Argumente.
Alles ab Zeile 63 gehört auch in eine Funktion, die üblicherweise `main` genannt wird, damit kommt man erst gar nicht in die Versuchung, mit globalen Variablen zu arbeiten.
Statt random.randint nimmt man einfach random.choice(WORDS).
Statt eines `gameIsDone` braucht es nur ein `break` um die Schleife zu verlassen. Das `if gameIsDone`gehört auch einfach nur hinter die while-Schleife.
Dafür braucht es nocheinmal eine Schleife, wenn man das gesamte Spiel wiederholen will.

Überall dort, wo Du mit secret_word vergleichst, mußt Du das Wort in Kleinbuchstaben umwandeln.
Sylvio83
User
Beiträge: 4
Registriert: Donnerstag 25. Juni 2020, 19:02

Hey,

danke für die Verbesserungen, aber eig. läuft das Programm so. Ich weiß nur nicht wirklich, wo ich lower einfügen kann, damit auch Großbuchstaben genommen werden und dass verbotene Worte wie 'fuddel' nicht genommen werden und das Programm dann abbricht.
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sylvio83: Sirius3 hat gesagt wo die Veränderungen gemacht werden müssen. Komisch das Du nicht weisst wo, aber an wie vielen Stellen Du etwas ändern musst. Fast so als hätte Dir der Lehrer/Dozent/Tutor netterweise verraten an wie vielen Stellen, aber es bleibt ja weiterhin *Deine* (Haus)Aufgabe heraus zu finden und zu verstehen wo diese Stellen sind.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sylvio83
User
Beiträge: 4
Registriert: Donnerstag 25. Juni 2020, 19:02

Zum Verständnis, ich studiere kein Informatik, das ist bei mir nur ein Nebenfach. Ja an wie vielen Stellen weiß ich durch einen Tipp, aber dennoch habe ich noch keine Programme geschrieben und werde darin erst erst seit 2 Monaten unterrichtet. Die Strukturierung eines ganzen Programms überfordert mich da schon noch etwas.
Den letzten Satz hab ich ehrlich gesagt überlesen, das tut mir natürlich leid.Vielen Dank nochmal an Sirius3, ich versuche mal damit weiterzukommen :)
Sylvio83
User
Beiträge: 4
Registriert: Donnerstag 25. Juni 2020, 19:02

Hey an Alle,

ich hab es jetzt tatsächlich hinbekommen lower() so zu setzen, dass da jetzt auch Großbuchstaben akzeptiert werden.
@blackjack: du hattest Recht, bringt schon was ein bisschen damit zu "kämpfen" und macht ja auch Spaß ;D
Ich hab zu dem zweiten Teil auch schon (denke ich) einen ganz guten Ansatz, nur weiß ich jetzt nicht, wie ich den regex mit dem String Words verbinden kann, sodass dort nach dem "verbotenen Wort" gesucht wird. Könntet Ihr mir da vllt. noch einen Tipp geben?
Ich hab es jetzt so definiert:

def checkwords():
regex = r"v[i!1][a@]gr[a@]"
regex = re.compile(regex)
words = regex.search(word)
print(word)
for word in words:
if search!=None:
print ("Böses Wort!")
sys.exit()




print('H A N G M A N')
checkwords()
secretWord = words[random.randint(0, len(words) - 1)].lower()
missedLetters = []
correctLetters = []

Ich wäre euch sehr dankbar dafür :)
KingLuiMDR
User
Beiträge: 3
Registriert: Mittwoch 3. März 2021, 23:23

Hallo zusammen,
vorab ich bin total neu in der Welt der Programmierung und habe mit Python mal den Start gewagt.
Wie die meisten bin auch ich über das Hangman- Projekt gestoßen und habe mich daran versucht.

Dieses Programm funktioniert soweit, jedoch würde es mich interessieren was ich besser machen kann?
Ich bin für Tipps jeglicher Art offen. Wahrscheinlich habe ich vieles unnützes darin, daher die bitte einmal drüber zu schauen.
Zur Info die Wörter.txt hat einfach nur Wörter gespeichert, eins pro Zeile.

Ach ja, ich nutze Python 3.9.2 falls das hilft.

Ich danke schon mal im Voraus für eure Hilfe und anmerkungen :)

Code: Alles auswählen

# Hangman Projekt

import random
import copy
import string


# Variablen festlegen
spielen = True


# Öffnet die Datei und gibt das Lösungswort als Liste zurück
def datei_oeffnen_wort_selektieren():
    wort_liste = []
    file = open("Wörter.txt", "r")
    woerter_liste = file.readlines()
    file.close()
    wort = random.choice(woerter_liste).lower()
    for zeichen in range(0, len(wort) - 1):
        wort_liste.append(wort[zeichen])
    return wort_liste

# Spielerwort wird erstellt, gibt Liste mit "_" zurück
def wort_zum_spielen_erstellen(loesungswort_a):
    wort_zum_spielen_a = []
    for i in range(0, len(loesungswort_a)):
        wort_zum_spielen_a.append("_")
    return wort_zum_spielen_a

# Wandelt den Eingabe-String in eine Liste um
def eingabe_wort_in_liste(eingabe_a):
    eingabe_liste = []
    for i in range(0, len(eingabe_a)):
        eingabe_liste.append(eingabe_a[i])
    return eingabe_liste

# Einfache Augabe
def verschoenerung():
    print("*" * 50)
    print()


# Hauptprogramm
while spielen:

    versuche = 4
    geratene_buchstaben = []

    # Zufallswort generieren und Wort mit dem gespielt wird erstellen
    loesungswort = datei_oeffnen_wort_selektieren()
    wort_zum_spielen = wort_zum_spielen_erstellen(loesungswort)

    while versuche > 0 and wort_zum_spielen != loesungswort:

        if wort_zum_spielen != loesungswort:
            print(" ".join(wort_zum_spielen))
            keine_korrekte_eing = True

            # Eingabe und Überprüfung der Eingabe
            while keine_korrekte_eing:
                print()
                eingabe = input("Gib einen Buchstaben oder das Lösungswort ein: ").lower()

                # Wenn Eingabe mehr als ein Zeichen hat
                if len(eingabe) > 1:
                    fehler = 0
                    # Überprüft den input-String auf Fehler
                    for i in range(0, len(eingabe)):
                        if eingabe[i] not in string.ascii_letters:
                            fehler += 1
                    # String ok - verlasse Schleife / sonst Warnung ausgeben - Schleife läuft weiter
                    if fehler == 0:
                        keine_korrekte_eing = False
                    elif fehler > 0:
                        print()
                        print("Bitte nur Buchstaben oder ganze Wörter eingeben")

                # Wenn Eingabe nur ein Zeichen hat
                elif len(eingabe) == 1:
                    if eingabe not in string.ascii_letters:
                        print()
                        print("Bitte nur Buchstaben oder ganze Wörter eingeben")
                        print()
                    elif eingabe in string.ascii_letters:
                        keine_korrekte_eing = False  # Eingabeaufforderung mit Kontrolle

            # Überprüfung ob das Wort korrekt ist
            if len(eingabe) > 1:  # Wenn Eingabe länger als ein Buchstabe
                eingabe_wort = eingabe_wort_in_liste(eingabe)  # Eingabe Wort in Liste wandeln
                if eingabe_wort != loesungswort:  # Wenn Eingabe nicht richtig ist
                    versuche -= 1
                    print(f"Leider falsch, noch {versuche} Versuche")
                    print()
                elif eingabe_wort == loesungswort:  # Wenn Eingabe richtig ist
                    wort_zum_spielen = copy.copy(eingabe_wort)  # Übergabe der Liste - für spätere if-Abfrage
            # Überprüfung ob der Buchstabe im Lösungswort vorkommt
            elif len(eingabe) == 1:  # Wenn eingabe nur ein Zeichen
                if eingabe in loesungswort:  # Kontrolle ob Buchstabe vorkommt
                    verschoenerung()  # Ausgabe der Sternchen und Zeilenumbruch
                    for stelle_wort in range(0, len(loesungswort)):
                        if eingabe == loesungswort[stelle_wort]:
                            wort_zum_spielen[stelle_wort] = eingabe  # Buchstaben an die richtige Stelle schreiben
                    geratene_buchstaben.append(eingabe)  # Geratene Buchstaben der Liste hinzufügen
                else:
                    verschoenerung()
                    versuche -= 1  # Versuch wird abgezogen
                    geratene_buchstaben.append(eingabe)  # Geratener Buchstabe wir Liste hinzugefügt
                    print(f"{eingabe} kommt nicht vor, noch {versuche} Versuche!!!")
                    print()
                geratene_buchstaben.sort()
                print("Benutzte Buchstaben:", " ".join(geratene_buchstaben))
                verschoenerung()

        # Wenn Wort richtig gratulieren
        if wort_zum_spielen == loesungswort:
            print(f"Herzlichen Glückwunsch du hast das Wort", "".join(loesungswort), "erraten")
            print()

        # Wenn keine Versuche mehr Hinweis ausgeben
        if versuche == 0:
            print("Leider sind alle deine Versuche aufgebraucht!!!")

    # Abfrage ob weiter gespielt werden soll
    weiter_spielen = input("Möchtest du noch eine Runde spielen? J/N ").lower()
    print()
    print()
    if weiter_spielen != "j":
        spielen = False

Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Globale Variablen sollte man nicht verwenden, tust Du eigentlich auch nicht, aber ein Block ganz am Anfang des Programms, mit "Variablen festlegen" ist eigentlich schon falsch. Variablen werden dann initialisiert, wenn man sie braucht, hier also direkt vor der while-Schleife ganz unten.

In `datei_oeffnen_wort_selektieren`: Dateien öffnet man immer mit dem with-Statement und gibt ein Encoding an. Ich bin zuerst darüber gestolpert, dass Du sowohl wort_liste als auch woerter_liste benutzt und ich den Unterschied nicht sofort gesehen habe. In Variablennamen haben Typen nichts verloren.
Über einen Index zu iterieren ist ein Fehler, da man direkt über die Element iterieren kann; der Name `zeichen` ist für einen Index auch falsch.

Code: Alles auswählen

    for zeichen in range(0, len(wort) - 1):
        wort_liste.append(wort[zeichen])
wird also

Code: Alles auswählen

    for zeichen in wort[:-1]:
        wort_liste.append(wort)
oder kurz:

Code: Alles auswählen

wort_liste = list(wort[:-1])
Und später werden wir noch sehen, dass die Liste gar nicht nötig ist. Statt einfach das letzte Zeichen (mutmaßlich des Newline-Zeichen) wegzulassen, benutze rstrip oder strip.

Code: Alles auswählen

def datei_oeffnen_wort_selektieren():
    with open("Wörter.txt", encoding="utf8") in input:
        woerter = list(input)
    wort = random.choice(woerter).lower().strip()
    return list(wort)
In `wort_zum_spielen_erstellen`: was soll das _a-Postfix? Bentuze keine Abkürzungen, da man da nur rätseln muß.

Code: Alles auswählen

def wort_zum_spielen_erstellen(loesungswort):
    return ["_"] * len(loesungswort))
In `eingabe_wort_in_liste` ist mit den oberen Anmerkungen so trivial, dass es keine eigene Funktion braucht.

Das Hauptprogramm sollte auch in einer Funktion stehen, die man üblicherweise `main` nennt.
Die Schleife ist auch viel zu lang und sollte noch in mehrere Funktionen aufgespalten werden.
Das Flag spielen ist eigentlich unnötig, da man die Schleife als Endlosschleife auch per break verlassen könnte.

Code: Alles auswählen

# Hauptprogramm
def main():
    while True:
        spiele_runde()
        # Abfrage ob weiter gespielt werden soll
        weiter_spielen = input("Möchtest du noch eine Runde spielen? J/N ").lower()
        print()
        print()
        if weiter_spielen != "j":
            break

Du hast die Bedingung `wort_zum_spielen != loesungswort` in der while-Schleife, was denkst Du liefert die selbe Abfrage beim if gleich drunter?
Der Name `keine_korrekte_eing` hat wieder eine unsinnige Abkürzung. Und auch hier ist das Flag unnötig.
Wenn ein elif das genaue Gegenteil von dem vorher stehenden if-Block ist, benutzt man else.
Die Prüfung, ob nur ascii_letters eingegeben worden sind, ist für den Fall "Ein Zeichen" schon im Fall "Ein Wort" enthalten und muß daher nur einmal im Code stehen. Auch hier gilt wieder bei einer for-Schleife, nicht über einen Index iterieren.

Code: Alles auswählen

def tipp_eingeben():
    # Eingabe und Überprüfung der Eingabe
    while True:
        print()
        eingabe = input("Gib einen Buchstaben oder das Lösungswort ein: ").lower()
        if eingabe != "":
            fehler = 0
            # Überprüft den input-String auf Fehler
            for zeichen in eingabe:
                if zeichen not in string.ascii_letters:
                    fehler += 1
            if fehler == 0:
                break
            else:
                print()
                print("Bitte nur Buchstaben oder ganze Wörter eingeben")
    return eingabe
Die Schleife kann man noch durch ein isalpha und ein isascii ersetzen, wobei die Frage besteht, ob ein isacii überhaupt gewollt ist.

Code: Alles auswählen

def tipp_eingeben():
    # Eingabe und Überprüfung der Eingabe
    while True:
        print()
        eingabe = input("Gib einen Buchstaben oder das Lösungswort ein: ").lower()
        if eingabe.isascii() and eingabe.isalpha():
            break
        print()
        print("Bitte nur Buchstaben oder ganze Wörter eingeben")
    return eingabe
Das copy ist unnötig, weil Du eingabe_wort gar nicht mehr benötigst, es also unerheblich ist, ob diese Liste nicht verändert wird.
Wenn im if-Block und im else-Block die selbe Funktion gleich zuerst aufgerufen wird, kann man diesen Aufruf auch davor schreiben.
Wenn man sowohl einen Index braucht, als auch die Elemente der Liste, dann benutzt man `enumerate`.

Code: Alles auswählen

def spiele_runde():
    versuche = 4
    geratene_buchstaben = []

    # Zufallswort generieren und Wort mit dem gespielt wird erstellen
    loesungswort = datei_oeffnen_wort_selektieren()
    wort_zum_spielen = wort_zum_spielen_erstellen(loesungswort)

    while versuche > 0 and wort_zum_spielen != loesungswort:
        print(" ".join(wort_zum_spielen))
        eingabe = tipp_eingeben()
        
        # Überprüfung ob das Wort korrekt ist
        if len(eingabe) > 1:
            eingabe_wort = list(eingabe)
            if eingabe_wort != loesungswort:  # Wenn Eingabe nicht richtig ist
                versuche -= 1
                print(f"Leider falsch, noch {versuche} Versuche")
                print()
            else:
                wort_zum_spielen = eingabe_wort  # Übergabe der Liste - für spätere if-Abfrage
        # Überprüfung ob der Buchstabe im Lösungswort vorkommt
        else:  # Wenn eingabe nur ein Zeichen
            verschoenerung()  # Ausgabe der Sternchen und Zeilenumbruch
            if eingabe in loesungswort:  # Kontrolle ob Buchstabe vorkommt
                for stelle_wort, zeichen in enumerate(loesungswort):
                    if eingabe == zeichen:
                        wort_zum_spielen[stelle_wort] = eingabe  # Buchstaben an die richtige Stelle schreiben
            else:
                versuche -= 1  # Versuch wird abgezogen
                print(f"{eingabe} kommt nicht vor, noch {versuche} Versuche!!!")
                print()
            geratene_buchstaben.append(eingabe)  # Geratene Buchstaben der Liste hinzufügen
            geratene_buchstaben.sort()
            print("Benutzte Buchstaben:", " ".join(geratene_buchstaben))
            verschoenerung()

    # Wenn Wort richtig gratulieren
    if wort_zum_spielen == loesungswort:
        print(f"Herzlichen Glückwunsch du hast das Wort {''.join(loesungswort)} erraten")
        print()
    else:
        # Wenn keine Versuche mehr Hinweis ausgeben
        print("Leider sind alle deine Versuche aufgebraucht!!!")
Wenn man jetzt noch den Code durchgeht und schaut, wo man Listen wirklich braucht, und wo man mit normalen Strings arbeiten könnte, fällt auf, dass nur wort_zum_spielen eine Liste sein muß, weil dort Elemente verändert werden und nur eine Stelle `wort_zum_spielen == loesungswort` diese mit einem String verglichen würde, aber das kann man durch `"_" not in wort_zum_spielen` ersetzen.
Alles in allem sieht das dann so aus:

Code: Alles auswählen

# Hangman Projekt
import random

# Öffnet die Datei und gibt das Lösungswort als Liste zurück
def datei_oeffnen_wort_selektieren():
    with open("Wörter.txt", encoding="utf8") in input:
        woerter = list(input)
    return random.choice(woerter).lower().strip()


# Spielerwort wird erstellt, gibt Liste mit "_" zurück
def wort_zum_spielen_erstellen(loesungswort):
    return ["_"] * len(loesungswort)


def verschoenerung():
    print("*" * 50)
    print()


def tipp_eingeben():
    # Eingabe und Überprüfung der Eingabe
    while True:
        print()
        eingabe = input("Gib einen Buchstaben oder das Lösungswort ein: ").lower()
        if eingabe.isascii() and eingabe.isalpha():
            break
        print()
        print("Bitte nur Buchstaben oder ganze Wörter eingeben")
    return eingabe


def spiele_runde():
    versuche = 4
    geratene_buchstaben = []

    # Zufallswort generieren und Wort mit dem gespielt wird erstellen
    loesungswort = datei_oeffnen_wort_selektieren()
    wort_zum_spielen = wort_zum_spielen_erstellen(loesungswort)

    while versuche > 0 and "_" in wort_zum_spielen:
        print(" ".join(wort_zum_spielen))
        eingabe = tipp_eingeben()
        
        if len(eingabe) > 1:
            # Überprüfung ob das Wort korrekt ist
            if eingabe == loesungswort:  # Wenn Eingabe nicht richtig ist
                break
            print(f"Leider falsch, noch {versuche} Versuche")
            print()
        else:
            # Überprüfung ob der Buchstabe im Lösungswort vorkommt
            verschoenerung()  # Ausgabe der Sternchen und Zeilenumbruch
            if eingabe in loesungswort:  # Kontrolle ob Buchstabe vorkommt
                for stelle_wort, zeichen in enumerate(loesungswort):
                    if eingabe == zeichen:
                        wort_zum_spielen[stelle_wort] = eingabe  # Buchstaben an die richtige Stelle schreiben
            else:
                versuche -= 1  # Versuch wird abgezogen
                print(f"{eingabe} kommt nicht vor, noch {versuche} Versuche!!!")
                print()
            geratene_buchstaben.append(eingabe)  # Geratene Buchstaben der Liste hinzufügen
            geratene_buchstaben.sort()
            print("Benutzte Buchstaben:", " ".join(geratene_buchstaben))
            verschoenerung()

    if versuche == 0:
        # Wenn keine Versuche mehr Hinweis ausgeben
        print("Leider sind alle deine Versuche aufgebraucht!!!")
    else:
        # Wenn Wort richtig gratulieren
        print(f"Herzlichen Glückwunsch du hast das Wort {loesungswort} erraten")
        print()


# Hauptprogramm
def main():
    while True:
        spiele_runde()
        # Abfrage ob weiter gespielt werden soll
        weiter_spielen = input("Möchtest du noch eine Runde spielen? J/N ").lower()
        print()
        print()
        if weiter_spielen != "j":
            break

if __name__ == '__main__':
    main()
KingLuiMDR
User
Beiträge: 3
Registriert: Mittwoch 3. März 2021, 23:23

Erstmal ein riesiges danke Sirius3.
Ich habe mich mit den Vorschlägen auseinander gesetzt, jedoch verstehe ich ein paar Sachen nicht.

Code: Alles auswählen

    with open("Wörter.txt", encoding="utf-8") as input:        # Öffnet die Datei
        woerter = list(input)
Wenn ich es richtig verstehe wird die Datei als input geladen und dann als Liste in die Variable "woerter" geschrieben.
Mein größtes Problem ist ( , encoding="utf-8"), ich versteh nicht ganz was da passiert. Habe leider auch keine verständliche Erklärung im Internet gefunden.

Code: Alles auswählen

for stelle_wort, zeichen in enumerate(loesungswort):
Wenn ich das richtig verstanden habe, bekommen die Variablen "stelle_wort" und "zeichen" jeweils die Position des "loesungswort" zugeteilt. Ist das korrekt.

Code: Alles auswählen

if eingabe.isascii() and eingabe.isalpha():
Wenn ich das richtig verstehe reicht es im meinem fall nur "eingabe.isalpha()" zu prüfen, da ich ja nur Buchstaben haben will.
Sehe ich das richtig?


Ansonsten noch mal ein herzliches Dankeschön. Ich habe echt viel dazu gelernt :D
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Encoding bezeichnet die Übersetzung von Zeichen in Bytes. Es gibt ja über eine Million Zeichen, aber je Byte kann man nur 256 Werte speichern. Also muß jede Textdatei mit einem Encoding gespeichert werden, welches das ist, mußt Du ja wissen, da Du die Datei woerter.txt erzeugt hast. UTF8 ist halt eine häufig verwendetes Encoding.

stelle_wort ist die Position, zeichen ist das Zeichen, wie der Name ja schon sagt.
KingLuiMDR
User
Beiträge: 3
Registriert: Mittwoch 3. März 2021, 23:23

Danke für die schnelle Antwort, hab's geschnallt.
Antworten