我试图在python中创建一个函数,将数字简化为根目录下的整数。例如:
我已经编写了以下函数,但它部分工作,因为我认为while循环不是有效的。 有什么帮助吗?
def sqrt2(num):
numbers=[]
roots=[]
#i=1-11
while num>1:
for i in range(1,num+1):
if num%i==0:
num=num//i
if num%i==0:
num=num//i
numbers.append(i)
else:
roots.append(i)
break
result=1
for i in numbers:
result= result*i
u_root=1
for j in roots:
u_root=u_root*j
print (result,"sqrt (",u_root,")")
答案 0 :(得分:0)
如果您的缩进实际上与问题中显示的一致,则您的>>> class nsc(object):
... pass
...
>>> '__eq__' in dir(nsc)
False
语句需要缩进更多。当第一个break
被点击时,它应该突破for
循环,而不会突破if
循环。
但是代码还存在另一个问题。您开始while
循环时for
为i
,但1
在这种情况下始终为真,导致无限循环。您应该跳过num % 1
并循环i=1
:
range(2, num+1)
答案 1 :(得分:0)
这个循环只是尝试除以2 * 2,3 * 3,4 * 4等,直到找到除数或直到除数对于分割数而言太大。
唯一有趣的部分是递归。如果找到部分结果,我们会尝试简化较小的数字。例如。 567 =(3 * 3)* 63,然后63 =(3 * 3)* 7。这两个结果合计给出(9 * 9)* 7。
def my_sqrt(num):
for i in range(2, num):
div, mod = divmod(num, i*i)
if mod == 0:
sq1, sq2 = my_sqrt(div)
return (i * sq1, sq2)
if div == 0:
break
return (1, num)
print(my_sqrt(27))
print(my_sqrt(567))
答案 2 :(得分:0)
这是我为数学作业制作的小代码
def sqr_sim(und_root):
und_root = int(und_root)
und_root0 = round(und_root)
rt_fc = []
coef = 1
if und_root < 0:
return None
elif und_root == 0:
return 0
else:
for i in range(2, und_root0):
if und_root%(i**2) == 0:
rt_fc.append(i)
und_root /= i**2
for i0 in range(2, und_root0):
if und_root%(i0**2) == 0:
rt_fc.append(i0)
und_root /= i0**2
for ele in rt_fc:
coef *= ele
print('the final solution is',
coef, '√', und_root)
sqr_sim(input())
&#13;