定义一个名为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)
答案 0 :(得分:0)
你的代码看似合法
注意几点不同:
float
,因此除法的结果将是浮点数(而不是在划分int
时为零)。string.digits
代替您的d
字符串(不要忘记import string
for c in string.digits
循环,而不是保留这些索引get_digits(1, 17)
的示例输出错误。 (第一个提示是数字在第二个列表中出现两次)代码:
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])