Zgadywanie liczb przez komputer

0

Hej,

sprawdzam zadania z książki "Python dla każdego. Podstawy programowania". W zadaniu 4. z rozdziału III mam delikatną zagwozdkę:

Treść zadania:
Tym razem trudniejsze wyzwanie. Napisz pseudokod do programu, w którym gracz i komputer zamienią się rolami w grze z odgadywaniem liczby. To znaczy gracz wybiera losowo liczbę z przedziału od 1 do 100, a komputer ma ją odgadnąć. Zanim rozpoczniesz tworzenie algorytmu, pomyśl, w jaki sposób sam byś zgadywał. Jeśli wszystko się uda, spróbuj napisać kod gry.

Mój kod:

#Program komputer zgaduje liczbe wymyslona przez gracza

import random

number = int(input("Podaj liczbę, którą ma zgadnąć komputer: "))
guess = random.randint(1,100)
tries = 1

print("Pierwsza zgadywana liczba przez komputer to:", guess)
print("Liczba do zgadnięcia to:", number)

while guess != number:
    if guess > number:
        print("Za dużo")
        guess = random.randint(1, guess-1)
        tries += 1
        print("Zgaduję:", guess)
    else:
        print("Za mało")
        guess = random.randint(guess+1,100)
        tries += 1
        print("Zgadujęę:", guess)
print("Komputer zgadł za", tries,"razem.")


Teoretycznie komputer wykonuje zadanie i ostatecznie zgaduje liczbę, ale po drodze nie zwraca uwagi na poprzednie próby, tzn.:

Liczba do zgadnięcia to 50
1 próba komputera 60 - za dużo
2 próba komputera 40 - za mało
3 próba komputera 70 - za dużo

Przy 3 próbie komputer nie wziął pod uwagę 1 próby. Możemy jakoś zasugerować mu jej (1 próby) uwzględnienie?

1

pomyśl, w jaki sposób sam byś zgadywał

Ta wskazówka podoba mi się najbardziej.

Gdybyś sam miał zgadnąć, trzymałbyś w głowie dwa limity dolny i górny.
Na początku, zakładasz że najmniejszą liczbą może być 1, największą zaś 100.
Po tym jak dostałeś komunikat że, dla przykładu, 60 to za dużo, zmniejszasz górny limit do 60. Analogicznie robisz z dolnym, jeżeli 40 to za mało, to ustawiasz dolny limit na 40. I następnie wybierasz losową liczbę z tego przedziału.

2

Możemy jakoś zasugerować mu jej (1 próby) uwzględnienie?

Możemy np. przez wprowadzenie dwóch zmiennych:

from random  import randint

start = 1
end = 100
number = int(input("Podaj liczbę, którą ma zgadnąć komputer: "))

guess = randint(start, end)
tries = 1
print("Pierwsza zgadywana liczba przez komputer to:", guess)
print("Liczba do zgadnięcia to:", number)

while guess != number:
    if guess > number:
        print("Zgaduję:", guess)
        print("Za dużo")
        end = guess - 1
        guess = randint(start, end)
        tries += 1
        
    else:
        print("Zgaduję:", guess)
        print("Za mało")
        start = guess + 1
        guess = randint(start, end)
        tries += 1
        
print("Komputer zgadł za", tries,"razem.")
0

Zrób listę wypełnioną liczbami z całego zakresu zgadywania, przy każdym zgadywaniu wybieraj losowy element tej listy i go z niej usuwaj.

W ten sposób unikniesz powtórzeń. A skoro ma być to ludzka gra, to zakres nie powinien być za duży.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.