Transformer le code pseudo jeu en python

voix
1

Assurez-vous l'ordinateur suppose un certain nombre que l'utilisateur choisit entre 1 et 1000 dans aucune affectation de plus de 10 guesses.This utilise un algorithme appelé une recherche binaire. Après chaque hypothèse, l'algorithme réduit le nombre de réponses possibles pour rechercher dans la moitié. Pseudocode pour le programme complet est donné ci-dessous; votre tâche est de transformer en un programme python de travail. Le programme doit commencer par l'impression d'instructions à l'écran, expliquant que l'utilisateur doit choisir un nombre entre 1 et 1000 et l'ordinateur devinera dans pas plus de 10 essais. Il commence alors faire des suppositions, et après chaque deviner, il demande à l'utilisateur des commentaires. L'utilisateur doit être chargé d'entrer -1 si la conjecture doit être inférieure, 0 si elle avait raison, et 1 si elle a besoin d'être higher.When le programme devinera, il doit signaler le nombre de tentatives ont été nécessaires.

pseudocode

- 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

J'ai besoin d'une aide sérieuse! Je ne comprends pas ce genre de choses du tout! C'est tout ce que j'ai

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

et je ne sais même pas si c'est vrai!

Créé 14/06/2009 à 04:28
source utilisateur
Dans d'autres langues...                            


7 réponses

voix
4

Vous êtes évidemment très nouveau à la programmation, et je suppose que c'est l'une des raisons pour lesquelles une réponse tardive de la communauté. Il est difficile de décider par où commencer et comment vous guider dans cet exercice.

Alors, avant d'obtenir une bonne réponse ici que COMPREND vous faire comprendre ce qui se passe là-bas, et vous guider à travers la construction de vous la solution (idéalement!) Je vous suggère de visiter cette page pour essayer d'obtenir une compréhension du problème réel lui-même.

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

En attendant, regardez toutes les réponses sur ce sujet et de garder l'édition de votre message afin que nous savons que vous l'obtenir.

Créé 14/06/2009 à 04:37
source utilisateur

voix
1

Bon, la belle partie sur l'utilisation de Python est qu'il est presque pseudocode de toute façon.

Maintenant, nous allons réfléchir sur les différentes étapes:

  1. Comment obtenez-vous la moyenne entre haute et basse?

  2. Comment pouvez-vous demander à l'utilisateur si le answerr est correct

  3. Que faire des déclarations « si » ressemblent en Python, et comment voulez-vous écrire le pseudo-code comme si les déclarations?

Voici une autre astuce - vous pouvez exécuter python comme un interprète et d'essayer des déclarations individuelles le long, donc, par exemple, vous pourriez faire

high=23
low=7

puis calculer ce que vous pensez devrait être la moyenne ou mi-chemin entre eux (indice: 15)

Créé 14/06/2009 à 04:42
source utilisateur

voix
11

Je ne comprends pas ce genre de choses du tout!

C'est assez problématique, mais, bien, nous allons faire un pas à la fois! Votre devoir à la maison commence:

instructions d'impression à l'utilisateur

Donc, vous ne comprenez pas les choses, dites-vous, ce qui signifie que vous ne comprenez pas cette partie non plus. Eh bien: « l'utilisateur » est la personne qui dirige votre programme. « Instructions » sont des phrases en anglais qui lui dites quoi faire pour jouer le jeu, selon la citation suivante de cette mission parfaitement claire et détaillée:

Le programme doit commencer par l'impression d'instructions à l'écran, expliquant que l'utilisateur doit choisir un nombre entre 1 et 1000 et l'ordinateur devinera dans pas plus de 10 essais.

« print» Est une instruction Python qui émet des informations; par exemple, essayez un programme contenant uniquement

print "some information"

pour voir comment cela fonctionne. OK, pouvez-vous s'il vous plaît modifier votre réponse pour nous montrer que vous avez obtenu ce point, afin que nous puissions passer à la suivante? Ne hésitez pas à commenter ici avec d'autres questions si des mots ou des concepts que je utilise sont encore trop avancés pour vous, et je vais essayer de clarifier!

Créé 14/06/2009 à 04:43
source utilisateur

voix
14

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!

Créé 14/06/2009 à 05:17
source utilisateur

voix
0

Voici quelques conseils pour vous aider à démarrer:

Moyenne = Valeur + Valeur + Valeur [...] / Nombre de valeurs; (Par exemple, ((2 + 5 + 3) / (3))

De nombreux langages de programmation utilisent différentes priorité des opérateurs. Quand je suis la programmation, je l'utilise toujours entre parenthèses quand je ne suis pas sûr sur la priorité de l'opérateur. Dans mon exemple ci-dessus, si vous ne l'avez 2 + 5 + 3/3, le programme ferait des opérations de division avant l'addition - il serait evaulate 2 + 5 + (3/3), ou 2 + 5 + 1 == 7 .

Passer ce pour les utilisateurs de python / * Deuxièmement: vos premiers programmes peuvent bénéficier de la correction const ( ici est une bonne explication de ce qu'il est et pourquoi il est extrêmement bonnes pratiques). S'il vous plaît lire cela et comprendre pourquoi vous devez utiliser des constantes (ou quel que soit l'équivalent python est). Regardez aussi des « nombres magiques » , qui est une grande zone où les constantes sont utilisées. * /

Google « S'il vous plaît Excusez ma chère tante Sally » (NOTE: ce ne traite avec des opérateurs mathématiques, et détient surtout vrai pour les langages de programmation, pour une étude plus complète de la priorité des opérateurs, consulter la documentation de la langue de votre choix pour priorité - noter également que la plupart des programmes ne pas avoir construit des opérateurs de puissance, mais la plupart des bibliothèques standard ont des fonctions POW).

En parlant de la bibliothèque standard: Familiarisez-vous avec les fonctions de la bibliothèque standard (je ne l'ai jamais utilisé Python, je ne sais pas comment elle met en œuvre un SL, mais je serais très surpris si une langue populaire n'avait pas de SL bien développé). Si vous ne savez pas ce qui est, et votre livre / tutoriel ne l'a pas, obtenir un nouveau. Toute ressource qui ne fait pas référence à une bibliothèque standard ne vaut pas le temps.

Enfin: alors que ce poste peut ressembler à ce que je sais que je parle, je suis vraiment encore dans les premières phases de l'apprentissage, tout comme vous. Quelques choses que vous voudrez peut-être se habituer tôt (quand je sautais ces parties, il a ralenti mon apprentissage beaucoup): L'utilisation des références et des pointeurs (Q pour les commentaires: ne Python ont des pointeurs?), La différence entre les données Bénéficiant d'un emplacement mémoire et l'emplacement de mémoire réelle (souvent fois, l'emplacement de la valeur en mémoire sera plus utile que la valeur elle-même, au moins lors de l'écriture des structures de données). Surtout se habituer à la bibliothèque standard; chercher copie, trouver, etc. fonctions de type utiles dans la manipulation de chaînes.

En fait, votre message original relisant, je ne savais pas que cela était une mission de type devoirs. Si vous ne faites pas cela pour le plaisir, vous prendrez probablement jamais mon conseil. Rappelez-vous que la programmation peut être très amusant, si vous ne faites pas une corvée - et ne soyez pas frustrés lorsque votre code ne compile pas (ou ... interpréter), ou vous obtenez des résultats inattendus, etc.

Créé 14/06/2009 à 05:24
source utilisateur

voix
1

Bienvenue sur Stack Overflow!

L'astuce est ici pour se rendre compte que votre programme Python devrait ressembler presque comme le pseudo-code.

Tout d'abord, nous allons essayer de comprendre exactement ce que le pseudocode fait. Si nous devions interagir avec le programme décrit par le pseudo-code, il ressemblerait à quelque chose comme ceci:

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.

etc.

Quand nous pensons d'abord de notre numéro, le programme sait seulement qu'il est compris entre 1 et 1000. Il représente cette connaissance en définissant la variable « faible » à 1 et la variable « élevé » à 1000. Sa première estimation est la moyenne de ces numéros, ce qui est 500.

Après nous disons au programme que notre nombre est supérieur à 500, il met à jour la valeur de « faible » à 501. En d'autres termes, le programme sait alors que notre nombre est compris entre 501 et 1000. Il devine alors la moyenne de 501 et 1000, qui est 750. Nous disons ce que notre nombre est plus faible, de sorte que le programme met à jour la valeur de « élevé » à 749 et devine la moyenne de 501 et 749 suivant, et ainsi de suite jusqu'à ce qu'il devine, ou il a réduit la gamme possible jusqu'à un seul numéro (ce qui signifie son estimation suivante sera à droite).

Revenons donc à l'écriture du programme en Python: Nous traduisons essentiellement la ligne pseudo-code pour la ligne. Par exemple, notre boucle de programme devrait ressembler comme il le fait dans le pseucode:

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

Il n'y a pas besoin d'un que vous avez dans votre code en boucle.

Pour prendre d'entrée que nous pouvons faire quelque chose comme ceci:

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

Maintenant, l'entrée d'utilisateur est stocké dans la variable « réponse », et nous pouvons gérer les possibilités avec si des déclarations comme « si la réponse == -1: » par exemple.

Rappelez-vous d'imprimer les instructions et réglez « haut » et « bas » à leurs valeurs initiales avant d'entrer dans la boucle while et vous devriez être tous ensemble.

Bonne chance!

Créé 14/06/2009 à 06:59
source utilisateur

voix
2

Ne correspond pas à la psudocode exactement, mais cela fonctionne. lol;)

Je sais que c'est un poste méchant vieux mais c'est la même mission que je suis aussi. Voici ce que j'ai fini avec:

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
Créé 25/09/2010 à 20:02
source utilisateur

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