Я пытаюсь выучить python, руководство, которым я следую, просит меня написать простую «игру», использующую кортежи, списки и классы.
При запуске команды «nosetests» я получаюследующая ошибка:
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')])
Спасибо!