the game Hangman

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
jgr
User
Beiträge: 7
Registriert: Donnerstag 6. Dezember 2018, 18:14

Hallo Community,

ich habe folgendes Problem ich möchte ein kleines Programm schreiben wie der Titel schon sagt nämlich Hangman.
Jetzt habe ich folgenden Code mit folgenden Fehler:

Code: Alles auswählen

"""Hangman
Standard game of Hangman. A word is chosen at random from a list and the
user must guess the word letter by letter before running aout of attempts."""

import random

def main():
    welcome = ['Welcome to Hangman! A word will chosen at random and',
               'you must try to guess the word correctly letter by letter',
               'before you run out of attemps. Good lock!'
               ]
    for line in welcome:
        print(line, sep='\n')

# setting up the play_again loop

play_again = True

while play_again:
    # setup the game loop

    words = ["hangman","maus","phillip","malena","papa","mama","sybille"
            ]

    chosen_word = random.choise(words).lower()
    player_guess = None #will hold the players guess
    guessed_letters = [] #a list of letters guessed so far
    word_guessed = []
    for letter in chosen_word:
        word_guessed.append("-")#create an ungessed, blank version of the word
        joined_word = None # joins the words in the list word_guessed

        HANGMAN=(
"""
-----
|    |
|
|
|
|
|
|
|
------
"""
    ,
""""
-----
|    |
|    0
|
|
|
|
|
|
------
Fehlermeldung Programm startet nicht friert ein:
RESTART: C:/Users/Joachim Gradischnik/Desktop/Programing/source_code/python/Mittwoch_19122018/Hagman_19122018.py

Bitte um Hilfe Danke.

lg

Joachim
Benutzeravatar
__blackjack__
User
Beiträge: 14031
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@jgr: Das ist syntaktisch kein korrektes Python. Da solltest Du einen SyntaxError bekommen. Starte das Programm mal nicht aus einer IDE oder einem Editor, sondern direkt auf der Kommandozeile.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Benutzeravatar
__blackjack__
User
Beiträge: 14031
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Weitere Anmerkungen: Bezüglich Editor/IDE solltest Du vielleicht nach Alternativen schauen, denn da sind so ein paar Fehler in den Texten bei eigentlich gleichen Worten, dass die Vermutung nahelegt, dass dein Editor/deine IDE keine Autovervollständigung hat, oder die zumindest nicht aktiviert wurde.

Auf Modulebene sollte nur Code stehen, der Konstanten, Funktionen, und Klassen definiert. Der Code nach der Definition der `main()`-Funktion sollte also mindestens auch noch in dieser Funktion stehen.

Du hast IMHO schon zu viel Code geschrieben, ohne ihn auszuprobieren. Man schreibt Programme nicht komplett oder auch nur halb runter, bevor man das erste mal probiert, ob das auch läuft. So etwas wie `random.choise()` hätte IMHO bereits bei einem Testlauf auffallen müssen.

Kommentare sollten nicht beschreiben was der Code macht, das steht da ja bereits als Code, sondern höchstens warum der Code das so macht. Aber auch nur sofern das nicht offensichtlich ist. Wenn man Namen mit Kommentaren erklären muss, dann sollte man erst einmal schauen ob man nicht einen besseren Namen finden kann, so dass der Kommentar überflüssig wird. Wobei `player_guess` und `guessed_letters` die Kommentare die da stehen sicher nicht brauchen. Denn das ist irgendwie offensichtlich das `guessed_letters` die geratenen Buchstaben enthalten wird.

Namen mit `None` vorbelegen sollte man nur machen wenn dieses `None` auch tatsächlich irgendwo mal benutzt werden könnte. Das sehe ich bei `player_guess` nicht. Das wird erst später im Code relevant und sollte auch erst dort eingeführt und dann gleich an die Benutzereingabe gebunden werden, und nicht an einen unnützen Dummy-Wert.

Zwischenstand:

Code: Alles auswählen

#!/usr/bin/env python3
"""Hangman

Standard game of Hangman. A word is chosen at random from a list and the
user must guess the word letter by letter before running out of attempts.
"""
import random


def main():
    welcome = [
        'Welcome to Hangman! A word will be chosen at random and',
        'you must try to guess the word correctly letter by letter',
        'before you run out of attempts. Good luck!',
    ]
    for line in welcome:
        print(line, sep='\n')

    play_again = True
    while play_again:
        words = [
            'hangman', 'maus', 'phillip', 'malena', 'papa', 'mama', 'sybille',
        ]
        chosen_word = random.choice(words).lower()
        guessed_letters = []
        word_guessed = []
        for letter in chosen_word:
            word_guessed.append('-')


if __name__ == '__main__':
    main()
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
jgr
User
Beiträge: 7
Registriert: Donnerstag 6. Dezember 2018, 18:14

Hi,

danke für deinen ausführliche Antwort. Ich benutze die IDLE von Anaconda werde teile des Codes ausprobieren in der Python Shell habe den Fehler in random entdeckt. Danke.

Joachim
Antworten