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

Wyszukiwanie binarne Python

VPS Starter Arubacloud
0 głosów
1,455 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,020 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 243 wizyt
pytanie zadane 23 września 2022 w Python przez doskanoness Obywatel (1,240 p.)
+1 głos
1 odpowiedź 353 wizyt
pytanie zadane 25 czerwca 2021 w Algorytmy przez Tanormalnie Użytkownik (550 p.)
0 głosów
0 odpowiedzi 380 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...