Přeměnit herní pseudo kód do pythonu

hlasů
1

Aby se počítač uhodnout číslo, které uživatel zvolí v rozmezí 1 až 1000 ve více než 10 guesses.This přiřazení používá algoritmus zvaný binární vyhledávání. Po každém hádat, algoritmus snižuje počet možných odpovědí na vyhledávání na polovinu. Pseudocode k úplnému programu jsou uvedeny níže; vaším úkolem je proměnit v pracovní python programu. Program by měl začít tím, že tisk pokynů na obrazovce, s vysvětlením, že by měl uživatel vybrat číslo od 1 do 1000 a počítač ji odhadnout na nejvýše 10 pokusů. To pak začne dělat odhady, a po každém hádat, požádá uživatele o zpětnou vazbu. Uživatel by měl být poučen, aby vstoupit do -1 v případě, že odhad musí být nižší, 0, pokud je to pravda, a 1, pokud to musí být higher.When program hádá správně, měl by hlásit, jak bylo požadováno mnoha dohady. V případě, že uživatel zadá neplatnou odpověď, měly by být pokyny zopakoval a uživatel nechá zkuste to znovu.

Pseudo kód

- Print instructions to the user  
-Start with high = 1000, low = 1, and tries = 1 
- While high is greater than low   
  - Guess the average of high and low  
  - Ask the user to respond to the guess  
  - Handle the four possible outcomes:  
    - If the guess was right, print a message that tries guesses were required and quit the program
    - If the guess was too high, set high to one less than the guess that was displayed to the user and increment tries  
    - If the guess was too low, set low to one more than the guess that was displayed to the user and increment tries
    - If the user entered an incorrect value, print out the instructions again
- high and low must be equal, so print out the answer and the value of tries

Potřebuju nějakou vážnou pomoc! Nerozumím žádné z těchto věcí vůbec! To je vše, co mám

def main(x, nums, low, high):
        input(Enter -1 if the guess needs to be lower, 0 if the guess was right, or 1 if the guess needs to be higher: )
    for i in range (1, 1001):

main()

a já ani nevím, jestli je to pravda!

Položena 14/06/2009 v 04:28
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
4

Vy jste zřejmě programování zcela nový, a myslím, že to je jeden z důvodů opožděné reakce ze strany komunity. Je těžké se rozhodnout, kde začít a jak vás provede celým tímto cvičením.

Takže předtím, než se dostanete dobrou odpověď zde, že zahrnuje takže budete rozumět tomu, co se tam děje, a vede vás prostřednictvím budování řešení sami (v ideálním případě!) Bych doporučujeme navštívit tuto stránku, aby se pokusili získat přehled o samotném skutečného problému.

http://www.openbookproject.net/pybiblio/gasp/course/4-highlow.html

Do té doby, podívejte se na všechny odpovědi v tomto vlákně a udržet úpravách svůj příspěvek, takže víme, že jste marně.

Odpovězeno 14/06/2009 v 04:37
zdroj uživatelem

hlasů
1

V pořádku, pěkné část o používání Python je, že je téměř stejně pseudocode.

Nyní se pojďme přemýšlet o jednotlivých krocích:

  1. Jak se vám průměr mezi vysokým a nízkým?

  2. Jak si požádat uživatele v případě, že je správné answerr

  3. Co dělat „pokud“ prohlášení vypadat v Pythonu, a jak byste psát pseudokódu, jako kdyby prohlášení?

Tady je další tip - můžete spustit Python jako interpret a vyzkoušet jednotlivá prohlášení spolu, takže například, jsi to mohl udělat

high=23
low=7

pak spočítat, co si myslíte, že by mělo být průměrné nebo střed mezi nimi (tip: 15)

Odpovězeno 14/06/2009 v 04:42
zdroj uživatelem

hlasů
11

Nerozumím žádné z těchto věcí vůbec!

To je dost problematické, ale v pořádku, pojďme udělat jeden krok v čase! Váš úkol domácí úkol začíná:

Tiskové pokyny pro uživatele

Takže vy nerozumíte Jedno ze věcí, říkáte, tak to znamená, že nemusíte tuto část rozumět jeden. No: „uživatel“ je osoba, která běží svůj program. „Pokyny“ jsou anglické věty, které jej nebo řekni jí, co má dělat, hrát hry, podle následujícího citátu z této výborně jasné a podrobné zadání:

Program by měl začít tím, že tisk pokynů na obrazovce, s vysvětlením, že by měl uživatel vybrat číslo od 1 do 1000 a počítač ji odhadnout na nejvýše 10 pokusů.

print“ Je Python pokyn, který vysílá informace; Například, zkuste program obsahující pouze

print "some information"

aby viděli, jak to funguje. OK, můžete upravte svou odpověď, aby nám ukázal, že jste dostali tento bod, takže se můžeme přesunout na ten příští? Neváhejte a tady komentovat s dalšími dotazy Pokud některý slov nebo konceptů Já používám jsou stále příliš pokročilý pro vás, a já se pokusím objasnit!

Odpovězeno 14/06/2009 v 04:43
zdroj uživatelem

hlasů
14

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!

Odpovězeno 14/06/2009 v 05:17
zdroj uživatelem

hlasů
0

Zde je několik rad, které vám pomohou začít:

Průměrná hodnota = + hodnota + hodnota [...] / Počet hodnot; (Například ((2 + 3 + 5) / (3)),

Mnoho programovací jazyky používají jiný operátor přednost. Když jsem programování, jsem vždy používat závorky, když jsem jisti priority operátorů. V mém výše uvedeném příkladu, pokud jste jen 5 + 2 + 3/3, program udělá dělení operace před přidáním - takže by evaulate až 2 + 5 + (3/3), nebo 2 + 5 + 1 == 7 ,

Skip to pro uživatele python / * Za druhé: co nejdříve programy mohou mít prospěch z const správnost ( zde je dobré vysvětlení, co to je a proč je velmi dobré praxe). Přečtěte si prosím, že i pochopit, proč byste měli používat konstanty (nebo co python ekvivalent je). Také vyhledat „magická čísla“, což je velká oblast, kde jsou použity konstanty. * /

Google „Prosím, omluvte My Dear teta Sally“ (Poznámka: Tento jen se zabývá matematických operátorů, a většinou platí i pro programovací jazyky, pro komplexnější studii priority operátorů, najdeme dokumentaci zvoleném jazyce pro prioritou - rovněž na vědomí, že většina programů nemají zabudovanou v provozovateli elektrárny, ale většina standardní knihovny mají Pow funkce).

Když už mluvíme o standardní knihovny: Seznamte se s standardních funkcí knihoven (nikdy jsem použil Python, nevím, jak se to realizuje SL, ale byl bych velmi překvapen, kdyby jazyk, oblíbený neměl dobře vyvinutý SL). Pokud si nevíte, co to je, a vaše kniha / tutorial nemá to, dostat novou. Veškeré prostředky, které neodkazuje na standardní knihovny není stojí čas.

Na závěr: zatímco tento příspěvek může vypadat jako já vím, co mluvím, jsem opravdu ještě v raných fázích učení, stejně jako vy. Pár věcí, které byste mohli chtít, aby si zvyknout na brzy (když jsem přeskočil tyto díly, zpomalil moje učení hodně): Použití odkazů a ukazatelů (Q k připomínkám: nemá Python má ukazatele?), Rozdíl mezi daty v umístění v paměti a aktuální umístění v paměti (často časy, bude poloha hodnotou v paměti být užitečnější než hodnota samotné, alespoň při psaní datové struktury). Zvlášť zvyknout na standardní knihovny; hledat pro kopírování, vyhledávání, atd. Typ funkce užitečné při manipulaci s řetězci.

Ve skutečnosti, opakované načítání své původní místo, neuvědomil jsem si to byl úkol typu úkoly. Pokud nejste dělat to pro zábavu, budete pravděpodobně nikdy vzít mou radu. Jen nezapomeňte, že programování může být velmi zábavné, pokud nechcete, aby to fuška - a nechápu frustrovaný, když váš kód není kompilace (nebo ... interpretovat), nebo získat neočekávané výsledky, atd

Odpovězeno 14/06/2009 v 05:24
zdroj uživatelem

hlasů
1

Vítejte na přetečení zásobníku!

Trik je si uvědomit, že váš Python program by měl vypadat skoro jako pseudocode.

První pojďme se pokusit pochopit, co přesně pseudocode dělá. Kdybychom měli k interakci s programem popsaného pseudokódu, bude to vypadat asi takto:

Think of a number between 1 and 1000 and press Enter.
>>> 
Is it 500? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.
>>> 1
Is it 750? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.
>>> -1
Is it 625? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.

atd.

Když jsme se poprvé přemýšlet o naší řadě, program ví jen to, že se pohybuje mezi 1 a 1000. To představuje toto poznání nastavením proměnné ‚low‘ na hodnotu 1 a proměnnou ‚vysoké‘ až 1000. Jeho první odhad je průměrný tito čísla, což je 500.

Poté, co jsme říci programu, že náš počet je větší než 500, aktualizuje hodnotu ‚low‘ na 501. Jinými slovy pak program ví, že náš počet se pohybuje mezi 501 a 1000. Poté se hádá o průměru 501 až 1000, což je 750. jsme to říci, že náš počet je nižší, takže program aktualizuje hodnotu ‚vysoká‘ až 749 a hádá, průměr 501 a 749 dále, a tak dále, dokud se hádá pravdu, nebo to zúžilo možný rozsah dolů na jedno telefonní číslo (to znamená její další odhad bude vpravo).

Takže zpět k psaní programu v jazyce Python: jsme v podstatě jen přeložit pseudocode linka pro linku. Například naše programová smyčka by měl vypadat stejně jako to dělá v pseucode:

while high > low:
  # Guess (high + low) / 2 and ask user to respond
  # Handle user response

Neexistuje žádná potřeba pro smyčce, jak máte ve svém kódu.

Chcete-li mít vstup můžeme udělat něco takového:

guess = (high + low) / 2
response = input('Is it ' + str(guess) + '? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.')

Nyní je vstup uživatele je uložena v proměnné ‚odpověď‘, a můžeme zvládnout možnosti se v případě prohlášení typu ‚jestli reakce == -1:‘ např.

Jen nezapomeňte vytisknout pokyny a nastavení ‚vysoké‘ a ‚nízké‘ na jejich počáteční hodnoty před vstupem do while, a vy byste měli být vše hotovo.

Hodně štěstí!

Odpovězeno 14/06/2009 v 06:59
zdroj uživatelem

hlasů
2

Neodpovídá psudocode přesně, ale funguje to. lol)

Vím, že je to zlý starý příspěvek, ale to je stejný úkol mám také. Zde je to, co jsem skončil s:

high = 1000
low = 1
print "Pick a number between 1 and 1000."
print "I will guess your number in 10 tries or less."
print "Or at least i'll try to.  ;)"
print "My first guess is 500."
guess = 500
tries = 0
answer = 1
print "Enter 1 if it's higher."
print "Enter -1 if it's lower."
print "Enter 0 if I guessed it!"
print ""
while (answer != 0):
    answer = int(raw_input("Am I close?"))
    if answer == 1:
        tries = tries + 1
        low = guess
        guess = (high + low) / 2
        print "My next guess is:"
        print guess
    elif answer == -1:
        tries = tries + 1
        high = guess
        guess = (high + low) / 2
        print "My next guess is:"
        print guess
    elif answer == 0:
        tries = tries + 1
        print "Your number is:"
        print guess
        print "Yay! I got it! Number of guesses:"
        print tries
Odpovězeno 25/09/2010 v 20:02
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more