• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyszukiwanie binarne Python

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
1,281 wizyt
pytanie zadane 14 maja 2018 w Python przez ForeverFriendzone Dyskutant (7,520 p.)

cześć!

chciałem napisać program polegający na tym, że wpisuje się przedział i z pomocą algorytmu wyszukiwania binarnego program ma za zadanie w jak najmniejszej ilości prób odgadnąć naszą wymyśloną liczbę z tego przedziału, oto program:

"""Program z użyciem algorytmu wyszukiwania binarnego"""


print("Witaj to gra w której wybierasz przedział i liczbę, a ja postaram się ją odgadnąć!")
print("Zaczynamy!")
number_low =  int(input("Podaj pierwszą wartość przedziału: "))
number_high = int((input("Podaj drugą (maksymalną) wartość przedziału: ")))
number_high = number_high - 1 # z racji indeksowania liczby od 0
print("A teraz pomyśl o liczbie z tego przedziału!")


# tutaj tworzę listę do wyszukiwania liczby
lista = [i for i in range(number_low,number_high)]
attempt = 0

while number_low <= number_high:

    mid = round((number_low + number_high)/2)
    print("Czy liczba o której pomyślałeś to: ", lista[mid], "?")
    choice = input("Jeżeli tak wpisz: 1, jeżeli nie i jest mniejsza wpisz: 2, jeżeli nie i jest większa wpisz: 3 ")

    if choice == '1':
        print("Świetnie!, udało mi się zgadnąć w ", attempt, " próbie!")
        break

    elif choice == '2':
        number_high = mid
        attempt += 1

    elif choice == '3':
        number_low = mid
        attempt += 1
    else:
        print("Nieprawidłowy wybór!")
        break




Problem polega na tym, że jeżeli z tego przedziału wybiorę sobie przedział 0-100 i liczbę 0 to program dojdzie do tego zera, natomiast jak wybiorę liczbę 100 z tego przedziału to nie dojdzie do tej liczby, bo maksymalnie wskaże liczbę 98. Wydaje mi się, że problem leży gdzieś z zaokrąglaniem, bądź może nie do końca zrozumiałem tutaj indeksowanie. 

I teraz pytanie do Was- co mógłbym zrobić, żeby działał poprawnie? Gdzie leży mój błąd?

 

Dzięki z góry!

1 odpowiedź

0 głosów
odpowiedź 17 maja 2018 przez ProgramistaStepek Nałogowiec (27,320 p.)
wybrane 18 maja 2018 przez ForeverFriendzone
 
Najlepsza
number_high = number_high - 1 # z racji indeksowania liczby od 0

Tutaj tkwi problem. Nie powinieneś odejmować jeden, ale dodać bo obecnie twoja tablica (dla przykładu z 1-100) kończy się na 98 i przy próbie odwołania się przez 

list[mid]

wychodzisz poza tablicę co skutkuje błędem w aplikacji

Podobne pytania

+1 głos
2 odpowiedzi 86 wizyt
pytanie zadane 23 września 2022 w Python przez doskanoness Obywatel (1,240 p.)
+1 głos
1 odpowiedź 192 wizyt
pytanie zadane 25 czerwca 2021 w Algorytmy przez Tanormalnie Użytkownik (550 p.)
0 głosów
0 odpowiedzi 229 wizyt

90,818 zapytań

139,493 odpowiedzi

313,553 komentarzy

60,311 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...