TEL:400-8793-956
当前位置:程序、服务器

如何解决呢?如何处理超出其范围的局部变量?

提问者: 近期获赞: 浏览人数: 发布时间:2021-02-22 09:21:11

 问:假设我想对一个循环中的单词计数并在循环外打印它,我无法访问它?请帮助我调试此代码。

 
def  word_count (字符串):
mydict = {} mylist = string 。对mylist中的项目进行split ():对字符串中的键进行计数= 0 :if (key == item ):对计数+ = 1 mydict [ item ] = count返回mydict dict = word_count (“种族主义是真的很糟糕” )打印        
 
 字典
[MOD:添加了```python formatting -cf]
 
 
答:在您的代码中,有两个作用域:main(顶部)和inside word_count。内部代码word_count可以访问这两个名称空间中的变量,外部代码word_count只能访问全局名称空间中的变量。
 
全局名称空间:word_count函数,dict字典局部word_count名称空间:mydict字典,mylist列表,count整数,key字符串。
 
在内word_count,在循环运行之后,但在之前return,所有局部变量都有其最后一个值。
 
最后一个值key“ d”count为0。为什么key最后一个值等于“ d”?您的代码存在一些问题。您正在将字符串中的字符与字符串中的单词进行比较。仅匹配单个字符的单词。
 
def  word_count (字符串):
mydict = {} #<-无需初始化dict #将字符串拆分为单词列表mylist = string 。分裂()使用每个单词的词表#循环的项目在MYLIST :#初始化计数次数= 0 #循环遍历字符串的每个字符为关键的字符串:#< -不是你想要的:尝试使用“string.split() “或” mylist“,如果键==项:#<-不需要括号        
 
                #每个匹配的单词
计数的增量计数+ = 1 #使用单词计数结果更新dict mydict [ item ] = count #返回所有结果的dict返回mydict dict = word_count (“种族主义是真的很糟糕” )print dict                  
 
请注意,这是有点低效的,因为您要扫描列表中的每个单词的单词列表。因此,您将对所有“是”字数两次。您能想到一种遍历单词列表并简单地增加看到的每个单词的计数的方法吗?切记要测试一下该单词是否曾经出现过(提示:尝试“如果mydict中的项目”以查看该单词是否存在。如果是,则增加,使用来创建新的dict项目mydict[item] = 1)
 
上一篇: 功能性python:项目vs属性
下一篇: 我无法成功纠正我在拼字游戏播放器代码中发现的错误,请提供帮助。