社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

TensorflowTryhard • 3 年前 • 1014 次点击  
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
 
1014 次点击  
文章 [ 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 获得最大公约数。