Zgadywanie liczb przez komputer

Odpowiedz Nowy wątek
2020-02-11 21:57

Rejestracja: 1 rok temu

Ostatnio: 6 dni temu

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?

edytowany 2x, ostatnio: slepysnajper, 2020-02-11 21:59

Pozostało 580 znaków

2020-02-11 22:11

Rejestracja: 2 lata temu

Ostatnio: 3 godziny temu

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.

Binary search?:) - lion137 2020-02-11 22:21
Też można, tylko to już wersja, powiedzmy, "advanced" :D - atmal 2020-02-11 22:23

Pozostało 580 znaków

2020-02-11 22:20

Rejestracja: 2 lata temu

Ostatnio: 1 dzień temu

1

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.")

Pozostało 580 znaków

2020-02-11 22:46

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

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.

edytowany 2x, ostatnio: Spine, 2020-02-11 22:49

Pozostało 580 znaków

Odpowiedz

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