Python:从终端运行此代码

Python:从终端运行此代码,python,markov-chains,markov,Python,Markov Chains,Markov,我有这段代码,它是用来通过马尔可夫链/过程生成文本的。它编译良好,没有错误,在终端上运行,没有错误,但不生成任何响应/返回 我通过进入存放Markov.py文件的目录,并在终端上运行Python3 Markov.py来实现这一点,如下所示 我知道我做了一些不正确的事情,但不确定是什么,我还需要调用函数吗 import random class Markov (object): def __init__(self,order): self.order = order

我有这段代码,它是用来通过马尔可夫链/过程生成文本的。它编译良好,没有错误,在终端上运行,没有错误,但不生成任何响应/返回

我通过进入存放Markov.py文件的目录,并在终端上运行Python3 Markov.py来实现这一点,如下所示

我知道我做了一些不正确的事情,但不确定是什么,我还需要调用函数吗

import random

class Markov (object):
    def __init__(self,order):
        self.order = order
        self.group_size = self.order + 1 
        self.text = "testFile.txt"  #The training text
        self.graph = {}  #Holds the information learnt
        return

    def train (self,filename):
        self.text = file (testFile.txt).read () .split()    
        self.text = self.text + self.text [ : self.order]   
        for i in range (0, len (self.text) - self.group_size):
            key = tuple (self.text [i : i + self.order]) 
            value = self.text[i + self.order] 

            if key in self.graph:
                self.graph [key].append (value)
            else:
                self.graph [key] = [value]

    def generate (self, length):
        index = random.randint (0, len(self.text) - self.order)
        result = self.text[index : index + self.order]
        for i in range (length):
            state = tuple(result[len(result) - self.order:])
            next_word = random.choice(self.graph[state])
            result.append(next_word)

        return " ".join (result[self.order : ])

x = Markov(2)
files = open("testFile.txt", "r")
filename = files

x.train(filename)
print(x.generate(10))

是的,您必须在代码中调用函数,否则它们将不会被调用,也不会运行。您只需调用一个类,您必须实例化该类,尝试实例化您的类并适当地调用函数。
可以找到有关函数的更多信息。

假设您的代码段复制正确,那么您似乎忘记了缩进级别。生成和训练方法是马尔可夫对象的一部分,因此它们需要额外的缩进级别

试试这个:

import random

class Markov (object):
    def __init__(self,order):
        self.order = order
        self.group_size = self.order + 1 
        self.text = "testFile.txt"  #The training text
        self.graph = {}  #Holds the information learnt
        return

    def train (self,filename):
        self.text = file (testFile.txt).read () .split()    
        self.text = self.text + self.text [ : self.order]   
        for i in range (0, len (self.text) - self.group_size):
            key = tuple (self.text [i : i + self.order]) 
            value = self.text[i + self.order] 

            if key in self.graph:
                self.graph [key].append (value)
            else:
                self.graph [key] = [value]

    def generate (self, length):
        index = random.randint (0, len(self.text) - self.order)
        result = self.text[index : index + self.order]
        for i in range (length):
            state = tuple(result[len(result) - self.order:])
            next_word = random.choice(self.graph[state])
            result.append(next_word)

        return " ".join (result[self.order : ])

是的,您需要调用函数。现在没有“主”程序。但这是在Python速成课程中真正学到的。投入一些时间可能是好的……当然,它不会打印任何内容,因为您只定义了一些类。您需要在代码末尾创建该类的实例。此处的代码只有一个导入、一个类定义和两个函数定义。但是没有执行任何语句,因为从未调用函数,也从未实例化类。添加一些实际执行某些命令和/或使用该类的行。好的,它生成的输入是什么。但是,在代码中,我发现printx.generate10^的语法无效。我看到generate函数的两个参数。但是,您只输入了一个。当然,因为第一个参数是“self”,所以我不需要再次输入它。修复了它!x=Markov2 files=opentestFile.txt,r filename=files x.trainfilename printx.generate10。错误消息位于错误的位置,但问题的发生是由于“文件”已在列车功能下使用,将声明重新命名为“文件”排序,谢谢您的帮助@usr2564301 OP在另一条评论中澄清了这段代码片段后面有一些声明。好吧,很抱歉现在就跳到这个结论。当然是OP的错!因为没有把所有的信息都包含在问题中。。。关于同一个主题:当然缩进必须在OP的原始源代码中是正确的!因为否则Python肯定会对这个糟糕的缩进说些什么。