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
正在阻止这种情况发生。我该如何尝试解决这个问题?
答案 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。