Gra pokój

0

Kolejny projekt żeby wczuć się w pętle. Sugestie mile widziane

x = ("...:::the fucking journey of bob:::...)")
print (x.upper())

print ("4 walls 1 door try too escape")
print ("You wake up in a small room, no windows only one door.")
look_left = "left"
look_right = "right"
cabinet_yes = "yes"
cabinet_no = "no"




def start():
    while True:
        choice_of_looking = input("""In front of you is a locked door. Looks like you gonna need a key. What you gonna do? Look left or right: """)
        if choice_of_looking == look_left:
            print("You see a bed and a small cabinet")
            print (input("Look in the cabinet?" + " yes or no: "))
            if cabinet_no == "no":
                print ("""Kk not pushing on you Bobby. 'Bam Bam' Look's like the noise is coming from the big ass cabin. Tap tap going looking what it is.
                       It is a big black python. Which eat you in one bite :3  the end""")
            elif cabinet_yes == "yes":
                print("""OMFG Bobby there is a gun in the cabinet.'Bam Bam' Look's like the noise is coming from the big ass cabin. Tap tap going looking what it is.
                       It is a big black python. You take the gun and BANG BANG BANG the python is dead and he got the key to the door :3 the end '""")

            break
        elif choice_of_looking == look_right:
            print("You see a door and a big ass cabin. The door is locked, you try to open the cabinet with falls on you and you die :3 the end")


            break
        else:
            print("Don't fuck with me Bob")
start()


0

Ogólnie plik lekko niepythonowy i stworzyłeś Piramid of Doom ale to mało ważne.
Co najważniejsze masz błąd w instrukcji "if", konkretnie tej:
if cabinet_no == "no":
Ten warunek będzie zawsze spełniony.

Jednorazowe inputy też możesz zawrzeć w instrukcji if jeśli nie mają zostać zapamiętane - nie używasz jakiegoś systemu flag, ale tam gdzie masz dwie opcje z czego jedną definiujesz, pozostałe to else, będzie to miało swoje zastosowanie.

Dobrze wziąć pod uwagę że ktoś może wprowadzić słowo dużymi literami, wtedy wypadałoby również je zczytać.

Ponadto linie się mogą kiepsko sklejać na niektórych komputerach, warto wymusić łamanie linii w porządanych miejscach znakiem: '\n' (bez apostrofów oczywiście, to znak nowej linii, pisany dwoma znakami)
Tam gdzie masz potrójne znaki oznaczające stringa, wystarczy bez znaku przełamać linię.

Gdy wykorzystujesz pętle "while True" ona w twoim programie i tak wykona się tylko raz, nie przećwiczyłeś nic jeśli o to ci chodziło. Ponieważ każdy twój wybór kończy się poleceniem break, z wyjątkiem złego wprowadzenia argumentów. Zaś po poprawie twojego cabinet_no które się odbywało zawsze, nie masz możliwości na kolejny wybór po ścieżce w lewo.

Jakbyś chciał jakieś inne ćwiczenia do pętli, mogę ci podrzucić jakieś moje stare ćwiczenia do analizy kodu :)

Ja bym ujął to w ten sposób, spróbuj dojrzeć różnicę:

def main():
    print("...:::the fucking journey of bob:::...)".upper())

    print ("4 walls 1 door try too escape")
    print ("You wake up in a small room, no windows only one door.")
    start()

def start():
    while True:
        choice_of_looking = input("In front of you is a locked door. Looks like you gonna need a key.\nWhat you gonna do? Look left or right: ").lower()
        if choice_of_looking == "right":
            print("You see a door and a big ass cabin. \nThe door is locked, you try to open the cabinet with falls on you and you die :3 \n\t\t~the end")
            break

        elif not choice_of_looking == "left":
            print("Don't fuck with me Bob")
            continue

        while choice_of_looking == "left"
            print("You see a bed and a small cabinet")
            choice_cabinet=input("Look in the cabinet?\nyes or no: ").lower()
            if choice_cabinet == "no":
                print ("Kk not pushing on you Bobby. \n'Bam Bam' Look's like the noise is coming from the big ass cabin.\nTap tap going looking what it is.It is a big black python. Which eat you in one bite :3  \n\t\t~the end")
                
            elif choice_cabinet == "yes":
                print("OMFG Bobby there is a gun in the cabinet. \n'Bam Bam' Look's like the noise is coming from the big ass cabin. \nTap tap going looking what it is. \nIt is a big black python. You take the gun and BANG BANG BANG the python is dead and he got the key to the door :3 \n\t\t~the end ")
            break
        break

if __name__=="__main__":
  main()

@Edit:
Ah, zapomniałem, by uniknąć pyramid of doom warto też sobie rozdzielić to na funkcje :). Miałem w schowku kod we wcześniejszej wersji, podrzucam skopiowany ten poprawny poniżej:

def main():
    print("...:::the fucking journey of bob:::...)".upper())

    print ("4 walls 1 door try too escape")
    print ("You wake up in a small room, no windows only one door.")
    start()

def start():
    while True:
        choice_of_looking = input("In front of you is a locked door. Looks like you gonna need a key.\nWhat you gonna do? Look left or right: ").lower()
        if choice_of_looking == "right":
            right_looking()
            break

        elif choice_of_looking == "left":
            left_looking()
            break

        else:
            print("Don't fuck with me Bob")
            continue
        break

def right_looking():
    print("You see a door and a big ass cabin. \nThe door is locked, you try to open the cabinet with falls on you and you die :3 \n\t\t~the end")

def left_looking():
    print("You see a bed and a small cabinet")
    choice_cabinet=input("Look in the cabinet?\nyes or no: ").lower()
    while True:
        if choice_cabinet == "no":
            print ("Kk not pushing on you Bobby. \n'Bam Bam' Look's like the noise is coming from the big ass cabin.\nTap tap going looking what it is.It is a big black python. Which eat you in one bite :3  \n\t\t~the end")
            break

        elif choice_cabinet == "yes":
            print("OMFG Bobby there is a gun in the cabinet. \n'Bam Bam' Look's like the noise is coming from the big ass cabin. \nTap tap going looking what it is. \nIt is a big black python. You take the gun and BANG BANG BANG the python is dead and he got the key to the door :3 \n\t\t~the end ")
            break

        else:
            print("Please repead.")
            choice_cabinet=input("Look in the cabinet?\nyes or no: ").lower()

if __name__=="__main__":
  main()


0

Dzięki za rady :) nie rozumiem jedynie po co ten kawałek kodu
if name=="main":
main()

0

Oznacza to, bez wdawania się w szczegóły, że funkcja main() zostanie wywołana tylko wtedy, gdy bezpośrednio uruchomisz dany skrypt — czyli w szczególności nie zostanie uruchomiona wtedy, gdy ten skrypt zaimportujesz do innego. Tutaj nie ma to żadnego znaczenia, ale czasami przydaje się coś takiego wtedy, gdy piszesz coś, co do czego podejrzewasz, że funkcje stamtąd przydadzą Ci się w innym projekcie.

Typowo wygląda to tak, że jak piszesz bibliotekę pomocniczą, to sobie tworzysz od razu testy w funkcji test() i uruchamiasz je if __name__ == "__main__".

0

Fakt, ta linia kodu to już moje przyzwyczajenie :P. Dzięki za wyjaśnienie Althorion :).
Ma to też jeszcze jedną ważną zaletę, taki nawyk dodawania wywołania na końcu programu, oszczędzi wyrywania sobie włosów że coś nie jest zdefiniowane i się zapomnisz wywołując funkcję przed jej wczytaniem przez interpreter, który wczytuje je od góry do dołu. Równie skuteczne jest oczywiście wywołanie na samym dole funkcji. Ale brak wtedy zabezpieczenia gdybyś to wczytywał jako kolejny etap w strukturze plików, jak już nadmienił Althorion.

Ale by nie offtop'ować. Dorzucę ci jeszcze jedną rzecz która może ci się przydać do programu, bo zastępuje cały szereg if'ów i innego badziewia, jednym. Ma to świetne zastosowanie gdybyś chciał zrobić na przykład 7-8 wyborów :). Podział na funkcje był zamierzony, bo pozwala ci łatwiej poruszać się po kodzie a ponadto edytować poszczególne wybory.

Przyjrzyj się zastosowaniu słowników w twoim przykładzie, pozwoli ci to ewentualnie bardziej rozwinąć ten program oraz przyszłe :D. Poza funkcjami w słowniku możesz też zastosować inne rzeczy jak przykładowy break.
Aby łatwo było wszystko rozczytać, dodałem też komentarze wyjaśniające.

def main():
    print("...:::the fucking journey of bob:::...)".upper())

    print ("4 walls 1 door try too escape")
    print ("You wake up in a small room, no windows only one door.")
    start()

def start():
    #Definiujemy wybory i odpowiednie akcje (funkcje) dla nich. Przed pętlą, aby nie definiować ich kilkukrotnie.
    choices = { "right": right_looking, "left" : left_looking}
    while True:
        #Wpisujemy nasz wybór
        choice_of_looking = input("In front of you is a locked door. Looks like you gonna need a key.\nWhat you gonna do? Look left or right: ").lower()

        #Jeśli wybór jest jednym ze zdefiniowanych
        if choice_of_looking in choices:
            #wtedy wywołamy akcję dla odpowiedniego wyboru jednym if'em. Ważne by w nawiasach po wywołaniu akcji ze słowników, były argumenty funkcji, ta nie przyjmuje żadnych więc pozostawiamy puste.
            choices.get(choice_of_looking)() #<== Chodzi o te na końcu.
            break

        #Jeśli żaden taki nie będzie zdefiniowany, damy użytkownikowi kolejną szansę.
        else:
            print("Don't fuck with me Bob")
            #I pominiemy pozostałe instrukcje (np break dwie linie niżej), aby nam wróciło do pętli.
            continue

        break
#Pozostałe funkcje są zrobione na tej samej zasadzie.

def right_looking():
    print("You see a door and a big ass cabin. \nThe door is locked, you try to open the cabinet with falls on you and you die :3 \n\t\t~the end")

def left_looking():
    print("You see a bed and a small cabinet")
    choices = {"no" : dont_looking, "yes" : looking}
    while True:
        choice_cabinet=input("Look in the cabinet?\nyes or no: ").lower()
        if choice_cabinet in choices:
            choices.get(choice_cabinet)()
            break

        else:
            print("Please repead.")

def dont_looking():
    print ("Kk not pushing on you Bobby. \n'Bam Bam' Look's like the noise is coming from the big ass cabin.\nTap tap going looking what it is.It is a big black python. Which eat you in one bite :3  \n\t\t~the end")

def looking():
    print("OMFG Bobby there is a gun in the cabinet. \n'Bam Bam' Look's like the noise is coming from the big ass cabin. \nTap tap going looking what it is. \nIt is a big black python. You take the gun and BANG BANG BANG the python is dead and he got the key to the door :3 \n\t\t~the end ")


if __name__=="__main__":
  main()

1 użytkowników online, w tym zalogowanych: 0, gości: 1