如何从非重复小数中排序重复小数

时间:2015-03-05 04:18:46

标签: python-3.x

定义一个名为get_digits(n,d)的函数,它计算适当分数n / d的十进制表示的数字,您可以假设分子n小于分母d。

该函数应返回一个由两个数字列表组成的列表。第一个列表是小数点后面的所有数字,不重复(如果有的话)。第二个列表包含重复的数字(如果有)。 N必须小于d

例如:

get_digits(1,2) --> [[5],[]]
get_digits(1,3) --> [[],[3]] 
get_digits(1,8) --> [[1,2,5],[]]
get_digits(1,6) --> [[1],[6]]
get_digits(1,17) --> [[],[0,5,8,8,2,3,5,2,9,4,1,1,7,6,4,7]] 

我拥有它所以我可以使用普通除法找到值,但我很难找到1/17值这里是我的代码:

def get_digits(n, d):
    a = str(n/d)
    b = a[2:]
    d = str("0123456789")
    ListOne = []
    ListTwo = []
    P1 = 0
    P2 = 1
    print(a)
    while P1 < 9:
        if b.count(d[P1:P2]) == 1:
            ListOne.append(d[P1:P2])
            P1 = P1 + 1
            P2 = P2 + 1
        if b.count(d[P1:P2]) > 1:
            ListTwo.append(d[P1:P2])
            P1 = P1 + 1
            P2 = P2 + 1
        if b.count(d[P1:P2]) < 1:
            P1 = P1 + 1
            P2 = P2 + 1
    print([ListOne , ListTwo])

get_digits(1,17)

1 个答案:

答案 0 :(得分:0)

你的代码看似合法 注意几点不同:

  1. 将至少一个参数投射到float,因此除法的结果将是浮点数(而不是在划分int时为零)。
  2. 使用string.digits代替您的d字符串(不要忘记import string
  3. 使用for c in string.digits循环,而不是保留这些索引
  4. 答案顶部get_digits(1, 17)的示例输出错误。 (第一个提示是数字在第二个列表中出现两次)
  5. 代码:

    def get_digits(n,d):
        a = str(n/float(d))[2:]
        listOne = []
        listTwo = []
        print(a)
        for c in string.digits:
            if a.count(c) == 0:
                continue
            elif a.count(c) == 1:
                listOne.append(c)
            else:
                listTwo.append(c)
            print([listOne, listTwo])