2013-12-02 4 views
2

Я пытаюсь написать программный линкор. У меня две игровые матрицы: одна для игрока, одна для компьютера. Они определены за пределами main, потому что я хочу, чтобы они были глобальными переменными, потому что некоторые функции манипулируют/читают их. Я использую Python 2.6.1.Глобальные переменные, объявленные в функции, по-прежнему считаются локальными

#create player game board (10x10 matrix filled with zeros) 
playerBoard = [[0]*10 for i in range(10)] 
#create computer game board (10x10 matrix filled with zeros) 
computerBoard = [[0]*10 for i in range(10)] 

Затем я определяю основную функцию.

#define main function 
def main(): 
    global playerBoard 
    global computerBoard 
    #keepGoing is true 
    keepGoing = True 
    #while keepGoing is true 
    while keepGoing: 
     #call main menu function. Set to response. 
     response = mainMenu() 
     #if response is 1 
     if response == "1": 
      #begin new game 
      #call clearBoards function 
      clearBoards() 
      #call resetCounters function 
      resetCounters() 
      #call placeShips function (player) 
      playerBoard = placeShips(playerBoard, "player") 
      #call placeShips function (computer) 
      computerBoard = placeShips(computerBoard, "computer") 
      #call guessCycler function 
      guessCycler() 
     #if response is 2 
     if response == "2": 
      #keepGoing is false 
      keepGoing = False 

Несмотря на мою декларацию global playerboard и global computerBoard в main PyScripter еще говорит, что те являются локальными переменными. Я этого не понимаю. Как я могу убедиться, что они глобальны?

Документы я уже смотрел на:
Using global variables in a function other than the one that created them
Changing global variables within a function
http://www.python-course.eu/global_vs_local_variables.php

+2

Немного не по теме, но вы не должны иметь свой комментарий на каждой строке, что просто объясняет, что делает следующая строка. Это избыточно. –

+0

Являются ли глобальные варны чем-то, что вам абсолютно необходимо? – gregb212

+2

вы можете проверить значения вне функции. Я не использую PyScripter, возможно, это неверно. – jpwagner

ответ

0

Я определенно думаю, что вам следует пересмотреть, если вы нуждаетесь в них, чтобы быть глобальным - Вы не .-)

дешевый способ, объявить ваши вещи и передать их в качестве параметров функции

def MyFunc(board1): 
    print board1 

board1 = "Very weak horse" 
MyFunc(board1)  

Реальный способ сделать это состоит в создании класса, а затем получить доступ к ним, используя себя

class MySuperClass(): 
    def __init__(self): 
     self.horse = "No way up" 

    def myRealCoolFunc(self): 
      print self.horse 
uhhh = MySuperClass() 
uhhh.myRealCoolFunc()