#!/usr/bin/python3 # knihovna requests implementuje komunikaci přes protokol HTTP import requests import sys # načteme údaje ze vstupu rozsah = int(input()) url = input() # funkce dotaz zapouzdřuje síťovou komunikaci # dostane cislo a vrátí textovou odpověď od serveru, případně ukončí program chybou def dotaz(cislo): # v následujícím bloku může nastat výjimka (např. nefunkční síť) try: # polož dotaz HTTP GET metodou odpoved = requests.get(url + '&q=' + str(cislo)) # a z odpovědi zahoď bílé znaky na konci a na začátku text = odpoved.text.rstrip() # pokud výjimka nastala except requests.exceptions.RequestException as e: print('Komunikace se serverem selhala: ' + str(e), file=sys.stderr) # skonči chybou sys.exit(1) # pokud HTTP status kód není 200 if odpoved.status_code != 200: print('Server hlasi chybu: ' + text, file=sys.stderr) # skonči chybou sys.exit(1) return text # hlavní kód už je klasické binární vyhledávání # Petrovo číslo je v intervalu od = 1 do = rozsah # dokud je interval neprázdný while od <= do: # spočítáme prostřední prvek… stred = (od + do) // 2 # …a dotážeme se na něj odpoved = dotaz(stred) # pokud jsme se trefili, máme vyhráno if odpoved == 'Trefa': print(stred) sys.exit(0) # pro Pridej odpověď leží v pravé polovině elif odpoved == 'Pridej': od = stred + 1 # nezapomenout + 1, to je střed a ten můžeme vyloučit # pro Uber odpověď leží v pravé polovině elif odpoved == 'Uber': do = stred - 1 # nezapomenout - 1, to je střed a ten můžeme vyloučit # jinak nás asi server trollí else: assert False, f'Neznama odpoved {odpoved}' # pokud jsme se dostali až sem, znamená to, že interval je prázdný a Petrovo číslo neexistuje assert False, 'Cislo neexistuje'