关于Python质数打印代码的两处语法疑问求助
问题解答
原代码
Nums = range(1,60) def is_prime(Nums): for x in range(2, Nums): if (Nums%x) ==0: return False return True prime_numbers = list(filter(is_prime,Nums)) Print(prime_numbers)
关于for x in range(2, Nums)为何没报错
你混淆了变量的作用域:这里的Nums不是外层定义的range(1,60),而是filter函数遍历range(1,60)时,逐个传入的单个整数元素(比如1、2、3……59)。filter的逻辑是把可迭代对象里的每个元素,单独作为参数传给is_prime函数,所以is_prime内部的Nums本质是整数,range(2, Nums)完全合法,不会报错。
建议把函数参数名改成n之类的不同名字,避免和外层变量重名导致混淆。
关于if (Nums%x) ==0的含义
%是Python的取模运算符,用来计算两个整数相除后的余数。Nums%x == 0表示:Nums除以x的余数为0,也就是Nums能被x整除。一旦满足这个条件,说明Nums不是质数,函数直接返回False终止判断。
额外提一句:原代码最后一行的Print是错误的,Python内置打印函数是小写的print,不改会触发NameError。
内容的提问来源于stack exchange,提问作者Nani Selase
相关产品推荐
相关产品推荐

