python - 检查整数时出现逻辑错误
问题描述
我只是在编写一个代码来检查一个数字是否是一个完美的正方形并遇到了一个问题 - 该代码仅适用于 '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 ')
我不想对我的逻辑进行任何编辑 - 请有人改进相同的代码
解决方案
在 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')
推荐阅读
- c# - Kerberos 模拟级别“模拟”而不是“委托”
- c# - Azure 云服务(经典)检索客户端 IP 地址
- javascript - Import Unexpected identifier + SyntaxError: Unexpected string
- css - 在 fabrik (joomla) 中显示图像?
- react-native - 反应本机标头问题
- web - 如何将整个 _site 文件夹从我的 Jekyll 博客站点复制到我在 Linux 中托管的主网站的博客文件夹
- c# - 如何正确裁剪图像的一部分?
- c# - 如何使用.Net将转换为字节的图像传递给detectdocumenttextresult和detectdocumenttextresponse中的请求?
- javascript - 条纹表的选定行颜色
- regex - 仅当不是超链接的一部分时才匹配正则表达式