我想写一个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`调用)的示例运行:
这里我做错了什么?
我的代码:
举个例子:
- `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', ')']
这里我做错了什么?
我的代码:
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)
test_cases = [(3,12)]
。 - Piotr Wasilewicz0.25
。在3.X中,我得到了0.0.25.0
。这是一个问题。我将尝试制定一个版本无关的方法。 - Kevin/
改为//
即可 :) - Piotr Wasilewicz//
这一事实表明我一开始就尝试使其与Python 3兼容。奇怪的是我没有在所有地方应用它。 - Kevin