python,平方根简化函数

时间:2015-10-17 20:20:27

标签: python

我试图在python中创建一个函数,将数字简化为根目录下的整数。例如:

  • √(27)=3√(3)
  • √(567)=9√(7)

我已经编写了以下函数,但它部分工作,因为我认为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,")")  

3 个答案:

答案 0 :(得分:0)

如果您的缩进实际上与问题中显示的一致,则您的>>> class nsc(object): ... pass ... >>> '__eq__' in dir(nsc) False 语句需要缩进更多。当第一个break被点击时,它应该突破for循环,而不会突破if循环。

但是代码还存在另一个问题。您开始while循环时fori,但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;
&#13;
&#13;