求解分数的函数不适用于负数或零


def fraction(a=None, b=None):
if a is None:
a = int(input("Enter the value of a "))
if b is None:
b = int(input("Enter the value of b "))
for i in range(1, min(a, b) + 1):
if a % i == 0 and b % i == 0:
gcf = i
print(a//gcf, "/", b//gcf)
fraction()

当一个输入为负时,我想在分数的前面加一个负数,当两个输入都为负时,没有变化。对于0,如果分母为0,则输出为"无效";如果分子为0,输出为0。

然而,我的i in range正在阻止这种情况发生。我该如何解决这个问题?

首先确保b不是负的。如果是的话,把两个标志都翻转过来。然后在range中使用abs(a)

你的代码也应该初始化gcf为1,因为有可能循环不会进行迭代(即当a为0时),然后gcf已经为1,你不妨从2开始循环。

同样,不要在这样的函数中进行I/O操作;总是将I/O与算法逻辑分开。执行函数外的I/O任务

下面是它的工作原理:

def fraction(a, b):
if b < 0:
a = -a
b = -b
gcf = 1
for i in range(2, min(abs(a), b) + 1):
if a % i == 0 and b % i == 0:
gcf = i
return a//gcf, b//gcf

a = int(input("Enter the value of a "))
b = int(input("Enter the value of b "))
a, b = fraction(a, b)
print(a, "/", b)

请注意,有更有效的算法来求最大公约数。

最新更新