我有这段代码,我正在尝试计算以下内容的数量:
- .py 脚本中的代码行
- for_loops(“对于”)
-while_loops(“同时”)
- if_语句(“如果”)
- 函数定义(“def”)
- 乘号(“*”
- 除号(“/”
- 加号(“+”)
- 减号(“-”)
在数学符号上,代码可以工作,但是当代码寻找 if 语句时,它返回 2,当有一个时,这是主要问题,但这让我认为我错误地编写了 for 循环,这可能会带来更多问题以后出现问题。除此之外,我不知道如何打印作者行,该行显示为 [] 而不是作者姓名
代码:
from collections import Counter
FOR_=0
WHILE_=0
IF_=0
DEF_=0
x =input("Enter file or directory: ")
print ("Enter file or directory: {0}".format(x))
print ("Filename {0:>20}".format(x))
b= open(x)
c=b.readlines()
d=b.readlines(2)
print ("Author {0:<18}".format(d))
print ("lines_of_code {0:>8}".format((len (c))))
counter = Counter(str(c))
for line in c:
if ("for ") in line:
FOR_+=1
print ("for_loops {0:>12}".format((FOR_)))
for line in c:
if ("while ") in line:
WHILE_+=1
print ("while_loops {0:>10}".format((WHILE_)))
for line in c:
if ("if ") in line:
IF_+=1
a=IF_
print ("if_statements {0:>8}".format((a)))
for line in c:
if ("def ") in line:
DEF_+=1
print ("function_definitions {0}".format((DEF_)))
print ("multiplications {0:>6}".format((counter['*'])))
print ("divisions {0:>12}".format((counter['/'])))
print ("additions {0:>12}".format((counter['+'])))
print ("subtractions {0:>9}".format((counter['-'])))
正在读取的文件:
'''Dumbo
Author: Hector McTavish'''
for for for # Should count as 1 for statement
while_im_alive # Shouldn't count as a while
while blah # But this one should
if defined # Should be an if but not a def
def if # Should be a def but not an if
x = (2 * 3) + 4 * 2 * 7 / 1 - 2 # Various operators
任何帮助将非常感激
不要将源代码视为字符串,而是使用ast
模块来解析它,然后遍历节点:
import ast
from collections import Counter
tree = ast.parse('''
"""
Author: Nobody
"""
def foo(*args, **kwargs):
for i in range(10):
if i != 2**2:
print(i * 2 * 3 * 2)
def bar():
pass
''')
counts = Counter(node.__class__ for node in ast.walk(tree))
print('The docstring says:', repr(ast.get_docstring(tree)))
print('You have', counts[ast.Mult], 'multiplication signs.')
print('You have', counts[ast.FunctionDef], 'function definitions.')
print('You have', counts[ast.If], 'if statements.')
它非常简单,可以处理所有的极端情况:
The docstring says: 'Author: Nobody'
You have 3 multiplication signs.
You have 2 function definitions.
You have 1 if statements.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)