首页 > 解决方案 > 检查整数时出现逻辑错误

问题描述

我只是在编写一个代码来检查一个数字是否是一个完美的正方形并遇到了一个问题 - 该代码仅适用于 '4' ,例如如果输入的数字是 36,当我达到值 6 时,i**i 是发现是 6*36- 我的意思是我在那里拥有不同的值

n=int(input('Enter an integer '))
x=0
for i in range(1,n+1):
    if (i**i)==n:
        print('you entered a perfect square ',i,'^',i,'=',n)
    else:
        x=x+1
if x==n:
    print('you didnt enter a perfect square ')

我不想对我的逻辑进行任何编辑 - 请有人改进相同的代码

标签: pythonpython-3.x

解决方案


在 Python 中,i**i表示i^i,但是要检查给定的数字是否是完全平方,您需要检查if i**2 == n. 根据您的逻辑,我们不需要检查大于 的数字sqrt(n)。如果你使用一个函数,代码会更容易调试。所以一个改进的版本将是:

from math import sqrt

def is_perf_sq(n):
    for i in range(1, int(sqrt(n))+1):
        if i**2 == n:
            return 'You entered a perfect square '+ str(i) + '^ 2 =' + str(n)
    return str(n) + ' is not a perfect square'

n = int(input('Enter an integer:').strip())
print(is_perf_sq(n))

运行时间改进:

您不需要检查所有数字和平方并检查它们,您只需要该数字的平方根。然后加上0.5它并对整数部分进行平方,如果我们得到这个数字,那么它是一个完美的平方,否则不是。所以代码将是:

from math import sqrt
n = int(input('Enter an integer:'))
if int(sqrt(n)+0.5)**2 == n:
    print(n, 'is a perfect square')
else:
    print(n, 'is not a perfect square')

推荐阅读