2017-03-22 1 views
0

Ich habe beschlossen, ein grundlegendes Spiel in Python 3.3 zu machen, wo das Monster und ein Schatz einzeln auf einer Zahl von 1-100 generiert wird, und der Benutzer hat um eine Nummer zu wählen. Das Programm wird den Benutzer dann informieren, wenn sie zu nahe oder zu hoch sind oder wenn sie etwas getroffen haben.Programm bedeutete, auf eine Funktion zu gehen, sondern stattdessen versuchen und Ausnahme Schleife

Ich habe eine try-Schleife mit Ausnahme von NameError gemacht (wie ich auf Mac bin, wäre es ValueError für Windows). Bevor ich etwas fragen, würde ich mit Ihnen den Code teilen, die ich bisher habe:

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

Wenn ich 1 eingeben, war mein ursprünglicher Plan für das Spiel fortzusetzen und die Positon für den Schatz zu erzeugen und die Monster. Was das Programm macht, stattdessen ist Schleife zurück zu diesem:

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

die weiter eine Endlosschleife von ‚Bitte geben Sie nur 1 oder 2‘ erzeugt - auch wenn ich 1.

Meine Frage eingeben zu tun ist Gibt es also einen einfachen oder komplexen Befehl, den ich tun kann, um zu verhindern, dass diese Schleife fortgesetzt wird und damit das Programm mit der Funktion "generateValues" fortfahren kann?

Ich würde jede Hilfe oder Einsicht, die Sie bereit sind zu teilen, schätzen.

Vielen Dank im Voraus, Leo

EDIT 1:

Karen Clark wies meine while-Schleife aus, und ich habe eine alternative Lösung für sie, unter dem Werk codiert:

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

Ich bin verwirrt durch die While-Schleife. Gibt es einen Grund, warum Sie versuchen, die Werte für immer zu generieren? Sicher würde ein einzelner zufälliger Wert für jeden funktionieren ... –

+0

@Karen Clark Mein Zweck für die while-Schleife war, die Werte zu erzeugen, bis sie zwei verschiedene Werte sind. Wenn für beide Positionen die gleichen Werte erzeugt werden, würde das Programm wiederum unterschiedliche Nummern erzeugen. –

+1

Ich habe es jetzt geändert, schaue auf den unteren Rand des ursprünglichen Beitrags. –

Antwort

1

Das Problem ist in der Funktion generateValues ​​(). Sie müssen sowohl treasurePos als auch monsterPos initialisieren, um zu arbeiten. Versuchen Sie folgendes:

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) 

So stellen Sie sicher, dass sie unterschiedliche Werte geben. Wenn nicht, wird der Code nicht in die Schleife eintreten.

+0

Das hat perfekt funktioniert, vielen Dank für diese Antwort! –

+0

können Sie bitte eine der Antworten auf meine Antwort - Ich habe ein ähnliches Problem. –

0

Sie haben einen Tippfehler beim Aufruf von generateCharPosition(). Die Funktionsdefinition ist korrekt, aber die Aufrufe fehlen ein "i" - generateCharPos i

Verwandte Themen