Avant de penser à la façon de mettre en œuvre ce en python (ou toute autre langue) permet de regarder le pseudocode, qui ressemble à un très bon plan pour résoudre le problème.
Je suppose qu'il ya une chose que vous pourriez être coincé sur la façon dont est la référence pseudocode les variables , comme highet low. La façon de comprendre les variables est de les considérer emplacements que les valeurs peuvent être stockées. À un moment donné, une variable a une certaine valeur, comme le numéro 5, ou une référence à un fichier ouvert. Cette valeur peut être convoqué à tout moment en utilisant son nom, ou il peut être donné une nouvelle valeur en lui attribuant, et l'ancienne valeur sera oubliée avec la nouvelle valeur qui prend sa place.
La référence à trois variables pseudocode, high, lowet tries. Il vous indique également quelles sont leurs valeurs initiales devraient être. Après la deuxième ligne a exécuté, ces valeurs sont définies à 1000, 1 et 1, respectivement, mais ils prennent de nouvelles valeurs que le programme progresse.
Une autre caractéristique du pseudocode est une boucle conditionnelle, et une analyse de cas de l'entrée d'utilisateur. Votre traduction de la boucle du pseudo - code est incorrect. Dans votre cas, vous avez créé une nouvelle variable, iet que vous avez demandé à votre programme pour exécuter le corps de la boucle avec toutes les valeurs de i entre 1 et 1000. Il est évident que cela n'a pas beaucoup à voir avec le pseudo - code.
Au lieu de cela ce que vous voulez faire est de boucle pour toujours, jusqu'à ce qu'une condition ( ce qui change dans le corps de la boucle) devient fausse. En python, la whiledéclaration fait cela. Si vous connaissez une ifdéclaration, whilesemble le même, mais après que le corps est fait, la condition est réévaluée et le corps est exécuté à nouveau si elle est toujours vrai.
Enfin, l'analyse de cas dans le corps de la boucle nécessite comparer quelque chose à valeurs attendues. Bien que certaines autres langues ont un certain nombre de façons d'exprimer cela, en python , nous avons seulement if- elif- elseclauses.
En dehors de la transformation pseudocode au code de travail, il est sans doute utile de comprendre ce que le programme est en train de faire. La clé ici est la ligne 4, où le programme devine la moyenne des deux valeurs. après que le programme agit sur la façon dont l'estimation a fonctionné.
Dans le premier passage dans la boucle, avec highcontenant 1000 et lowcontenant 1, la moyenne est de 500 ( en fait la moyenne est 500,5, mais puisque nous sommes en moyenne des nombres entiers, devine python que nous voulons que le résultat de la division à être aussi un entier ). Il est évident que guess a seulement une chance de 0,1% d'avoir raison, mais si elle est mauvaise, l'utilisateur devrait nous dire si elle était trop élevé ou trop bas. De toute façon, cette réponse élimine complètement 50% des suppositions possibles.
Si, par exemple, l'utilisateur pensait à un nombre faible, lorsque le programme 500 deviné, l'utilisateur d'indiquer au programme que 500 était trop élevé, et le programme aurait jamais deviner que le nombre était dans la gamme de 501 à travers 1000. Cela peut sauver l'ordinateur beaucoup de travail.
Pour mettre cette information à utiliser, le programme assure le suivi de la gamme des valeurs possibles du nombre d'objectifs pourrait être. Lorsque le nombre deviné est trop élevé, le programme ajuste sa borne supérieure vers le bas, juste en dessous de la conjecture, et si la conjecture était trop faible, le programme ajuste sa borne inférieure vers le haut juste au-dessus de la conjecture.
Lorsque le programme devine à nouveau, la conjecture est juste au milieu de la gamme possible, couper à nouveau la gamme de moitié. Le nombre de suppositions possibles est passé de 1000 à original 500 dans une estimation, à 250 en deux suppositions. Si le programme a la chance terrible et ne peut pas l'obtenir deux (qui est en fait assez probable), puis le troisième, il n'a que 125 numéros gauche à se soucier. Après la quatrième hypothèse, seuls 62 numéros restent à portée. Cela continue, et après huit suppositions, seulement 3 chiffres restent, et le programme tente le nombre du milieu pour son estimation neuvième. Si cela se révèle erroné, un seul numéro est à gauche, et le programme devine!
Cette technique de diviser une plage en deux, puis en continuant à la moitié plus proche est appelé bissectrice et apparaît dans un large éventail des sujets d'intérêt pour la science informatique.
Que diriez-vous CODE! Comme je ne veux pas vous priver de l'expérience d'apprentissage, je vais vous donner quelques extraits qui pourraient vous aider. Python est un langage conçu pour l'exploration interactive, donc tirer votre interprète et de donner ce coup. Je vais poster des exemples avec les messages affichés, ne tapez pas ça.
Voici un exemple en utilisant la whileclause:
>>> x = 1000
>>> while x > 1:
... x = x/2
... print x
...
500
250
125
62
31
15
7
3
1
>>> x
1
Obtenir l' entrée de la console de l'utilisateur doit être fait par la raw_input()fonction. Il retourne juste quels que soient les types d'utilisateurs. Ceci est un peu plus difficile à montrer. Pour simplifier les choses, après chaque ligne de python qui nécessite une entrée, je vais taper « Bonjour tout le monde! » (sans les guillemets)
>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>>
Que diriez-vous combiner des concepts!
>>> 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. peu d'un bug là-bas. Voyez si vous pouvez le corriger!