如何检测Python函数中的循环结构数量?适配编程平台限制需求
检测Python代码中循环结构类型的简便方法
针对你给出的这段代码:
def my_func(): t = 10 while(t > 0): t = t - 1 for item in range(10): pass
要检测是否同时使用了while和for两种循环,最靠谱且简便的方式是用Python标准库中的ast(抽象语法树)模块——比直接字符串匹配精准得多,不会误判注释、字符串里的关键字。
具体实现思路:
- 把用户代码解析成抽象语法树,跳过无关的文本内容
- 遍历AST节点,分别标记是否存在
For和While类型的节点 - 一旦检测到两种类型同时存在,直接返回结果,提升效率
示例代码如下:
import ast def has_both_loop_types(code): # 解析代码为抽象语法树 tree = ast.parse(code) has_for = False has_while = False # 遍历所有AST节点 for node in ast.walk(tree): if isinstance(node, ast.For): has_for = True elif isinstance(node, ast.While): has_while = True # 提前终止遍历 if has_for and has_while: return True return has_for and has_while # 测试示例代码 test_code = """ def my_func(): t = 10 while(t > 0): t = t - 1 for item in range(10): pass """ print(has_both_loop_types(test_code)) # 输出True,说明同时存在两种循环
如果你的需求是限制用户只能使用一个循环(不管类型),还可以在这个基础上统计循环总数量:新增一个计数器,每遇到For或While节点就加1,最后判断计数器是否大于1即可。
这个方案适合集成到编程平台的代码校验逻辑里,依赖Python标准库无需额外安装,且识别准确率高。
内容的提问来源于stack exchange,提问作者soumitra
相关产品推荐
相关产品推荐

