分数的加减乘除,可以使用python中fractions模块的Fraction类 fraction n.分数
但该题最麻烦的是输出,有很多种情况需要讨论
from fractions import Fraction
l, r = input().split()
ll = Fraction(l)
rr = Fraction(r)
try:
ans = [ll + rr, ll - rr, ll * rr, ll / rr]
except:
ans = [ll + rr, ll - rr, ll * rr, 'Inf']
def fmt(x: Fraction):# fmt为format的简写
if x == "Inf":
return "Inf"
up, down = x.numerator, x.denominator
if up < 0:
sign = '-'
left_bracket = '('
right_bracket = ')'
else:
sign = ''
left_bracket = ''
right_bracket = ''
up = abs(up)
z = up // down # 整数部分
up %= down # 小数部分的分子
# 整数部分有两种情况,小数部分有两种情况,2 * 2 = 4,分4种情况讨论
if z != 0 and up != 0:
return f"{left_bracket}{sign}{z} {up}/{down}{right_bracket}"
elif z == 0 and up == 0:
return '0'
elif z == 0 and up != 0:
return f"{left_bracket}{sign}{up}/{down}{right_bracket}"
elif z != 0 and up == 0:
return f"{left_bracket}{sign}{z}{right_bracket}"
print(f"{fmt(ll)} + {fmt(rr)} = {fmt(ans[0])}")
print(f"{fmt(ll)} - {fmt(rr)} = {fmt(ans[1])}")
print(f"{fmt(ll)} * {fmt(rr)} = {fmt(ans[2])}")
print(f"{fmt(ll)} / {fmt(rr)} = {fmt(ans[3])}")
关于这一行代码的解释如下:
def fmt(x: Fraction):# fmt为format的简写
在Python中,def fmt(x: Fraction):
这种写法使用了类型提示(type hints),它是Python 3.5及以后版本中引入的一种特性,用于函数定义中指定参数和返回值的预期类型。这里的Fraction
是从fractions
模块中导入的一个类,用于表示有理数(即分数)。
类型提示本身不会改变Python代码的运行方式,也不会在运行时进行类型检查(除非使用额外的工具或库,如mypy
)。它们的主要目的是为了提高代码的可读性和可维护性,以及方便集成到支持类型检查的静态分析工具中。