Fehlersuche

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
DrZombeck
User
Beiträge: 2
Registriert: Donnerstag 21. Juni 2018, 21:14

Hallo ihr lieben,
ich habe folgendes Problem und zwar ich wollte ein kleines Text Adventure schreiben und ich bin auch eigentlich fertig aber ich habe das Problem das ich am ende eine Fehlermeldung bekomme und ich habe das schon mehrfach überprüft doch ich verstehe nicht was ich falsch gemacht habe. Könnt ihr mir bitte Helfen?

Code: Alles auswählen

import random
random.seed()

p = int(30)
w = int(0)
l = int(0)
mh = int(10)
mht = int(0)
ha = int(0)


print("Dein Gegener ist Megadollon!")
print("Du musst entscheiden möchtest du dein schiff Reparieren mit einer Planke, möchtest du wasser schippen oder möchtest du den Hai angreifen.")
print("Wenn 100 L Wasser in dein Schiff gelaufen ist geht es unter! Also pass gut auf.")


while mh != 0:

    if ha == 3:
        print("Achtung der Hei greift an! Bring dich schnell in sicherheit!")
        l = int(random(1, 2))
        print("Der Hei hat dir",l,"Löcher in dein Schiff gebissen.")
        ha = int(0)

    else:
        w = l * int(4)
        print("Du hast",p,"Planken zum Reparieren. Du hast",l,"Löcher in dein Schiff. Du hast",w,"L Wasser im schiff.")
        print("Was möchtest du machen? Löcher reparieren (1), Wasser aus dem Schiff schöpfen (2) oder den Hei angreifen (3).")
        ak = input(int())

        if ak == 1:
            if l == 0:
                print("Du hast keine Löcher. Du fällst aber auf die Schautze.")
                ak = 4 
            else:
                p = p - int(1)
                l = l - int(1)
                print("Du hast ein Loch repariert. Du hast jetzt",l,"Löcher in dein Schiff.")
                ha = ha + int(1)
        elif ak == 2:
            if w == int(0):
                print("Du hast kein Wasser im schiff. Du fällst aber auf die Schautze.")
                ak = 4 
            else:
                w = w - int(10)
                if w < int(0):
                    w = 0
                else:
                    print("In dein schiff sind",w,"L Wasser.")
        elif ak == 3:
            mh = mh - int(1)
            print("Du hast den Hai getroffen und spürst wie er vor schmerzen schreit.")
        else:

print("Du hast gewonnen und Megadollon besiegt!") #Hier am ende habe ich den Fehler und der fehler lautet expected an indented block
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du das mal gegoogelt? Wozu benutzt man in Python Einrückungen? Und was stimmt dann mit deinem Print nicht?
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Code: Alles auswählen

    ak = input(int())
diese Zeile möchtest du auch nochmal überprüfen

Alle deine Variablen sind Ganzzahlen und damit vom Typ Integer,
es ist nicht nötig dort überall a = int(10) etc zu schreiben.

Zuweisungen wie x = x + 1 kannst du verkürzen in x += 1

Wenn du Python >= 3.6 benutzt, kannst du f-Strings verwenden

Code: Alles auswählen

print(f"Der Hai hat dir {l} Löcher in dein Schiff gebissen.")
Andernfalls ist es mit der .format Methode auch eleganter

Code: Alles auswählen

print("Der Hai hat dir {} Löcher in dein Schiff gebissen.".format(l))
Und wie schon gesagt, die letzte print Anweisung muss unter das else: eingerückt werden,
oder wenn es deine letzte Zeile sein soll, dann ist das else: darüber zuviel
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Zusätzlich zu dem was ThomasL schon geschrieben hat: random.seed macht hier keinen Sinn und kann weg. Die Variablennamen sind allesamt zu kurz, weil man raten muß, wass denn nun mh oder ha bedeutet. Benutze sprechende Namen und niemals l, denn das kann man von 1 nicht unterscheiden. Entgegen der Ankündigung, dass das Schiff untergehen kann, geht das nicht, statt dessen kann der Hai Hei Löcher reparieren und das Wasser fließt wieder von alleine aus dem Schiff; wenn man nicht vor langeweile vorher stirbt, weil man nur Option 3 auswählen kann oder durch die Eingabe von 7 sowieso sofort gewonnen hat.
DrZombeck
User
Beiträge: 2
Registriert: Donnerstag 21. Juni 2018, 21:14

Ich habe mir jetzt noch einmal alles angesehen und überarbeitet aber der Fehler tritt immer noch auf aber diesmal bei den aller letzten else:

Code: Alles auswählen

import random


planken = 30
wasser = 0
löcher = 0
leben = 10
angriff = 0


print("Dein Gegener ist Megadollon!")
print("Du musst entscheiden möchtest du dein schiff Reparieren mit einer Planke, möchtest du wasser schippen oder möchtest du den Hai angreifen.")
print("Wenn 100 L Wasser in dein Schiff gelaufen ist geht es unter! Also pass gut auf.")


while leben != 0:

    if angriff == 3:
        print("Achtung der Hei greift an! Bring dich schnell in sicherheit!")
        löcher = int(random(1, 2))
        print("Der Hei hat dir {löcher} Löcher in dein Schiff gebissen.")
        angriff = 0

    elif wasser == 100:
        print("Dein Schiff geht unter und der Hei hat dich gefressen.")
        break

    else:
        wasser = löcher * 4
        print(f"Du hast {planken} Planken zum Reparieren. Du hast {löcher} Löcher in dein Schiff. Du hast {wasser} L Wasser im schiff.")
        print("Was möchtest du machen? Löcher reparieren (1), Wasser aus dem Schiff schöpfen (2) oder den Hei angreifen (3).")
        aktion = int(input())
    
        if aktion == 1:
            if löcher == 0:
                print("Du hast keine Löcher. Du fällst aber auf die Schautze.")
                aktion = 4 
            else:
                planken -= 1
                löcher -= 1
                print(f"Du hast ein Loch repariert. Du hast jetzt {löcher} Löcher in dein Schiff.")
                angriff += 1
        elif aktion == 2:
            if wasser == 0:
                print("Du hast kein Wasser im schiff. Du fällst aber auf die Schautze.")
                aktion = 4 
            else:
                wasser -= 10
                if wasser < 0:
                    wasser = 0
                else:
                    print(f"In dein schiff sind {wasser} L Wasser.")
        elif aktion == 3:
            leben -= 1
            print("Du hast den Hai getroffen und spürst wie er vor schmerzen schreit.")


if wasser == 100:
    
else:
    print("Du hast gewonnen und Megadollon besiegt!")
[\python]
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Diesmal liegt es daran, dass es keine leeren Blöcke geben darf. Hier einfach die if-Bedingung umdrehen.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

nimm das
print("Dein Schiff geht unter und der Hei hat dich gefressen.")
vor dem break raus
und packe es unter
if wasser == 100:
am Ende.

Du musst jedoch an deiner Spiellogik arbeiten, im Moment kann man nur sinnvoll 10 x Auswahl 3 nehmen und dann ist der Hai erledigt.
Die anderen Optionen bewirken nichts.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten