2016-04-04 8 views
0

Wenn ich versuche, meinen Zug in diesem Spiel zu machen, gibt es mir einen UnboundLocalError für eine Variable. Ich verstehe nicht, warum es passiert, kann mir jemand das erklären und mir sagen, wie ich es beheben kann?UnboundLocalError im textbasierten Spiel

pro = '> ' 
import random 
chamber = random.randint(1, 6) 
def initialMenu(): 
    print "Welcome to Russian Roulette!" 
    print 'Type "R" for the rules or "P" to play.' 
    play_or_rules = raw_input(pro) 
    if play_or_rules == 'r' or play_or_rules == 'R': 
     rules() 
    elif play_or_rules == "P" or play_or_rules == 'p': 
     turn() 
    else: 
     print 'ERROR: Must type in "R" or "P" at the beginning. Restarting program.\n' 
     initialMenu() 

def rules(): 
    print "You have a revolver. You and 1 friend play this game. You load 1 bullet into one of the six chambers." 
    print "On your turn, you can pull the trigger on yourself, on your opponent and then yourself, or spin the chamber." 
    print "You may spin the chamber as much as you like before firing." 
    print "Once you fire at yourself, your turn ends, and your friend's begins." 
    print "Keep in mind that the game isn't completely random; there can be some strategy to it.\n" 
    initialMenu() 
def turn(): 
    print 'Type "Q" to shoot yourself, "W" to shoot your opponent and then yourself, or "E" to spin the chamber.' 
    move = raw_input(pro) 
    if move == 'q' or move == 'Q': 
     if chamber == 1: 
      print "BANG! Your brain splatters on the wall. YOU LOSE" 
     else: 
      print "CLICK! You live another round." 
      chamber += 1 
      if chamber == 7: 
       chamber = 1 
       turn() 
      else: 
       turn() 
    elif move == 'W' or move == "w": 
     if chamber == 6: 
      print "CLICK! Your opponent lives." 
      print "BANG! You don't." 
      print "YOU LOSE" 
      #first shot would be blank, second wouldn't 
     elif chamber == 1: 
      print "BANG! Your opponent's head has a hole in it." 
      print "YOU WIN" 
     else: 
      print "CLICK! Your opponent lives." 
      print "CLICK So do you." 
      chamber += 2 
      if chamber == 7: 
       chamber = 1 
       turn() 
      elif chamber == 8: 
       chamber = 2 
       turn() 
      else: 
       turn() 
    elif move == 'e' or move == 'E': 
     chamber = random.randint(1, 6) 
     print "You spun the chamber, but it is still your turn." 
     turn() 
initialMenu() 

Danke für die Hilfe! Hier ist der Fehler:

Traceback (most recent call last): 
    File "C:/Python27/russianroulette.py", line 62, in <module> 
    initialMenu() 
    File "C:/Python27/russianroulette.py", line 11, in initialMenu 
    turn() 
    File "C:/Python27/russianroulette.py", line 61, in turn 
    turn() 
    File "C:/Python27/russianroulette.py", line 27, in turn 
    if chamber == 1: 
UnboundLocalError: local variable 'chamber' referenced before assignment 
+1

Könnten Sie bitte den Fehler * full * (mit Stack-Trace) posten? Auf diese Weise können die Leute eine Idee haben, wo sie suchen sollen. Das heißt, 'UnboundLocalError' bedeutet, dass Sie versuchen, eine Variable zu verwenden, die nicht existiert. Auf Tippfehler prüfen. – Carpetsmoker

+0

Bitte posten Sie den vollständigen Stacktrace. –

Antwort

4

chamber ist eine globale Variable, und chamber in Ihrer Funktion als lokale Variable gesehen, wenn Python den Umfang der Variablen, um herauszufinden versucht, die UnboundLocalError

in Ihre Ergebnisse
+0

In Ordnung, aber wie kann ich es reparieren? Wenn ich es auswechsele(), wird es jede Kurve neu definieren, und das ist nicht das, was ich will. –

+0

"Globale Kammer" an der Spitze Ihrer Funktion und Sie können Kammer oben definiert verlassen oder vorzugsweise Ihren Code neu strukturieren – Pythonista