Python编写is_prime质数判断函数报SyntaxError无效语法如何修复
问题根因
你触发的SyntaxError: invalid syntax以及代码不符合需求的问题点如下:
- 语法错误:原代码第2行
n = (int(input("Enter a number:"))存在未闭合的多余左括号,直接触发语法报错 - 职责错位:函数内部写了input输入、print打印逻辑,违反「函数接收整数入参、返回布尔值,打印在拿到返回值后执行」的要求
- 逻辑bug:for循环直接用入参
n做循环变量覆盖了原始入参,循环内使用了未定义的变量j,缺失n=2等边界场景的质数判断,逻辑完全无法正常运行
修正后完整代码
import math def is_prime(n): # 小于等于1的整数非质数 if n <= 1: return False # 2是唯一偶质数 if n == 2: return True # 大于2的偶数均非质数,提前返回 if n % 2 == 0: return False # 遍历到平方根即可判断,步长设为2跳过偶数减少计算 for i in range(3, int(math.sqrt(n)) + 1, 2): if n % i == 0: return False return True # 函数外完成输入、返回值获取、打印逻辑 if __name__ == "__main__": input_num = int(input("Enter a number:")) is_prime_res = is_prime(input_num) if is_prime_res: print(input_num, "is a prime number") else: print(input_num, "is not a prime number")
改动说明
- 修复语法问题:删除多余未闭合的左括号,解决SyntaxError报错
- 对齐需求:函数仅保留质数判断逻辑,接收整数入参,全程返回布尔值;输入获取、结果打印全部移到函数外部,在拿到函数返回值后执行打印
- 修复逻辑漏洞:替换会覆盖入参的循环变量名,移除未定义的
j变量,补全边界值判断逻辑 - 性能优化:将原代码遍历到n/2的逻辑优化为遍历到n的平方根,提前过滤偶数,减少无效循环
内容的提问来源于stack exchange,提问作者Victoria
相关产品推荐
相关产品推荐

