将输入的分数转换为小数

问题描述 投票:0回答:1

我是一个Python初学者,我正在尝试创建一个简单的三角形计算器。现在,我正在尝试将输入的分数转换为浮点数,以便我可以将其乘以 math.pi 并用它执行我需要的操作。我遇到一条错误消息,上面写着

y =float((input("Angle B: ")))
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not convert string to float: '1/3'

当我输入“1/3”时。

我尝试使用

decimal.Decimal(input("Angle B:"))
来解决这个问题,但没有成功。

现在该函数看起来像:

def chooseradians():
    choice = str(input("1. Side Side Side \n2. Side Angle Side\n3. Angle Side Angle"))
    if str(choice) == str(1):
        x =float(input("Side A: "))
        y =float(input("Side B: "))
        z =float(input("Side C: "))
        sidesidesiderad(x, y, z)
    elif str(choice) == str(2):
        x =float(input("Side A: "))
        y =float((input("Angle b: ")))
        z =float(input("Side C: "))
        SideAngleSiderad(x, y, z)
    elif str(choice) == str(3):
        x =float((input("Angle a: ")))
        y =float(input("Side B: "))
        z =float((input("Angle c: ")))
        #AngleSideAnglerad(x, y, z)
python decimal fractions
1个回答
0
投票

有一个名为“fractions”的包可以导入,它可以进行简单的分数转换。以下是使用该包的重构示例。

from fractions import Fraction

def chooseradians():
    choice = str(input("1. Side Side Side \n2. Side Angle Side\n3. Angle Side Angle "))
    if str(choice) == str(1):
        x =float(Fraction(input("Side A: ")))
        y =float(Fraction(input("Side B: ")))
        z =float(Fraction(input("Side C: ")))
        print("Side A:", x, "Side B:", y, "Side C:", z)
        #sidesidesiderad(x, y, z)
    elif str(choice) == str(2):
        x =float(Fraction(input("Side A: ")))
        y =float((Fraction(input("Angle b: "))))
        z =float(Fraction(input("Side C: ")))
        print("Side A:", x, "Angle b:", y, "Side C:", z)
        #SideAngleSiderad(x, y, z)
    elif str(choice) == str(3):
        x =float((Fraction(input("Angle a: "))))
        y =float(Fraction(input("Side B: ")))
        z =float((Fraction(input("Angle c: "))))
        print("Angle a:", x, "Side B:", y, "Angle c:", z)
        #AngleSideAnglerad(x, y, z)

chooseradians()

执行简单的测试会产生以下终端输出。

craig@Vera:~/Python_Programs/Triangle$ python3 Fractions.py 
1. Side Side Side 
2. Side Angle Side
3. Angle Side Angle 1
Side A: 3
Side B: 22/33
Side C: 5
Side A: 3.0 Side B: 0.6666666666666666 Side C: 5.0

现在,如果任何值由整数加小数组成(例如“1 1/3”),那么这可能解决了一半的问题。测试此类复合录入时,仍然出现输入错误。

craig@Vera:~/Python_Programs/Triangle$ python3 Fractions.py 
1. Side Side Side 
2. Side Angle Side
3. Angle Side Angle 1
Side A: 1 1/3
Traceback (most recent call last):
  File "/home/craig/Python_Programs/Triangle/Fractions.py", line 24, in <module>
    chooseradians()
  File "/home/craig/Python_Programs/Triangle/Fractions.py", line 6, in chooseradians
    x =float(Fraction(input("Side A: ")))
  File "/usr/lib/python3.10/fractions.py", line 115, in __new__
    raise ValueError('Invalid literal for Fraction: %r' %
ValueError: Invalid literal for Fraction: '1 1/3'

如果允许输入此类复合整数和分数,则需要构建后续解析函数,或者需要将整数部分转换为等价分数(例如“4/3”,这将是本例的等效值)。但无论哪种方式,这都应该为您提供一些进步的可能性。

© www.soinside.com 2019 - 2024. All rights reserved.