Powtarzanie gry tekstowej przy konkretnej ilości prób

0

Witam realizuje zadanie z książki "Dawson.M - Pyton dla każdego", mam zadanie w którym musze zmienić program gra liczbowa w taki sposób aby po dziesięciu próbach, program wyświetlił komunikat, że była to ostatnia próba no i tak zrobiłem i działa, o to kod:

import random

print("\tWitaj w grze 'Jaka to liczba'!")
print("\nMam na myśli pewną liczbę z zakresu od 1 do 100.")
print("Spróbuj ją odgadnąć w jak najmniejszej liczbie prób.\n") 

the_number = random.randint(1, 100)
guess = int(input("Ta liczba to: "))
tries = 1

while guess != the_number:
    if guess > the_number:
        print("Za duża...")
    else:
        print("Za mała...")
    guess = int(input("Ta liczba to: "))
    tries += 1
    if tries == 10:
        print("To była ostatnia proba")
        break                # po wpisaniu tutaj break, program źle się wykonuje przy drugiej próbie. 
        


print("Odgadłeś! Ta liczba to", the_number)
print("Do osiągnięcia sukcesu potrzebowałeś tylko", tries, "prób!\n")

input("\n\nAby zakończyć program, naciśnij klawisz Enter.")

Od siebie dodałem linie kodu if tries == 10: print("To była ostatnia proba") i wszystko jest w miarę git, ale pomyślałem sobie, że można tą pętle i jednocześnie cały program przerwać i wpisałem pod spodem break i za każdym razem w drugiej próbie obojętnie jaką liczbę wpiszę np:2 to pokazuje komunikat:

Ta liczba to: 1
Za mała...
Ta liczba to: 2
Odgadłeś! Ta liczba to 40
Do osiągnięcia sukcesu potrzebowałeś tylko 2 prób! 

PS: Oczywiście uwzględniam wcięcia, nie wiem czemu one się tutaj nie wyświetliły.

2

Wrzuć to sformatowane z wcięciami bo nie wiadomo gdzie to break dałeś

0

Już poradziłem sobie, zrobiłem tak:

import random

import sys
print("\tWitaj w grze 'Jaka to liczba'!")
print("\nMam na myśli pewną liczbę z zakresu od 1 do 100.")
print("Spróbuj ją odgadnąć w jak najmniejszej liczbie prób.\n") 

the_number = random.randint(1, 100)
guess = int(input("Ta liczba to: "))
tries = 1

while guess != the_number:
....if guess > the_number:
    ....print("Za duża...")
    else:
    ....print("Za mała...")
    guess = int(input("Ta liczba to: "))
    tries += 1
    if tries == 10:
    ....print("To była ostatnia proba")
    ....sys.exit ()


print("Odgadłeś! Ta liczba to", the_number)
print("Do osiągnięcia sukcesu potrzebowałeś tylko", tries, "prób!\n")
    

input("\n\nAby zakończyć program, naciśnij klawisz Enter.")
1

Dlaczego przy drugiej, skoro masz warunek if tries == 10:? Chyba, że przedtem miałeś 2.

sys.exit ()

To słabe podejście. W tak małym programiku to nie będzie miało i tak znaczenia, ale jak tylko trochę większy będziesz mieć program, to będziesz chciał to powkładać w jakieś funkcje albo zrobić np. możliwość grania wiele razy. A wychodząc z całego skryptu to uniemożliwisz. Więc break jest tu lepsze od sys.exit(), bo break wychodzi tylko z pętli, więc ma działanie bardziej lokalne. A sys.exit() globalnie wychodzi z całego programu. Więc jak coś się ma wykonać później, nie wykona się.

Poza tym wystarczy, że przy logowaniu komunikatu później sprawdzisz warunek, czy gracz faktycznie zgadł liczbę:

if guess == the_number:
    print("Odgadłeś! Ta liczba to", the_number)
    print("Do osiągnięcia sukcesu potrzebowałeś tylko", tries, "prób!\n")
else:
    print("Nie zgadłeś! Ta liczba to", the_number)

input("\n\nAby zakończyć program, naciśnij klawisz Enter.")
1

@LukeJL:

To słabe podejście. W tak małym programiku to nie będzie miało i tak znaczenia, ale jak tylko trochę większy

Pewnie, koledze łatwiej zabić chorego pacjenta niż leczyć ;)

0
while (guess != the_number) and (tries<10):
  ...
  ...
# dalej (po while) kod od @LukeJL w poście wyżej
0

Dzięki, zaraz popróbuje.

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