【问题标题】:Counting the occurrence of each keyword and each identifier计算每个关键字和每个标识符的出现次数
【发布时间】:2020-04-19 06:11:50
【问题描述】:

我试图计算问题给我的单词中的关键字和标识符,但我不确定它是否正确,所以请帮助我找出我在问题中提出的问题。 问题是这样的:

编写一个程序,读取 Python 源代码文件,并使用两个字典计算文件中每个关键字和每个标识符(变量、类和方法名称)的出现次数:一个用于关键字,另一个用于标识符。您的程序应提示用户输入 Python 源代码文件名。 Python 编程语言中的关键字:False class finally is return None continue for l ambda try True def from nonlocal while and del global not or yield assert else import pass break except with as in elif raise

Python 编程语言中的关键字:

False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise

这是我写的代码:

import tokenize
import keyword
import collections 
with open('source.py') as f:
    tokens = (token for _, token, _, _, _ in tokenize.generate_tokens(f.readline))
    c = collections.Counter(token for token in tokens if keyword.iskeyword(token))

print(c)

【问题讨论】:

  • 乍一看,它看起来很合理——您对此有什么特别的顾虑吗?
  • 我很快测试了Counter({'False': 1, 'True': 1}),其中包含TrueFalse 的文件,所以它确实有效,这是您预期的输出吗?
  • 首先,谢谢你们帮助我???? tbh 我并没有真正得到输出应该是什么,但它说我需要两个字典。我应该怎么做,我是否已经这样做了,这是现在最大的担忧

标签: python python-3.x keyword counting identifier


【解决方案1】:

针对您的评论,从技术上讲 c 不是字典,它是一个 collections.Counter 对象:

print(c, type(c))

输出:

Counter({'False': 1, 'True': 1}) <class 'collections.Counter'>

您可以将其转换为内置字典,如下所示:

c = dict(c)
print(c, type(c))

输出:

{'False': 1, 'True': 1} <class 'dict'>

如您所见,它摆脱了Counter() 对象。

这不是很漂亮,但如果你只知道应该有两个字典,那么第二位是最正确的。

但是再次阅读您的问题,您似乎需要为 (1): 关键字(您已经提供)和 (2) 标识符制作字典:标识符是给类、函数、变量等实体的名称。它有助于区分一个实体和另一个实体。你能提供你的python文件:source.py吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2022-10-15
    • 2011-05-20
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多