Předtím, než přemýšlet o tom, jak to provést v jazyce Python (nebo jakémkoliv jazyce) umožňuje pohled na pseudokódu, který vypadá jako docela dobrý plán, jak vyřešit tento problém.
Hádal bych, že jedna věc, kterou by mohla být zaseknete na je způsob, jakým pseudokód odkazuje proměnných , jako je higha low. Cesta k pochopení proměnných je jim zvážit sloty, že hodnoty mohou být uloženy. V kterémkoli okamžiku, proměnná má nějakou hodnotu, jako je číslo 5, nebo odkaz na otevření souboru. Tato hodnota může být svolán kdykoli pomocí své jméno, nebo to může být novou hodnotu přiřazením k němu, a stará hodnota bude zapomenut s novou hodnotou bere své místo.
Pseudokód odkazuje na tři proměnné high, lowa tries. Také vám řekne, jaké jsou jejich počáteční hodnoty by měly být. Poté, co druhý řádek vykonán, tyto hodnoty jsou nastaveny na 1000, 1 a 1, v tomto pořadí, ale berou na nové hodnoty v průběhu programu.
Dalším znakem pseudokódu je podmíněné smyčky, a případ, analýza uživatelského vstupu. Váš překlad smyčka pseudokód je nesprávná. Ve vašem případě, že jste vytvořili novou proměnnou, ia požádaly svůj program spustit tělo smyčky s každou hodnotu i mezi 1 a 1000. Zřejmě to nemá celý hodně co do činění s pseudokódu.
Místo toho, co chcete udělat, je navždy smyčka, dokud některá podmínka (který se mění v těle smyčky) se stane nepravdivé. V pythonu je whilevýrok to dělá. Pokud jste obeznámeni s ifprohlášením, whilevypadá stejně, ale poté, co tělo se děje, je tento stav přehodnotit a tělo je opět spuštěn, pokud je to stále platí.
A konečně, v případě analýzy v těle smyčky vyžaduje porovnání něco očekávané hodnoty. Ačkoli některé jiné jazyky mají řadu způsobů vyjadřování to v pythonu my jen mít if- elif- elsedoložky.
Mimo transformaci pseudocode pracovat kód, je pravděpodobně užitečné pochopit, co program skutečně dělá. Klíčem je zde na lince 4, kde program uhodne průměr dvou hodnot. Po že program působí na tom, jak dobře si myslím vyšlo.
V prvním běhu smyčkou, s highobsahem 1000 a lowobsahující 1, průměr je 500 (ve skutečnosti průměr je 500,5, ale protože jsme v průměru celých čísel, Python odhady, které chceme výsledek divize být také celé číslo ). Je zřejmé, že odhad má jen 0,1% šance, že bude v pořádku, ale když je to špatně, je uživatel očekává, že nám říct, jestli to byla příliš vysoká, nebo příliš nízká. Ať tak či onak, že odpověď zcela eliminuje 50% z možných pokusů.
Pokud se například uživatel myslel na nízkém počtu, pak když program odhadoval 500, uživatel řekne program, který 500 byla příliš vysoká, a pak program by nikdy hádat, že číslo bylo v rozsah 501 přes 1000. To lze uložit počítač do hodně práce.
K tomu, aby tyto informace použít, program sleduje rozsah možných hodnot počtu cílem by mohlo být. Je-li počet uhodnout je příliš vysoká, program upraví jeho horní mez směrem dolů, těsně pod odhad, a v případě, že odhad byl příliš nízký, program upraví jeho spodní hranici nahoru těsně nad odhadu.
Po skončení programu opět hádá se odhad je vpravo ve středu možného rozsahu, znovu řezání rozsah na polovinu. Počet možných pokusů šla z původního 1000 na 500 v jednom odhadu, 250 ve dvou pokusů. V případě, že program má strašný štěstí, a nemůže dostat to dva (což je vlastně docela pravděpodobné), pak třetí, má pouze 125 čísel zleva obávat. Po čtvrtém odhadem tak 62 čísel zůstane v dosahu. Tento postup se opakuje, a po osmi pokusů, jen 3 čísla zůstávají, a program se pokusí prostřední číslo svého devátého odhadem. V případě, že se ukáže, že se mýlím, jen jedno číslo je vlevo, a program se hádá!
Tato technika rozdělením rozsah v polovině a pak pokračovat na bližší polovina je volána bisection a objeví se v širokém rozsahu témat zájmu k informatice.
Co takhle nějaký kód! Vzhledem k tomu, nechci tě připravit o zkušenosti s učením, budu jen vám některé kousky, které vám mohou pomoci s sebou. Python je jazyk určený pro interaktivní průzkum, aby oheň svůj interpret a dát tuto šanci. Budu vysílání příklady s výzvy zobrazené, nejsou ve skutečnosti, že typ.
Zde je příklad použití whileklauzule:
>>> x = 1000
>>> while x > 1:
... x = x/2
... print x
...
500
250
125
62
31
15
7
3
1
>>> x
1
Získání vstupu konzole od uživatele by mělo být provedeno pomocí raw_input()funkce. Je to prostě vrátí za jakýchkoliv typy uživatelů. To je trochu těžší zobrazovat. Pro zjednodušení věci, po každém řádku python, který vyžaduje vstup, budu psát „Hello World!“ (bez uvozovek)
>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>>
Jak o některých kombinací pojmů!
>>> myvar = ''
>>> while myvar != 'exit':
... myvar = raw_input()
... if myvar == 'apples':
... print "I like apples"
... elif myvar == 'bananas':
... print "I don't like bananas"
... else:
... print "I've never eaten", myvar
...
apples
I like apples
mangoes
I've never eaten mangoes
bananas
I don't like bananas
exit
I've never eaten exit
>>>
Oops. Trochu chyby tam. Uvidíme, jestli si můžete opravit!