Python循环与函数问题:变量c引用前未赋值报错及计数需求
问题分析与解决
首先说报错原因:你代码里的c是全局变量,但在函数primito里直接写c+=1时,Python会默认把c当成局部变量,可你没在函数内部给这个局部的c赋值就直接使用,所以触发"c is referenced before being assigned"错误。另外还有个逻辑问题:你把return c放在了最内层if里,第一次找到符合条件的数就会直接返回,循环直接终止,根本统计不全所有符合条件的数。
解决办法
方法1:使用全局变量声明(适合理解变量作用域,但不推荐)
在函数内部开头加上global c,告诉Python这个c是外面的全局变量,同时把return c移到循环外面,保证循环能跑完所有数:
c = 0 def primito(num1): global c # 声明使用全局变量c for i in range(1, num1): if i % 2 != 0: if i % 3 != 0: if i % 5 != 0: print(i, "es un numero primo ") c += 1 return c # 循环结束后再返回统计结果 numero = int(input("escriba un numero: ")) primito(numero) print("los primos son", c)
方法2:函数内部维护计数器(推荐,更符合代码封装性)
不用全局变量,在函数内部初始化计数器,循环统计完成后返回结果,外部接收结果再打印:
def primito(num1): count = 0 # 函数内部的计数器,避免全局变量的副作用 for i in range(1, num1): # 多个判断条件可以合并,代码更简洁 if i % 2 != 0 and i % 3 != 0 and i % 5 != 0: print(i, "es un numero primo ") count += 1 return count numero = int(input("escriba un numero: ")) total = primito(numero) print("los primos son", total)
另外提醒:你当前的逻辑是统计不能被2、3、5整除的数,这和真正的质数(素数)定义不符,比如1会被你的代码统计,但它不是质数。如果需要统计真正的质数,还需要调整判断逻辑,但按你当前的需求,上面的代码已经能解决报错和统计次数的问题。
内容的提问来源于stack exchange,提问作者DobbyIsFree
相关产品推荐
相关产品推荐

