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!