所以我正在学习编程和Python,我正在尝试编写一些代码来用Python创建一个单词扫描程序。对象是获取用户给出的一串单词并返回以格式(TYPE,WORD)读取的元组列表,其中TYPE是单词的类型,WORD是单词本身。我通过在包含该类型的单词的一组列表中搜索单词来确定单词的类型。如果单词存在,或者是数字,则元组返回相应的类型和单词;如果单词不存在,则元组返回“错误”和单词。因此,例如,如果输入是“我的狗向北走了3天”,则返回的列表将显示为:
[('error', 'My'), ('noun', 'dog'), ('error', went),
('number', 'north'), ('error', 'for'), ('number', '3'), ('error', 'days')]
或类似的东西。
无论如何,当我输入代码试图通过从命令行中的主项目目录运行它来使其工作时,我一直回来的唯一值是这条消息叫做
<__main__.scan object at 0x7fe88b5cd750>
无论我如何重新调试代码,无论我试图将最终打印的句子声明为什么,我都会将 main .scan对象的东西作为字符串的值扫描仪。
以下是我参考的代码:
from otherfunc import numconv
class scan(object):
def __init__(self, string):
self.string = string
def scanner(self):
direction = ['north', 'south', 'east', 'west', 'down',
'up', 'left', 'right', 'back']
verb = ['go', 'stop', 'kill', 'eat']
stop = ['the', 'in', 'of', 'from', 'at', 'it']
noun = ['door', 'bear', 'princess', 'cabinet']
words = split(self.string)
sentence = []
for word in words:
if word in direction:
analysis = ('direction', word)
sentence.append(analysis)
elif word in verb:
analysis = ('verb', word)
sentence.append(analysis)
elif word in stop:
analysis = ('stop', word)
sentence.append(analysis)
elif word in noun:
analysis = ("noun", word)
sentence.append(analysis)
else:
value = numconv(word)
if value != None:
analysis = value
sentence.append(analysis)
else:
analysis = ('error', word)
sentence.append(analysis)
return sentence
string = raw_input("Type in your sentence here: ")
sentlist = scan(string)
print sentlist
以下是我在上面的代码中导入的模块的代码:
class numconv(object):
def __init__(self, s):
self.s = s
def convert_number(self, s):
try:
self.value = int(s)
return ("number", self.value)
except ValueError:
return None
问题是,我已经得到了这个基本框架,以另一种格式工作。在那种格式中,我没有声明类,只是将上面在“scan”和“numconv”类中看到的所有内容称为文件中的模块来运行扫描程序。但我试图将其转换为“类”格式,并尝试将扫描程序称为“扫描”类的实例。到目前为止,我没有得到我想要的(TYPE,WORD)元组列表,而是继续将 main .scan对象作为返回值。如果有人可以如此善良,他们可以解释我在哪里出错我试图将其转换为类格式,以及为什么我只是继续将“主 .scan对象”作为返回值当我尝试使用用户输入字符串调用扫描类时?感谢。
答案 0 :(得分:1)
在您使用课程时:
sentlist = scan(string)
print sentlist;
您正在创建该类的实例并进行打印。 相反,我相信你想要调用扫描仪成员函数:
mySring = "somestring"; // declares a string
s = scan(myString); // creates instance of class, passing string as arg
sentlist = s.scanner(); // runs the function scanner, returning output