2011-04-11 10 views
1

私はPythonを学びたいと思っています。私が従うガイドは、タプル、リスト、クラスを利用して簡単な「ゲーム」を書くように求めています。nosetests、python

E. 
====================================================================== ERROR: 
tests.LEXICON_tests.test_directions 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
File "/Library/Python/2.6/site-packages/nose/case.py", 
line 187, in runTest 
    self.test(*self.arg) 
File "/Users/VB/Documents/svn/Programming/python/projects/lexicon/tests/LEXICON_tests.py", 
line 6, in test_directions 
    assert_equal(lexicon.scan("north"), 
[('directions', 'north')]) TypeError: 
unbound method scan() must be called 
with lexicon instance as first 
argument (got str instance instead) 

---------------------------------------------------------------------- Ran 2 tests in 
0.011s 

FAILED (errors=1) VB MP > ./lexicon.py 

> north [(), ('directions', 'north')] VB MP > ./lexicon.py 
> north south east [[[(), ('directions', 'north')], 
('directions', 'south')], 
('directions', 'east')] VB MP 

メインファイル:

#!/usr/bin/env python 
# encoding: utf-8 

import sys 
import os 
from LEXICON.game import lexicon 


def main(): 
    stuff = raw_input('> ') 

    lex = lexicon (stuff) 

    split_array = lex.scan(stuff) 
    print split_array 

    #me = lex.tockens(split_array) 
    #print me 

if __name__ == '__main__': 
    main() 

class 
#!/usr/bin/env python 
# encoding: utf-8 
""" 

import sys 
import os 

class lexicon (object): 
    def __init__(self,data): 
     self.direction = data 
     #self.words = data.split() 

    def scan(self,data): 
     split_data = data.split() 
     lex = lexicon (data) 

     tocken = lex.tockens(split_data) 


     return tocken 

    def tockens(self,splitdata): 

     sentence = splitdata 
     verbs = ['go','swim','open','punch','fly','stop','kill','eat'] 
     objekts = ['door','bear','face','princess','cabinet'] 
     directions = ['north','south','east','west','down','up','left','right','back'] 
     stopwords = ['the','in','of','from','at','it'] 


     # setep 1, open the array 

     bit =() 
     byte =() 
     for x in sentence: 
      # step 2, match against verbs 
      for v in verbs: 
       try: 
        if (x == v): 
         bit = ('verb',x) 
         byte = [byte, bit]    
       except ValueError: 
        print "Ooops!" 
      for o in objekts: 
       try: 
        if (x == o): 
         bit = ('objekt',x) 
         byte = [byte, bit] 
       except ValueError: 
        print "Ooops!" 
      for d in directions: 
       try: 
        if (x == d): 
         bit = ('directions',x) 
         byte = [byte, bit] 
       except ValueError: 
        print "Ooops!" 
      for s in stopwords: 
       try: 
        if (x == s): 
         bit = ('stopwords',x) 
         byte = [byte, bit] 
       except ValueError: 
        print "Ooops!" 

     return byte 

テスト

from nose.tools import * 
#import LEXICON 
from LEXICON.game import lexicon 

def test_directions(): 
    assert_equal(lexicon.scan("north"), [('directions', 'north')]) 
    result = lexicon.scan("north south east") 
    assert_equal(result, [('directions', 'north'), 
          ('directions', 'south'), 
          ('directions', 'east')]) 

おかげで 'nosetests' コマンドを実行している場合

は、私は次のエラーを取得します!

+1

質問にあなたのコードとエラーを入れてください。 – GWW

+0

難解な方法でPythonを学んでください - うまくいって – Stedy

+0

ここにコードを入れてください。 – pajton

答えて

2

メソッドがPythonで呼び出される方法は、呼び出されたオブジェクトが最初の引数として渡され、提供された引数がそれぞれプッシュダウンされるというものです。静的メソッド(lexicon.scan)インスタンスメソッド(lex.scan)の最初の引数は指定されません。

最初の引数は、「辞書」タイプのオブジェクトである必要がありlexicon.scan方法は、あなたはおそらく、あなたのテストで何をしたいのか辞書オブジェクト(lex = lexicon(stuff))を作成し、そのオブジェクト(lex.scan("north"))からスキャンを呼び出すことです。つまり、電話をscan(lex, "north")にしたいときは、scan("north")を呼び出しています。

+0

ありがとう!それはまさに私が行方不明で、助けが必要な部分です! '結果との差がlexicon.scan( "東南北")' とは 'LEX =レキシコン(スタッフ) split_array = lex.scan(スタッフ)' – Cmag

+0

テストコードを内に設けられた=どのような このドキュメントの例は、私がやっているやり方ではなく、おそらくクラスを呼び出す正しい方法です...あなたはお勧めしますか?ありがとう! – Cmag

+0

クラスに電話するとどういう意味ですか?詳しく教えてください。 –

関連する問題