如何在 Python 中简化变量的分数值
How to simplify a variable's fraction value in Python
我有一个名为 b
的变量,它的值是这样确定的:b = float(input("What is your y-intercept?"))
。在文件的后面,我想获取 b
的值(假设它是一个浮点数)并将其转换为这样的分数:print(Fraction(b))
。我知道像 print(Fraction(0.45))
这样的东西会打印 8106479329266893/18014398509481984
,但是 print(Fraction('0.45'))
会打印 9/20
。我怎样才能用变量得到相同的结果?做 print(Fraction('b'))
给我这个错误:ValueError: Invalid literal for Fraction: 'b'
.
代码:
from fractions import Fraction
elif equation == 'slope':
slope = input("Do you need to find slope? Type 'yes' or 'no'.")
if slope == 'yes':
y2 = float(input("What's your y2 value?:"))
y1 = float(input("What is your y1 value?"))
x2 = float(input("What is your x2 value?:"))
x1 = float(input("What is your x1 value?:"))
m = y2-y1/x2-x1
print(str(m))
elif slope == 'no':
m = input("What is the slope?")
b = float(input("What is your y-intercept?"))
m = str(m)
b = str(b)
print("Your equation is: y = {}x + {}".format(m,b))
simplify = input("Do you want to simplify this to standard form? Type in 'yes' or 'no'")
if simplify == 'yes':
m = float(m)
b = float(b)
if m < 0:
pos_m = m*-1
if isinstance(b, float):
print(Fraction(b)) #Works, but not what I want
print(Fraction('b')) #Does not work
Fraction(str(b))
这就是将变量的值(而不是它的*名称)转换为字符串的方式。
正如@Prune 提到的,您必须将变量的值转换为字符串,一种替代方法是使用 f-string:
from fractions import Fraction
b = 0.45
print(Fraction(f'{b}'))
建议的文档解决方案是使用 limit_denominator:
b = 0.45
print(Fraction(b).limit_denominator())
输出
9/20
有关浮点的更多信息,请参阅 this。
print(Fraction('b'))
不起作用的原因是因为您要求 python 从字符 'b' 中创建分数。您需要做的是获取 b 的字符串表示形式,即 str(b),因此 Fraction(str(b))
为什么要使用浮点变量?最好使用 int() 函数来简化答案。创建整数而不是添加小数。
我有一个名为 b
的变量,它的值是这样确定的:b = float(input("What is your y-intercept?"))
。在文件的后面,我想获取 b
的值(假设它是一个浮点数)并将其转换为这样的分数:print(Fraction(b))
。我知道像 print(Fraction(0.45))
这样的东西会打印 8106479329266893/18014398509481984
,但是 print(Fraction('0.45'))
会打印 9/20
。我怎样才能用变量得到相同的结果?做 print(Fraction('b'))
给我这个错误:ValueError: Invalid literal for Fraction: 'b'
.
代码:
from fractions import Fraction
elif equation == 'slope':
slope = input("Do you need to find slope? Type 'yes' or 'no'.")
if slope == 'yes':
y2 = float(input("What's your y2 value?:"))
y1 = float(input("What is your y1 value?"))
x2 = float(input("What is your x2 value?:"))
x1 = float(input("What is your x1 value?:"))
m = y2-y1/x2-x1
print(str(m))
elif slope == 'no':
m = input("What is the slope?")
b = float(input("What is your y-intercept?"))
m = str(m)
b = str(b)
print("Your equation is: y = {}x + {}".format(m,b))
simplify = input("Do you want to simplify this to standard form? Type in 'yes' or 'no'")
if simplify == 'yes':
m = float(m)
b = float(b)
if m < 0:
pos_m = m*-1
if isinstance(b, float):
print(Fraction(b)) #Works, but not what I want
print(Fraction('b')) #Does not work
Fraction(str(b))
这就是将变量的值(而不是它的*名称)转换为字符串的方式。
正如@Prune 提到的,您必须将变量的值转换为字符串,一种替代方法是使用 f-string:
from fractions import Fraction
b = 0.45
print(Fraction(f'{b}'))
建议的文档解决方案是使用 limit_denominator:
b = 0.45
print(Fraction(b).limit_denominator())
输出
9/20
有关浮点的更多信息,请参阅 this。
print(Fraction('b'))
不起作用的原因是因为您要求 python 从字符 'b' 中创建分数。您需要做的是获取 b 的字符串表示形式,即 str(b),因此 Fraction(str(b))
为什么要使用浮点变量?最好使用 int() 函数来简化答案。创建整数而不是添加小数。