Byt*_*der 5 python math fractions number-formatting
我想在Python 3中编写一个函数,它将作为分子和分母给出的分数转换为它们的字符串表示形式,作为十进制数,但在括号中包含重复的小数位.
一个例子:
convert(1, 4) 应该输出 "0.25"convert(1, 3)应输出"0.(3)"而不是"0.3333333333"convert(7, 11)应输出"0.(63)"而不是"0.6363636364"convert(29. 12)应输出"2.41(6)"而不是"2.4166666667"我当前的代码在问题的最后,但如果有非重复和重复的小数位,它将失败.这是一个包含调试输出(注释print调用)的示例运行:
----> 29 / 12
5
appended 4
2
appended 1
8
index 2 ['29', 2, 8] result ['2.', '4', '(', '1']
repeating 8
['2.', '4', '(', '1', ')']
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我的代码:
def convert(numerator, denominator):
#print("---->", numerator, "/", denominator)
result = [str(numerator//denominator) + "."]
subresults = [str(numerator)]
numerator %= denominator
while numerator != 0:
#print(numerator)
numerator *= 10
result_digit, numerator = divmod(numerator, denominator)
if numerator not in subresults:
subresults.append(numerator)
result.append(str(result_digit))
#print("appended", result_digit)
else:
result.insert(subresults.index(numerator), "(")
#print("index", subresults.index(numerator), subresults, "result", result)
result.append(")")
#print("repeating", numerator)
break
#print(result)
return "".join(result)
Run Code Online (Sandbox Code Playgroud)
您的代码只需要一些小的更改(请参阅下面的评论):
def convert(numerator, denominator):
#print("---->", numerator, "/", denominator)
result = [str(numerator//denominator) + "."]
subresults = [numerator % denominator] ### changed ###
numerator %= denominator
while numerator != 0:
#print(numerator)
numerator *= 10
result_digit, numerator = divmod(numerator, denominator)
result.append(str(result_digit)) ### moved before if-statement
if numerator not in subresults:
subresults.append(numerator)
#print("appended", result_digit)
else:
result.insert(subresults.index(numerator) + 1, "(") ### added '+ 1'
#print("index", subresults.index(numerator), subresults, "result", result)
result.append(")")
#print("repeating", numerator)
break
#print(result)
return "".join(result)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2325 次 |
| 最近记录: |