2017-03-22 1 views
0

J'ai décidé de faire un jeu de base en Python 3.3 où le monstre et un trésor est généré individuellement sur un nombre de 1-100, et l'utilisateur a choisir un nombre. Le programme informera alors l'utilisateur s'il est trop proche ou trop haut ou s'il a touché quelque chose.Programme destiné à aller à une fonction, mais à la place suit essayer et sauf la boucle

J'ai fait une boucle d'essai avec un exception NameError (comme je suis sur Mac, ce serait ValueError pour Windows). Avant de demander quoi que ce soit, je voudrais partager avec vous le code que j'ai jusqu'à présent:

import time, random 

def generateValues(): 
    global treasurePos, monsterPos 
    while treasurePos != monsterPos: 
     treasurePos = random.randint(1, 100) 
     monsterPos = random.randint(1, 100) 
    print(treasurePos) 
    print(monsterPos) 

def mainmenu(): 
    time.sleep(0.5) 
    print("welcome to this game, press 1 to play or 2 to quit") 
    time.sleep(0.5) 
    try: 
     option = int(input("What would you like to do: ")) 
     if option == (1): 
      time.sleep(0.5) 
      generateValues() 
     elif option == (2): 
      quit() 
    except NameError: 
     time.sleep(0.5) 
     print("please enter only 1 or 2")    



mainmenu() 

Si j'entre 1, mon plan original était pour le jeu de continuer et de générer les positons pour le trésor et la monstre. Ce que le programme fait, au contraire, est la boucle de retour à ceci:

except NameError: 
     time.sleep(0.5) 
     print("please enter only 1 or 2") 

qui crée en outre une boucle infinie de « s'il vous plaît entrer seulement 1 ou 2 » - même quand je fais entrer 1.

Ma question est Donc, y a-t-il une commande simple ou complexe que je peux faire pour arrêter cette boucle et permettre au programme de continuer à la fonction 'generateValues'?

J'apprécierais n'importe quelle aide ou perspicacité que vous êtes disposé à partager.

Merci à l'avance, Leo

EDIT 1:

Karen Clark a ma boucle while et j'ai codé une solution alternative pour ci-dessous qui fonctionne:

def generateValues(): 
    global treasurePos, monsterPos 
    treasurePos = 0 
    monsterPos = 0 
    treasurePos = random.randint(1, 3) 
    monsterPos = random.randint(1, 5) 
    if treasurePos == monsterPos: 
     generateValues() 
    else: 
     print(treasurePos) 
     print(monsterPos) 
+0

Je suis confus par la boucle while. Y a-t-il une raison pour laquelle vous essayez de générer les valeurs pour toujours? Sûrement une seule valeur aléatoire pour chacun fonctionnerait ... –

+0

@Karen Clark Mon but pour la boucle while était de générer les valeurs jusqu'à ce qu'elles soient deux valeurs différentes. Si les mêmes valeurs sont générées pour les deux positions, le programme générera à nouveau des nombres différents. –

+1

Je l'ai changé maintenant, regardez en bas du message original. –

Répondre

1

Le problème est dans la fonction generateValues ​​(). Vous devez initizalize treasurePos et monsterPos pour travailler. Essayez ceci:

def generateValues(): 
    global treasurePos, monsterPos 
    treasurePos = 10 
    monsterPos = 1 
    while treasurePos != monsterPos: 
     treasurePos = random.randint(1, 100) 
     monsterPos = random.randint(1, 100) 
    print(treasurePos) 
    print(monsterPos) 

Assurez-vous simplement de leur donner des valeurs différentes. Si, le code ne sera pas entrer dans la boucle.

+0

Cela a fonctionné parfaitement, merci beaucoup pour cette réponse! –

+0

pouvez-vous s'il vous plaît regarder l'une des réponses à ma réponse - j'ai un problème similaire. –

0

Vous avez une faute de frappe lors de l'appel de generateCharPosition(). La définition de la fonction est correcte, mais les appels manquent un "i" - generateCharPos i tion