Hangman programmieren
Verfasst: Donnerstag 25. Juni 2020, 19:16
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
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