Python Anfängerproblem - Index/If

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
iZProxy@gmx.de
User
Beiträge: 1
Registriert: Samstag 19. Januar 2019, 12:19

Hallo zusammen,
ich bin ziemlich neu in Python und arbeite mich aktuell mit einen Übungsbuch ran, wo mir ab und zu Ideen zur Erweiterung kommen. Hier handelt es sich um ein Ratespiel. Wo mit jedem falschen Buchstaben/Wort ein Leben abgezogen wird und mit jedem richtigen Buchstaben ein Fragezeichen enttarnt wird.
Meine Frage jetzt: Der Endsatz mit "Du hast gewonnen" kommt nur wenn man das ganze Wort auf einmal eingibt - Mein Ziel ist es aber auch wenn alle Buchstaben aufgelöst wurden und noch Leben übrig sind, anzuzeigen, dass man gewonnen hat, ohne das ganze Wort einzugeben.

Also wenn jeder Index des verdeckten Wortes aufgelöst wurde, automatisiert in "gewonnen" reinzuspringen.
Weiß nicht ob das jetzt hier mit der Einrückung funktioniert hat. (Der Code an sich funktioniert)

Danke.
_____________________________________________________________________________________________________________________________________


Code: Alles auswählen

import random

leben = 9

wörter = ['Pizza','Braut','Milch','Pferd']

geheim_wort = random.choice(wörter)

verdecktes_wort = list('?????')

herz = u'\u2764'

wort_richtig = False



def akt_verdeckt(buchstabe_geraten, geheim_wort, verdecktes_wort):
    index = 0

    while index < len(geheim_wort):
        if buchstabe_geraten == geheim_wort[index]:
            verdecktes_wort[index] = buchstabe_geraten
        index = index + 1

while leben > 0:
    print(verdecktes_wort)
    print('Verbleibende Leben: ' + herz * leben)
    raten = input('Rate einen Buchstaben oder das Wort: ')

    if raten == geheim_wort:
        wort_richtig = True
        break
    if raten in geheim_wort:
        akt_verdeckt(raten, geheim_wort, verdecktes_wort)

    else:
        print('Falsch. Ein Leben weniger')
        leben = leben - 1

if wort_richtig:

    print("Du hast gewonnen! Das Wort war " + geheim_wort)

else:
    print("Leider verloren! Das Wort war " + geheim_wort)
    
    [\code]
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@iZProxy@gmx.de: Und was ist Dein konkretes Problem mit diesem Ziel? Du musst doch nur eine Bedingung an der richtigen Stelle schreiben die prüft ob das Wort komplett erraten wurde. Überleg mal woran man das erkennen könnte.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@iZProxy@gmx.de: wenn ich das aus dem Kunstunterricht richtig verstanden habe, ist ein Akt, der verdeckt ist, kein Akt mehr. Die while-Schleife wäre besser eine for-Schleife noch besser Listcomprehension. Variablen initalisiert man am besten kurz bevor man sie braucht, `leben`, `geheim_wort`, `wort_richtig` und `verdecktes_wort` also am besten knapp vor dem unteren `while`, `wörter` und `herz` sind Konstanten und sollten KOMPLETT_GROSS geschrieben werden.

Code: Alles auswählen

import random

WÖRTER = ['Pizza','Braut','Milch','Pferd']
HERZ = u'\u2764'

def aufdecken(buchstabe_geraten, geheim_wort, verdecktes_wort):
    for index in range(len(geheim_wort)):
        if buchstabe_geraten == geheim_wort[index]:
            verdecktes_wort[index] = buchstabe_geraten

geheim_wort = random.choice(WÖRTER)
verdecktes_wort = list('?' * len(geheim_wort))
wort_richtig = False
leben = 9
while leben > 0:
    print(verdecktes_wort)
    print('Verbleibende Leben:', HERZ * leben)
    raten = input('Rate einen Buchstaben oder das Wort: ')

    if raten == geheim_wort:
        wort_richtig = True
        break
    if raten in geheim_wort:
        aufdecken(raten, geheim_wort, verdecktes_wort)
    else:
        print('Falsch. Ein Leben weniger')
        leben = leben - 1

if wort_richtig:
    print("Du hast gewonnen! Das Wort war", geheim_wort)
else:
    print("Leider verloren! Das Wort war", geheim_wort)
oder

Code: Alles auswählen

import random

WÖRTER = ['Pizza','Braut','Milch','Pferd']
HERZ = u'\u2764'

def aufdecken(buchstabe_geraten, geheim_wort, verdecktes_wort):
    return [g if buchstabe_geraten == g else v
        for g, v in zip(geheim_wort, verdecktes_wort)]

def spielen(geheim_wort, leben=9):
    verdecktes_wort = list('?' * len(geheim_wort))
    while leben > 0:
        print(' '.join(verdecktes_wort))
        print('Verbleibende Leben:', HERZ * leben)
        raten = input('Rate einen Buchstaben oder das Wort: ')
        if raten == geheim_wort:
            return True
        if raten in geheim_wort:
            verdecktes_wort = aufdecken(raten, geheim_wort, verdecktes_wort)
        else:
            print('Falsch. Ein Leben weniger')
            leben -= 1
    return False

def main():
    geheim_wort = random.choice(WÖRTER)
    gewonnen = spielen(geheim_wort)
    if gewonnen:
        print("Du hast gewonnen! Das Wort war", geheim_wort)
    else:
        print("Leider verloren! Das Wort war", geheim_wort)

if __name__ == '__main__':
    main()
Antworten