鱼C论坛

 找回密码
 立即注册
查看: 2251|回复: 8

[作品展示] Python分数!

[复制链接]
发表于 2023-12-14 20:14:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
你还在为浮点运算不精确而 吗?
你还在因为0.0000000001 == 0而 吗?
没关系!

  1. def gcd(a, b):
  2.     if b == 0:
  3.         return a
  4.     return gcd(b, a % b)
  5. def tongfen(c, m):
  6.     f = gcd(c, m)
  7.     return c // f, m // f

  8. class fen:
  9.     def __init__(self, child, mother):
  10.         if mother < 0:
  11.             mother = abs(mother)
  12.             child = 0 - child
  13.         self.c, self.m = tongfen(abs(child), mother)
  14.         self.c *= (child < 0) * -2 + 1
  15.         if self.m == 0:
  16.             raise ValueError("chu'shu'bu'neng'wei'ling")
  17.     def __invert__(self):
  18.         return fen(0 - self.c, self.m)
  19.     def __add__(self, other):
  20.         return fen(self.c * other.m + other.c * self.m, self.m * other.m)
  21.     def __sub__(self, other):
  22.         return self + (~other)
  23.     def __mul__(self, other):
  24.         return fen(self.c * other.c, self.m * other.m)
  25.     def __truediv__(self, other):
  26.         return fen(self.c * other.m, self.m * other.c)
  27.     def __repr__(self):
  28.         if self.m == 1:
  29.             return str(self.c)
  30.         elif self.c < self.m:
  31.             return "%d/%d"%(self.c, self.m)
  32.         else:
  33.             return "%d+%d/%d"%(self.c//self.m, self.c%self.m, self.m)
  34.     def __eq__(self, other):
  35.         return self.c == other.c and self.m == other.m
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-12-14 20:14:30 | 显示全部楼层
这段代码实现了一个分数类(`fen`),可以用来进行分数的运算。它解决了浮点运算不精确和比较浮点数相等的问题,让我们可以方便地进行精确的分数运算。

让我们来看一下这个分数类的使用方法吧!首先,我们可以通过调用 `fen` 类的构造函数来创建一个分数对象,构造函数接收两个参数:分子和分母。例如:
  1. a = fen(3, 5)   # 创建一个分数对象,表示 3/5
  2. b = fen(-2, 7)  # 创建一个分数对象,表示 -2/7
复制代码

可以使用加号(`+`)、减号(`-`)、乘号(`*`)和除号(`/`)来进行分数的加减乘除运算。例如:
  1. c = a + b  # 分数相加
  2. d = a - b  # 分数相减
  3. e = a * b  # 分数相乘
  4. f = a / b  # 分数相除
复制代码

分数对象也支持取反运算符(`~`)。例如:
  1. g = ~a  # 取反操作,相当于负数
复制代码

可以使用字符串的形式来表示分数对象。例如:
  1. print(a)  # 输出:3/5
  2. print(b)  # 输出:-2/7
  3. print(c)  # 输出:11/35
  4. print(d)  # 输出:31/35
复制代码

分数对象之间也可以进行相等(`==`)的比较。例如:
  1. print(a == b)  # 输出:False
  2. print(a == fen(6, 10))  # 输出:True
复制代码

这样,我们就可以使用这个分数类来进行精确的分数运算了!不用再担心浮点运算不精确和比较浮点数相等的问题啦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-14 20:53:11 | 显示全部楼层
raise ValueError("chu'shu'bu'neng'wei'ling")
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-15 16:24:34 | 显示全部楼层

翻译:除数不能为零
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-15 17:16:46 | 显示全部楼层
实现一个分数类应该很容易实现吧,不过对于设计巨大的浮点运算很实用。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 14:56:05 | 显示全部楼层
嗨,我前几天翻到一个东西,原来 Python 库已经有了:
https://blog.csdn.net/m0_75106254/article/details/128588425

@KeyError
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-19 16:38:20 | 显示全部楼层
zhangjinxuan 发表于 2023-12-19 14:56
嗨,我前几天翻到一个东西,原来 Python 库已经有了:
https://blog.csdn.net/m0_75106254/article/detail ...

这是他自己写的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 17:29:12 | 显示全部楼层

wtf,我记得之前有啊,去哪了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 17:30:28 | 显示全部楼层
  1. from fractions import Fraction
复制代码

评分

参与人数 1鱼币 +3 收起 理由
KeyError + 3 鱼C有你更精彩T_T

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 01:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表