python输出分数的问题
请教各位大佬有没有一种可以在python中输出分数的做法?我想把分数作为a/b的形式print出来,可python会自动计算a/b,最后输出一个float
于是我想用字符串,即:
f'{a}/{b}'
可是我是把分数作为点的坐标输出的,于是这样输出就变成了:
(1, '1/3')
有没有办法让python直接输出a/b?或者把输出中的单引号去掉? 本帖最后由 xiaosi4081 于 2020-8-6 13:53 编辑
应该没办法吧(不过可以用模块)
用模块的话:
https://zhuanlan.zhihu.com/p/99245095 '1/3' 的单引号代表它是一个字符串,如果要去掉引号就比较麻烦(需要重写元组或字符串类) fractions模块我也没有找到什么可以用的方法,如果真的没办法就先这样吧(好别扭不是吗)
LittleLito666 发表于 2020-8-6 13:51
fractions模块我也没有找到什么可以用的方法,如果真的没办法就先这样吧(好别扭不是吗)
把代码发上来,帮你改下 本帖最后由 xiaosi4081 于 2020-8-6 13:56 编辑
LittleLito666 发表于 2020-8-6 13:51
fractions模块我也没有找到什么可以用的方法,如果真的没办法就先这样吧(好别扭不是吗)
import fractions
fen = fractions.Fraction(a,b)
print(fen) LittleLito666 发表于 2020-8-6 13:51
fractions模块我也没有找到什么可以用的方法,如果真的没办法就先这样吧(好别扭不是吗)
我给你回复了,你看下(求最佳{:10_254:}) xiaosi4081 发表于 2020-8-6 13:54
可行吗?
>>> from fractions import Fraction as F
>>> f = F(3, 5)
>>>
像这样输出会调用元素的 __repr__() 方法 zltzlt 发表于 2020-8-6 13:58
可行吗?
只能用print xiaosi4081 发表于 2020-8-6 13:54
这种方法我也试过,可以用,但是(问题就出在这里)我的代码里print的是一个函数,函数的返回值是一个变量,这个变量又是另一个函数的返回值,就像这样:
def change_to_fraction(num):
return Fraction(num)
def fn():
x = change_to_fraction(...一些运算)
y = change_to_fraction(...一些运算)
return (x, y)
print(fn()) LittleLito666 发表于 2020-8-6 14:02
这种方法我也试过,可以用,但是(问题就出在这里)我的代码里print的是一个函数,函数的返回值是一个变 ...
print出来就是这个样子{:10_266:}
(1, '1/3') LittleLito666 发表于 2020-8-6 14:02
这种方法我也试过,可以用,但是(问题就出在这里)我的代码里print的是一个函数,函数的返回值是一个变 ...
把你的完整代码发上来 本帖最后由 xiaosi4081 于 2020-8-6 14:10 编辑
LittleLito666 发表于 2020-8-6 14:03
print出来就是这个样子
这样子试试:
>>> from fractions import Fraction as F
>>> f = F(3, 5)
>>> test =
>>> print(test) 代码在这里了
from fractions import Fraction
class FunctionError(BaseException):
pass
def change2fraction(obj):
a, b = obj.as_integer_ratio()
if a % b == 0:
if a == b:
return 1
elif a == -b:
return -1
else:
return int(a / b)
else:
return Fraction(a, b)
class YiBanShi(object):
def __init__(self, a, b, c):
if a == 0:
raise FunctionError('这不是二次函数!')
else:
self.a = Fraction(a)
self.b = Fraction(b)
self.c = Fraction(c)
def get_point(self):
x = change2fraction(- (self.b / 2 * self.a))
y = change2fraction((4 * self.a * self.c - self.b ** 2) / (4 * self.a))
return (x, y)
f1 = YiBanShi(2, -1, -1)
print(f1.get_point()) xiaosi4081 发表于 2020-8-6 14:05
这样子试试:
>>> from fractions import Fraction as F
>>> f = F(3, 5)
>>> t =
>>> print(t)
zltzlt 发表于 2020-8-6 14:08
只能调用__str__方法了{:10_266:}(代码已修改) 这样就 OK 了:
from fractions import Fraction
class FunctionError(BaseException):
pass
def change2fraction(obj):
a, b = obj.as_integer_ratio()
if a % b == 0:
if a == b:
return 1
elif a == -b:
return -1
else:
return int(a / b)
else:
return Fraction(a, b)
class Tuple(tuple):
def __str__(self):
return f"({', '.join(str(i) for i in self)})"
class YiBanShi(object):
def __init__(self, a, b, c):
if a == 0:
raise FunctionError('这不是二次函数!')
else:
self.a = Fraction(a)
self.b = Fraction(b)
self.c = Fraction(c)
def get_point(self):
x = change2fraction(- (self.b / 2 * self.a))
y = change2fraction((4 * self.a * self.c - self.b ** 2) / (4 * self.a))
return Tuple((x, y))
f1 = YiBanShi(2, -1, -1)
print(f1.get_point()) xiaosi4081 发表于 2020-8-6 14:11
只能调用__str__方法了(代码已修改)
这样输出带有引号:
>>> from fractions import Fraction as F
>>> f = F(3, 5)
>>> t =
>>> print(t)
zltzlt 发表于 2020-8-6 14:13
这样输出带有引号:
那就没办法了{:10_266:} xiaosi4081 发表于 2020-8-6 14:13
那就没办法了
哈哈哈那就这样吧
页:
[1]