Trasforma gioco pseudo codice in Python

voti
1

Rendere il computer indovinare un numero che l'utente sceglie tra 1 e 1000 in non più di 10 guesses.This assegnazione utilizza un algoritmo chiamato una ricerca binaria. Dopo ogni congettura, l'algoritmo riduce il numero di possibili risposte per la ricerca a metà. Pseudocodice per il programma completo è il seguente; il vostro compito è quello di trasformarlo in un programma di lavoro Python. Il programma dovrebbe iniziare stampando le istruzioni sullo schermo, spiegando che l'utente deve scegliere un numero compreso tra 1 e 1000 e il computer indovinare in non più di 10 tentativi. Quindi inizia a fare congetture, e dopo ogni immagino che chiede all'utente di feedback. L'utente deve essere istruito ad entrare -1 se l'ipotesi deve essere inferiore, 0 se era giusto, e 1 se ha bisogno di essere higher.When programma indovina correttamente, si dovrebbe riferire come sono stati necessari molti tentativi.

pseudocodice

- 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

Ho bisogno di aiuto serio! Io non capisco niente di questa roba a tutti! Questo è tutto quello che ho

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()

e io non so nemmeno se è giusto!

È pubblicato 14/06/2009 alle 04:28
fonte dall'utente
In altre lingue...                            


7 risposte

voti
4

Sei ovviamente molto nuovo per la programmazione, e credo che sia una delle ragioni per una risposta ritardata da parte della comunità. E 'difficile decidere da dove cominciare e come guidare l'utente attraverso l'intero esercizio.

Quindi, prima di ottenere una buona risposta qui che include farti capire quello che sta succedendo lì, e guida l'utente attraverso la costruzione di una soluzione da soli (idealmente!) Vorrei suggerire di visitare questa pagina per cercare di ottenere una comprensione del problema vero e proprio.

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

Nel frattempo, guardare tutte le risposte in questa discussione e continuare a modificare il tuo post in modo che sappiamo che stai ricevendo.

Risposto il 14/06/2009 a 04:37
fonte dall'utente

voti
1

D'accordo, la parte bella di utilizzare Python è che è quasi pseudocodice comunque.

Ora, pensiamo i singoli passaggi:

  1. Come si ottiene la media tra alto e basso?

  2. Come si fa a chiedere all'utente se l'answerr è corretto

  3. Che cosa fare "se" dichiarazioni sembrano in Python, e come si può scrivere lo pseudocodice come se affermazioni?

Ecco un altro suggerimento - è possibile eseguire Python come interprete e provare dichiarazioni individuali lungo, così, per esempio, si potrebbe fare

high=23
low=7

poi calcolare ciò che si pensa dovrebbe essere il medio o il punto medio tra di loro (suggerimento: 15)

Risposto il 14/06/2009 a 04:42
fonte dall'utente

voti
11

Io non capisco niente di questa roba a tutti!

Questo è abbastanza problematico, ma, bene, facciamo un passo alla volta! Il vostro compito a casa inizia così:

Stampa istruzioni per l'utente

Quindi non si capisce una qualsiasi delle cose, si dice, in modo che significa non si capisce questa parte sia. Bene: "l'utente" è la persona che è in esecuzione il programma. "Istruzioni" sono frasi in inglese che lui o dirle cosa fare per giocare il gioco, secondo la seguente citazione da questa cessione eccellente chiara e dettagliata:

Il programma dovrebbe iniziare stampando le istruzioni sullo schermo, spiegando che l'utente deve scegliere un numero compreso tra 1 e 1000 e il computer indovinare in non più di 10 tentativi.

" print" È un'istruzione Python che emette le informazioni; per esempio, provare un programma contenente solo

print "some information"

per vedere come funziona. OK, ti invitiamo a modificare la risposta per mostrarci che hai ottenuto questo punto, in modo che possiamo passare a quello successivo? Sentitevi liberi di commentare qui con ulteriori domande se tutte le parole o concetti che sto usando sono ancora troppo avanzato per te, e cercherò di chiarire!

Risposto il 14/06/2009 a 04:43
fonte dall'utente

voti
14

Prima di pensare a come implementare questo in Python (o qualsiasi lingua) consente di guardare la pseudocodice, che si presenta come un buon piano per risolvere il problema.

Direi che una cosa si potrebbe essere rimanere bloccati su è il modo pseudocodice fa riferimento a variabili , come highe low. Il modo per capire le variabili è quello di considerare loro gli slot che i valori possono essere memorizzati. In qualsiasi momento, una variabile ha un certo valore, come il numero 5, o un riferimento a un file aperto. Questo valore può essere convocato in qualsiasi momento, utilizzando il suo nome, oppure può essere dato un nuovo valore assegnando ad esso, e il vecchio valore sarà dimenticato con il nuovo valore di prendere il suo posto.

Il pseudocodice fa riferimento a tre variabili, high, lowe tries. E si dice anche quali sono i loro valori iniziali dovrebbero essere. Dopo la seconda linea è eseguita, tali valori vengono impostati a 1000, 1 e 1, rispettivamente, ma assumono nuovi valori come il programma procede.

Un'altra caratteristica della pseudocodice è un ciclo condizionale, e un'analisi caso di input dell'utente. La vostra traduzione del ciclo del pseudocodice non è corretta. Nel tuo caso, è stata creata una nuova variabile, ie hanno istruito il programma per eseguire il corpo del ciclo ad ogni valore dei compreso tra 1 e 1000. Ovviamente questo non ha molto da fare con il pseudocodice.

Invece ciò che si vuole fare è ad anello per sempre, fino a qualche condizione (che cambia nel corpo del ciclo) diventa falsa. In Python, l' whileaffermazione fa questo. Se si ha familiarità con un ifcomunicato, whileha lo stesso aspetto, ma dopo che il corpo è fatto, la condizione è rivalutata e il corpo viene eseguito di nuovo se è ancora vero.

Infine, l'analisi del caso nel corpo del ciclo richiede il confronto previsto qualcosa da valori. Anche se alcune altre lingue hanno un certo numero di modi per esprimere questo, in python abbiamo solo if- elif- elseclausole.


Al di fuori di trasformare pseudocodice al codice di lavoro, probabilmente è utile per capire ciò che il programma è in realtà facendo. La chiave qui è sulla linea 4, in cui il programma indovina la media dei due valori. dopo che il programma agisce sul modo in cui l'ipotesi funzionato.

Nella prima esecuzione del ciclo, con highcontenente 1000 e lowcontenente 1, la media è 500 (in realtà la media è 500.5, ma dal momento che stiamo media numeri interi, supposizioni pitone che vogliamo il risultato della divisione di essere anche un numero intero ). Ovviamente questo indovinare ha solo una probabilità 0,1% di avere ragione, ma se è sbagliato, l'utente si aspetta di dirci se fosse troppo alto o troppo basso. In entrambi i casi, la risposta elimina completamente il 50% delle possibili ipotesi.

Se, per esempio, l'utente pensava a un numero basso, poi, quando il programma indovinato 500, l'utente avrebbe detto il programma che 500 era troppo alto, e poi il programma non avrebbe mai indovinare che il numero era in gamma di 501 thru 1000. che può salvare il computer un sacco di lavoro.

Per mettere che le informazioni da usare, il programma registra la gamma di possibili valori del numero obiettivo potrebbe essere. Quando il numero intuito è troppo elevata, il programma regola il suo limite superiore verso il basso, sotto l'ipotesi, e se l'ipotesi era troppo basso, il programma regola il suo limite inferiore verso l'alto per appena sopra la congettura.

Quando il programma indovina ancora una volta, l'ipotesi è proprio nel mezzo della gamma possibile, tagliare di nuovo il campo a metà. Il numero di possibili ipotesi è andato dall'originale 1000-500 in una congettura, a 250 in due ipotesi. Se il programma ha fortuna terribile, e non può farlo due (che in realtà è abbastanza probabile), poi dal terzo, ha solo 125 numeri a sinistra di cui preoccuparsi. Dopo la quarta ipotesi, solo 62 numeri rimangono nella gamma. Questo continua, e dopo otto tentativi, solo 3 numeri rimangono, e il programma tenta il numero centrale per la sua nona indovinare. Se questo si rivela essere sbagliato, un solo numero è a sinistra, e il programma indovina esso!

Questa tecnica di dividere una serie a metà e poi continuando a metà più vicino è chiamato bisection e appare in una vasta gamma di argomenti di interesse per l'informatica.


Che ne dite di un po 'di codice! Dal momento che non voglio privarvi della esperienza di apprendimento, mi limiterò a darvi alcuni frammenti che potrebbero aiutarvi a lungo. Python è un linguaggio progettato per l'esplorazione interattiva, in modo da accendere il vostro interprete e dare a questo un colpo. Sarò distacco esempi con le istruzioni indicate, in realtà non tipo quello.

Ecco un esempio utilizzando la whileclausola:

>>> x = 1000
>>> while x > 1:
...     x = x/2
...     print x
...
500
250
125
62
31
15
7
3
1
>>> x
1

Ottenere console di input da parte dell'utente deve essere fatto attraverso la raw_input()funzione di. E 'appena ritorna qualunque siano le tipologie di utenti. Questo è un po 'più difficile da mostrare. Per semplificare le cose, dopo ogni linea di pitone che richiede l'input, io digito "Ciao Mondo!" (senza le virgolette)

>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>> 

Che ne dite di un po 'la combinazione di concetti!

>>> 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
>>> 

Ops. po 'di bug lì. Vedi se riesci a risolvere il problema!

Risposto il 14/06/2009 a 05:17
fonte dall'utente

voti
0

Ecco alcuni suggerimenti per iniziare:

Media = Valore + Valore + Valore [...] / Numero di valori; (Per esempio, ((2 + 5 + 3) / (3))

Molti linguaggi di programmazione di uso differente di precedenza degli operatori. Quando sto programmazione, ho sempre usare parentesi quando sono sicuro di precedenza degli operatori. Nel mio esempio di cui sopra, se hai fatto solo il 2 + 5 + 3/3, il programma avrebbe fatto operazioni di divisione prima di aggiungere - quindi sarebbe evaulate a 2 + 5 + (3/3), oppure 2 + 5 + 1 == 7 .

Saltare questo per gli utenti Python / * In secondo luogo: i suoi primi programmi possono beneficiare di const correttezza ( qui è una buona spiegazione di ciò che è e perché è estremamente buona pratica). Si prega di leggere e capire che il motivo per cui si consiglia di utilizzare le costanti (o qualunque sia il pitone è equivalente). Anche guardare in alto "numeri magici", che è una grande area in cui vengono utilizzate le costanti. * /

Google "Scusate My Dear zia Sally" (NB: questo solo si occupa di operatori matematici, e soprattutto vale per i linguaggi di programmazione, per uno studio più completo di precedenza degli operatori, cercare la documentazione del linguaggio scelto per la precedenza - si noti anche che la maggior parte dei programmi non abbiamo costruito nel operatori di potenza, ma la maggior parte librerie standard hanno funzioni Pow).

Parlando di libreria standard: fare conoscenza con funzioni della libreria standard (non ho mai usato Python, non so come si implementa un SL, ma sarei molto sorpreso se un linguaggio che popolare non ha avuto un ben sviluppato SL). Se non sai di cosa si tratta, e il tuo libro / tutorial non averlo, ottenere una nuova. Ogni risorsa che non fa riferimento una libreria standard è non vale il tempo.

Infine: mentre questo post può sembrare come so di cosa sto parlando, sono davvero ancora nelle prime fasi di apprendimento, proprio come te. Un paio di cose si potrebbe desiderare di abituarsi a presto (quando ho saltato queste parti, ha rallentato il mio imparando molto): L'uso di riferimenti e puntatori (Q per i commenti: non Python ha puntatori?), La differenza tra i dati in una posizione di memoria e la posizione di memoria effettiva (spesso, la posizione del valore in memoria sarà più utile rispetto al valore stesso, almeno quando crei strutture dati). Soprattutto abituarsi alla libreria standard; cercare per la copia, trovare, ecc tipo funzioni utili nella manipolazione di stringhe.

In realtà, rileggendo il tuo post originale, non mi rendevo conto che questo era un compito di tipo compiti a casa. Se non si sta facendo questo per divertimento, si avrà probabilmente mai prendere il mio consiglio. Basta ricordare che la programmazione può essere estremamente divertente, se non fai un lavoro di routine - e non si sente frustrato quando il codice non compila (o ... interpretare), o si ottengono risultati inaspettati, etc.

Risposto il 14/06/2009 a 05:24
fonte dall'utente

voti
1

Benvenuti a Stack Overflow!

Il trucco è quello di rendersi conto che il vostro programma Python dovrebbe apparire quasi come il pseudocodice.

In primo luogo cerchiamo di capire esattamente che cosa il pseudocodice sta facendo. Se dovessimo interagire con il programma descritto dal pseudocodice, sarebbe simile a questa:

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.

eccetera.

Quando abbiamo pensiamo del nostro numero, il programma sa solo che è compreso tra 1 e 1000. Rappresenta questa conoscenza impostando la variabile 'bassa' a 1 e la variabile 'alta' a 1000. La sua prima ipotesi è la media di questi numeri, che si trova a 500.

Dopo che diciamo al programma che il nostro numero è superiore a 500, aggiorna il valore di 'basso' a 501. In altre parole il programma sa poi che il nostro numero è compreso tra 501 e 1000. E 'poi indovina la media di 501 e 1000, che è 750. si dirgli che il nostro numero è più basso, in modo che il programma aggiorna il valore di 'alto' a 749 e indovina il media di 501 e 749 successiva, e così via fino a che non indovina, o è ridotto la gamma possibile fino a un singolo numero (cioè la sua prossima congettura sarà a destra).

Quindi, tornare a scrivere il programma in Python: Siamo fondamentalmente solo Traduciamo la linea pseudocodice per la linea. Per esempio il nostro ciclo di programma dovrebbe apparire esattamente come avviene nella pseucode:

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

Non v'è alcuna necessità di un ciclo for come si deve nel codice.

Per prendere l'input che possiamo fare qualcosa del genere:

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.')

Ora l'input dell'utente viene memorizzato nella 'risposta' variabile, e si può gestire le possibilità con se dichiarazioni come 'se la risposta == -1:' per esempio.

Basta ricordarsi di stampare le istruzioni e impostare 'alta' e 'bassa' ai valori iniziali prima di entrare nel ciclo while e si dovrebbe essere tutto a posto.

In bocca al lupo!

Risposto il 14/06/2009 a 06:59
fonte dall'utente

voti
2

Non corrisponde alla psudocode esattamente ma funziona. lol;)

So che questo è un vecchio post malvagio, ma questo è lo stesso incarico ho ottenuto anche. Ecco quello che ho finito con:

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
Risposto il 25/09/2010 a 20:02
fonte dall'utente

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