2013-04-23 11 views
-2

ive просто попробовал запустить мой скрипт python и получить недопустимую синтаксическую ошибку. Я дважды проверил проблему и все еще не вижу проблемы, может ли кто-нибудь увидеть проблему? Ниже приведен код, если кто-то может помочь увидеть проблему.python invalid синтаксическая ошибка

спасибо.

import random 
import Tkinter 

class life (Tkinter.Frame): 

    def __init__(self,x,y): 
     Tkinter.Frame.__init__(self) 
     self.master.title("The Game Of Life") 
     self.grid = [[False for j in range (y)] for i in range (x)] 
     universe = Tkinter.Frame(self) 
     def createButton (i,j): 
      bitmap=None 
      if self.grid[i][j]:bitmap ='gray75' 
      gridEntry = Tkinter.Button(universe, bitmap=bitmap) 
      gridEntry.grid(row=i, column =j) 
     self._applyToEachCellOfGrid (createButton) 
     universe.pack(side='top') 
     scale= Tkinter.Scale(self, orient = Tkinter.HORIZONTAL, from_=1, to =10, 
          command=self.setPeriod) 
     scale.pack(side='top') 
     quit=Tkinter.Button(self, text='Quit', command=self.quit) 
     quit.pack(side='left') 
     run=Tkinter.Button(self, text='Run' , command=self.run) 
     run.pack(side='right') 
     pause=Tkinter.Button(self, text='Pause', command=self.pause) 
     pause.pack(side='right') 
     self.pack() 

    def _applyToEachCellOfGrid (self, function) : 
     for i in range (len(self.grid)): 
      for j in range (len(self.grid[i])): 
       function(i,j) 

    def populateGridRandomly(self,x): 
     random.seed() 
     def setRandomly(i,j): 
      if random.random()<x:self.grid[i][j]= True 
     self._applyToEachCellOfGrid(setRandomly) 

    def calculateNextGeneration(self): 
     newGrid=[[ False for j in range (len (self.grid[i]))] for i in range (len (self.grid))] 
     def calculateLiveness(x,y): 
      count = 0 
      for i in range (x-1, x+2): 
       if 0 <=i<len (self.grid[i]): 
        if ((i !=x)or(j !=y)) and self.grid[i][j]:count +=1 
      if self.grid[x][y]:return 2 <= count <=3 
      else: return count ==3 
     def setNewGrid(x,y): 
      newGrid[x][y]= calculateLiveness(x,y) 
     self._applyToEachCellOfGrid (setNewGrid) 
     self.grid = newGrid 

    def pause(self): 
     print 'pause called.' 

    def run(self): 
     print 'run called' 

    def setPeriod (self, value): 
     print 'setPeriod called with value' , value 

if __name__ =="__main__': 
    game=Life(8,10) 
    game.mainloop() 
+1

И сообщение об ошибке? – 2013-04-23 18:13:56

+1

Опечатка внизу: она должна быть «__main__», а не «__main__» – Johnny

+0

allender, когда я запускаю модуль, появляется «недопустимая синтаксическая ошибка» – user1957509

ответ

5

Если вы используете отверстие ", вы должны использовать закрывающий ", а также, не ':

File "synt2.py", line 63 
    if __name__ =="__main__': 
          ^
SyntaxError: EOL while scanning string literal 
+0

и это не единственная синтаксическая ошибка, с которой он получил – Johnny

+0

@Johnny: есть и другие ошибки, но после исправления этого я не получаю синтаксических ошибок в Python 2. Что вы имеете в виду? – DSM

+0

Nam eError: name 'Life' не определен (строка 64) – Johnny

0

здесь ваш код, работает.

import random 
import Tkinter 

class Life (Tkinter.Frame): 

    def __init__(self,x,y): 
     Tkinter.Frame.__init__(self) 
     self.master.title("The Game Of Life") 
     self.grid = [[False for j in range (y)] for i in range (x)] 
     universe = Tkinter.Frame(self) 
     def createButton (i,j): 
      bitmap=None 
      if self.grid[i][j]:bitmap ='gray75' 
      gridEntry = Tkinter.Button(universe, bitmap=bitmap) 
      gridEntry.grid(row=i, column =j) 
     self._applyToEachCellOfGrid (createButton) 
     universe.pack(side='top') 
     scale= Tkinter.Scale(self, orient = Tkinter.HORIZONTAL, from_=1, to =10, 
          command=self.setPeriod) 
     scale.pack(side='top') 
     quit=Tkinter.Button(self, text='Quit', command=self.quit) 
     quit.pack(side='left') 
     run=Tkinter.Button(self, text='Run' , command=self.run) 
     run.pack(side='right') 
     pause=Tkinter.Button(self, text='Pause', command=self.pause) 
     pause.pack(side='right') 
     self.pack() 

    def _applyToEachCellOfGrid (self, function) : 
     for i in range (len(self.grid)): 
      for j in range (len(self.grid[i])): 
       function(i,j) 

    def populateGridRandomly(self,x): 
     random.seed() 
     def setRandomly(i,j): 
      if random.random()<x:self.grid[i][j]= True 
     self._applyToEachCellOfGrid(setRandomly) 

    def calculateNextGeneration(self): 
     newGrid=[[ False for j in range (len (self.grid[i]))] for i in range (len (self.grid))] 
     def calculateLiveness(x,y): 
      count = 0 
      for i in range (x-1, x+2): 
       if 0 <=i<len (self.grid[i]): 
        if ((i !=x)or(j !=y)) and self.grid[i][j]:count +=1 
      if self.grid[x][y]:return 2 <= count <=3 
      else: return count ==3 
     def setNewGrid(x,y): 
      newGrid[x][y]= calculateLiveness(x,y) 
     self._applyToEachCellOfGrid (setNewGrid) 
     self.grid = newGrid 

    def pause(self): 
     print 'pause called.' 

    def run(self): 
     print 'run called' 

    def setPeriod (self, value): 
     print 'setPeriod called with value' , value 

if __name__ =="__main__": 
    game=Life(8,10) 
    game.mainloop() 
0

Вы объявили класс с именем life, в то время как вы звоните Life. Python чувствителен к регистру. Либо измените строку 4 на class Life (Tkinter.Frame):, либо измените линию 64 на game=life(8,10).

Смежные вопросы