2013-07-20 2 views
0

Я очень новичок в программировании (извините, если я не представляю эту проблему правильно). Это из LPTHW Упражнение 36:NameError: глобальное имя «stealth» не определено

Моя ошибка:

Traceback (most recent call last): 
    File "ex36.py", line 329, in <module> 
    start() 
    File "ex36.py", line 149, in start 
    arena() 
    File "ex36.py", line 161, in arena 
    if stealth == True: 
NameError: global name 'stealth' is not defined 

Мой Допущение: Я подумал: «стелс» было определено в предыдущей функции, начать(), но определение не переносится на арену(). Как это исправить, и почему «скрытность» от одной функции не переносится на другую функцию?

(игра на основе текста в процессе) Мой код:

from sys import argv 

    script, enemy = argv 
    ... 
    def start(): 
     print """ Choose a skill to train in 
     """ 
     stealth = False 
     gun = False 
     knife = False 
     heal = False 
     skill = raw_input("> ") 

     if 'gun' in skill: 
      print """ 
      """ 
      gun = True 
      skill = gun 
     ... 
     else: 
      dead() 

     arena() 

    def arena(): 
     print """ You enter the arena. Will you: 
     hide, hunt for food, or search for water? 
      """ 

     path = raw_input("> ") 

     if "hide" in path: 
      print """ Hide 
      """ 

      if stealth == True: 
       print """ Witness 
       """ 
       witness() 
      else: 
       battle() 
     ... 
     else: 
      print """ Dead 
      """ 
      dead() 
start() 

Все советы очень ценится. Спасибо за помощь.

+0

Может быть переменная настолько незаметным, что Python не может видеть его. – BrenBarn

+0

@BrenBarn, который или его область действия находится только в 'start' и недоступны с' arena' ... –

ответ

0

Переменные, определенные локально в одной функции, имеют локальную область действия и не могут быть автоматически доступны в другой, дизъюнктной функции. Вы можете рассмотреть возможность передачи stealth в arena при вызове от start, например. arena(stealth), а затем stealth будет определен как параметр arena, т.е.

def arena(stealth):