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!