Poprawienie kodu gry do zgadywania wylosowanej liczby

0

Witam, od niedawna uczę się jak sama nazwa tematu wskazuje Pythona. Jest to mój pierwszy samodzielny program, więc może być masa błędów, ale ja jestem uchachany, bo działa i nie wywala błędów! :D Otóż na dole znajduje się kod, wszystko fajnie, wszystko działa, użytkownik tam sobie zgaduje liczbe, lecz gdy zgadnie wyświetla się ta informacja "Chcesz zakonczyc program czy grac dalej? Jeżeli chcesz grac dalej napisz TAK, jezeli nie chcesz napisz NIE".

Fajnie działa też i to, gdy osoba "grająca" napisze "nie" - program się zamknie, lecz gdy nacisnie "tak", liczba sie o dziwo losuje(dlaczego o dziwo? bo nie ma nic dalej poza tym i to mnie dziwi, zielony w tym jeszcze jestem, dlatego tak).

No nie ważne, lecz gdy użytkownik zgaduje, cały czas się wyświetla na czacie informacja "gramy dalej".

I tu się nasuwa pytanie, jak tego uniknąc, jak zrobić, by użytkownik mógł dalej "normalnie" grać?

Wiem, jak już wspomniałem na dole może być masa błędów, ale dopiero się ucze :)

import random
random.seed()
print('Wymyslilem sobie pewna liczbe od 1 do 100, zgadnij jaka :)')
czyniezgadl = True
odp = True
liczba  = random.randint(1,100)
while czyniezgadl:
    sam = input()
    sam = int(sam)
    if sam == liczba:
        print('Brawo, zgadles moja liczbe!')
    if sam<liczba:
        print('Moja liczba jest wieksza')
    if sam>liczba:
        print('Moja liczba jest mniejsza')
    if sam == liczba:
        odp = input("Chcesz zakonczyc program czy grac dalej? Jezeli chcesz grac dalej napisz TAK, jezeli nie chcesz napisz NIE")
    if odp==("nie") or odp== ("NIE") or odp== ("Nie"):
            print ("Koniec programu!" )
            break
    if odp == ("Tak") or odp == ("tak") or odp == ("TAK"):
            print ("To gramy dalej!")
0

Podziel to na funkcje.

1

Nigdy nic w Pythonie nie napisałam, ale spróbuję odpowiedzieć.
Po odgadnięciu liczby przez użytkownika zmienna czyniezgadl nadal jest równa True, przez co pętla się nie kończy, tylko wykonuje się kolejna iteracja. Liczba się nie losuje, po prostu pozostaje ta sama, która była wylosowana poprzednio. Ponadto, gdy użytkownik w pytaniu na końcu odpowie "Tak", to zmienna **odp **cały czas ma wartość "Tak". A Ty sprawdzasz jej wartość nie tylko po zadaniu pytania o kontynuowaniu gry, ale w każdej iteracji pętli, dlatego później za każdym razem znów pojawia się komunikat "To gramy dalej!".

2

Jak napisał poprzednik, powodem jest niewłaściwa wartość zmiennej odp. Porównywanie wartości tej zmiennej z każdą możliwą kombinacją małych i dużych liter jest mało rozsądne, lepiej przekonwertować odpowiedź, np. na małe litery. Poniższy program działa w Pythonie 2.x i w 3.x. Twój nie działa w 2.x.

import random
random.seed()
try: 
    input = raw_input
except NameError: 
    pass
print('Wymyslilem sobie pewna liczbe od 1 do 100, zgadnij jaka :)')
czyniezgadl = True
liczba  = random.randint(1,100)
odp=""
while czyniezgadl:    
    sam = input()
    sam = int(sam)
    if sam == liczba:
        print('Brawo, zgadles moja liczbe!')
    if sam<liczba:
        print('Moja liczba jest wieksza')
    if sam>liczba:
        print('Moja liczba jest mniejsza')
    if sam == liczba:
        odp = str.lower(input("Chcesz zakonczyc program czy grac dalej? Jezeli chcesz grac dalej napisz TAK, jezeli nie chcesz napisz NIE "))
    if odp=="nie":
            print ("Koniec programu!" )
            break
    if odp == "tak":
            print ("To gramy dalej!")
            liczba  = random.randint(1,100)
            odp = ""

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