如何在循环内使用if条件?Python完全平方数判断代码优化求助
解决完全平方数判断的代码问题
你的代码存在几个问题,导致无法正确添加非完全平方数的判断逻辑,还会出现运行错误,下面是修正后的方案:
原代码问题分析
- 循环范围冗余:不需要遍历到
n-1,只需遍历到n的平方根即可,否则效率极低 - 判断条件错误:用
n//i == i会误判,比如n=5时,5//2=2但2*2≠5,正确判断应为i*i == n - 变量未初始化:当
n不是完全平方数时,d未被赋值,执行打印语句会抛出NameError - 缺少状态标记:没有变量记录是否找到符合条件的平方根,无法区分两种情况添加
else分支
修正后的代码
n = int(input('choose a number: ')) is_perfect_square = False root = -1 # 遍历到n的平方根即可,+1是为了覆盖整数平方根的边界情况 for i in range(1, int(n**0.5) + 1): if i * i == n: is_perfect_square = True root = i break # 找到后直接退出循环,无需继续遍历 if is_perfect_square: print(f"{n} is a perfect square and its root is {root}") else: print(f"{n} is not a perfect square")
代码说明
- 用
is_perfect_square布尔变量标记是否找到完全平方数 - 缩小循环范围到
int(n**0.5)+1,大幅提升运行效率 - 使用
i*i ==n作为判断条件,确保判断准确 - 找到平方根后立即
break循环,避免不必要的计算 - 通过
if-else分支清晰处理两种输出情况
你也可以用更简洁的方式实现,借助Python标准库的整数平方根函数:
import math n = int(input('choose a number: ')) root = math.isqrt(n) # isqrt返回非负整数的整数平方根(向下取整) if root * root == n: print(f"{n} is a perfect square and its root is {root}") else: print(f"{n} is not a perfect square")
math.isqrt是Python 3.8+新增的函数,专门处理整数平方根计算,比int(math.sqrt(n))更可靠。
内容的提问来源于stack exchange,提问作者saad elmoraghi
相关产品推荐
相关产品推荐

