Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 1/n长除法的问题_Python_Loops_Math_Division - Fatal编程技术网

Python 1/n长除法的问题

Python 1/n长除法的问题,python,loops,math,division,Python,Loops,Math,Division,我编写了以下代码来返回1/n的值。它基本上执行长除法,直到达到重复分红。调用repetends(n)直接返回正确的结果,例如repetends(7)返回(True,'142857'),这意味着1/7的十进制重复数为142857 然而,当我调用list\u repetends(10)时,它只是在一个上升到某个n的for循环中调用repetends,我从n=1,2,3上单独调用repetends得到了完全不同的结果,而且是不正确的。。。10. 下面是我得到的结果,后面是代码。你知道为什么一个简单的

我编写了以下代码来返回1/n的值。它基本上执行长除法,直到达到重复分红。调用
repetends(n)
直接返回正确的结果,例如
repetends(7)
返回
(True,'142857')
,这意味着1/7的十进制重复数为142857

然而,当我调用
list\u repetends(10)
时,它只是在一个上升到某个n的for循环中调用
repetends
,我从n=1,2,3上单独调用
repetends
得到了完全不同的结果,而且是不正确的。。。10.

下面是我得到的结果,后面是代码。你知道为什么一个简单的for循环会把我的结果搞砸吗

n,重复(n),列出重复(10):

1(假,“1”)(假,“1”)

2(假,“5”)(假,“15”)

3(真,'3')(真,'3'))

4(假,“25”)(真,“3”)

5(假,“2”)(真,“3”)

6(正确,'6')(正确,'3'))

7(对,'142857')(对,'3')

8(假,“125”)(真,“3”)

9(正确,1’)(正确,3’)

10(假,“1”)(真,“3”)


使用全局变量
remainders
会让您大吃一惊。相反,试着将其严格控制在
longdiv
的范围内。有更好的方法可以进行“记忆”,检查是否存在缓存函数结果的代码段。
f = ''
remainders = {}

# n = numerator (1), d = denominator, z = tracks dropped zeros

def longdiv(n, d, z):
    global remainders
    global f
    if n in remainders:
        return True, f[remainders[n]:]
    mod = n % d
    if mod == n:
        if z >= 1:
            f += '0'
        z += 1
        return "Cont", (10*n, d, z)
    else:
        if mod == 0:
            f += str(n/d)
            return False, f
        else:
            r = n - mod
            dec = r/d
            f += str(dec)
            if n not in remainders:
                remainders[n] = len(f)-1
            return "Cont", (mod, d, 0)

def repetends(n):
    div, rem = longdiv(1,n,0)
    if div == True or div == False:
        return div, rem
    else:
        while div == "Cont":
            mod, d, z = rem
            div, rem = longdiv(mod,n,z)
        return div, rem

def list_repetends(n):
    for i in range(1,n+1):
        print repetends(i)