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

时间:2021-08-01 14:33:18

标签: python function fractions

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()

当 1 个输入为负时,我希望在分数的前面添加一个负数,而当两者都为负时没有变化。对于 0,如果分母为 0,则输出“无效”,如果分子为 0,则输出为 0。

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

1 个答案:

答案 0 :(得分:1)

首先确保 b 不是负数。如果是,则翻转两个标志。然后在 abs(a) 中使用 range

您的代码还应将 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)

请注意,获得最大公约数有 more efficient algorithms