Py学习  »  Python

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

TensorflowTryhard • 3 年前 • 1084 次点击  
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 阻止这一切发生。我怎样才能解决这个问题?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128625
 
1084 次点击  
文章 [ 1 ]  |  最新文章 3 年前
trincot
Reply   •   1 楼
trincot    3 年前

首先确保 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 获得最大公约数。