我是一个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)
有一个名为“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”,这将是本例的等效值)。但无论哪种方式,这都应该为您提供一些进步的可能性。