You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在循环内使用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")

代码说明

  1. 用is_perfect_square布尔变量标记是否找到完全平方数
  2. 缩小循环范围到int(n**0.5)+1,大幅提升运行效率
  3. 使用i*i ==n作为判断条件,确保判断准确
  4. 找到平方根后立即break循环,避免不必要的计算
  5. 通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:31:02