获取 NameError: name 未定义它与变量的状态有什么关系吗?

如何解决获取 NameError: name 未定义它与变量的状态有什么关系吗?

这是我的代码。我是 python 的新手,我肯定搞砸了。我正在尝试创建一个程序来计算名为“romeoandjuliet.txt”的文本文件中的单词频率。当我运行它时,没有任何反应,也没有创建 f1 和 f2 文件。当在控制台中输入“listofwords”或“freq”时,我得到一个 NameError。我已经处理了停用词的情况。感谢您的帮助。

def main():
    listofwords = formlistofwords('romeoandjuliet.txt')
    
    
    def formlistofwords(filename):
        
        global listofwords
        listofwords = formlistofwords("romeoandjuliet.txt")
        
        infile = open(filename)
        originalline = (infile.readline().lower() for line in infile)
        line = " "
        for ch in originalline:
            if ('a' <= ch <= 'z') or (ch == " "):
                line += ch
                listofwords = line.split()
                listofwords = [i.strip('.,?!:;') for i in listofwords]
                listofwords = [words for words in listofwords if words not in stopwords]
                return listofwords
    
    

    def createfrequencydict(listofwords):
        global freq
                
        freq = [listofwords.count(p) for p in listofwords]
        return dict(list(zip(listofwords,freq)))



    def displaywordcount(listofwords,freq):
        print('romeoandjuliet contains: ',len(listofwords),'words')
        print('romeoandjuliet contains: ',len(freq),'different words')
        print()


    def displaymostcommon(freq):
        file1 = open('f1.txt','w')
        file2 = open('f2.txt','w')
        print('most common words and frequencies are: ')
        listofmostcommonwords = []
        for word in freq.keys():
            if freq[word] >= 30:
                listofmostcommonwords.append((word,freq[word]))
        listofmostcommonwords.sort(key = lambda x: x[1],reverse=True)
        for item in listofmostcommonwords:
            print(item[0] + ':',item[1])
        for item in listofmostcommonwords:
            file1.write(str(item[1]) + ',')
            file2.write(str(item[0]) + ',')

        file1.close()
        file2.close()

解决方法

我研究了你的代码。我注意到以下几点:

  1. 你需要调用每个函数才能执行

  2. 您有一些全局变量,例如 listofwordsfreq。声明它们并将 None 分配给它们。然后调用函数然后结束传递这些变量。这种方式代码正在工作

  3. 以下返回语句

    return dict(list(zip(listofwords,freq)))

这里的 return 语句不是返回字典。它正在返回列表。而不是这个,首先尝试使用 for 循环。这是对我有用的代码

def createfrequencydict(listofword):
    global freq
    freq = [listofwords.count(p) for p in listofwords]
    #print(dict(list(zip(listofwords,freq))))
    for key in listofwords:
        for value in freq:
            res[key] = value
            freq.remove(value)
            break  
    return res

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?