2013-05-30 129 views
0

我正在寫一個簡單的基於文本的RPG遊戲,我試圖讓庫存系統正常工作。我已經逐字複製了工作代碼,但是我收到了一個語法錯誤。我不確定我做錯了什麼,因爲它對我來說很好。對不起,新手問題。謝謝!找不到語法錯誤

class Container(object): 

     def__init__(self, name): 
       self.name = name 
       self.inside = {} 

    def__iter__(self): 
      return iter(self.inside.items()) 

    def__len__(self): 
      return len(self.inside) 

    def__contains__(self, item): 
      return item.raw in self.inside 

    def__getitem__(self, item): 
      return self.inside[item.raw] 

    def__setitem__(self, item, value): 
      self.inside[item.raw] = value 
      return self[item] 

    def add (self, item, quantity=1): 
      if quantity < 0: 
        raise ValueError("Negative quantity. Use remove() instead.") 

      if item in self: 
        self[item].quantity += quantity 
        self[item].recalc() 

      else: 
        self[item].quantity -= quantity 
        self[item].recalc() 

,我得到以下錯誤,當我運行它:

Traceback (most recent call last): 
    File "game.py", line 2, in <module> 
    from characters.player import * 
    File "/home/dave/Projects/rpg-master/characters/player.py", line 4, in <module> 
    from items.container import * 
    File "/home/dave/Projects/rpg-master/items/container.py", line 4 
    def__init__(self, name): 
         ^
SyntaxError: invalid syntax 

非常感謝您的任何幫助。

+3

def__init__(self,name):'等'def'後面的空格 – Jared

+0

在所有函數聲明中放入def後的空格。 –

+3

請注意,使用帶語法高亮的好編輯器應該會立即發現這樣的錯誤。 – mgilson

回答

8

你不必空格def後:

def__init__(self, name): 
    self.name = name 
    self.inside = {} 

應該

def __init__(self, name): 
    self.name = name 
    self.inside = {} 

等爲該類的其餘功能。

+0

是的,並且@PauloBu [說](http://stackoverflow.com/a/16845007/2423516),請確保您的代碼縮進。 – 2013-05-30 20:08:02

+0

非常感謝大家。 – user2438061

+0

我在回答中添加了一些關於縮進的註釋。希望它會有用。 –

6

首先,__init__沒有很好的縮進。其次,你應該從實際的方法名稱分開def關鍵字:

class Container(object): 

    def __init__(self, name): 
     self.name = name 
     self.inside = {} 

    def __iter__(self): 
     return iter(self.inside.items()) 

    def __len__(self): 
     return len(self.inside) 

    def __contains__(self, item): 
     return item.raw in self.inside 

    def __getitem__(self, item): 
     return self.inside[item.raw] 

    def __setitem__(self, item, value): 
     self.inside[item.raw] = value 
     return self[item] 

UPDATE:注意你混合縮進,蟒蛇通常建議4個空格縮進,但我看到您同時使用4和8,你可以使用任何你想要的,但堅持下去,不要混合它們,因爲你可能會發現意想不到的行爲。

希望這有助於!