试图在python中执行余弦规则公式,但是没有给出预期的输出



如果我选择缺少角度函数,例如a=10,b=10,c=10,则角度的预期输出为60度,但程序的输出为0.1546…

import math, sys
def missingAngle():
sideA = int(input("size of side a = "))
sideB = int(input("size of side b = "))
sideC = int(input("size of side c = "))
answer = math.acos((sideB**2 + sideC**2 - sideA**2) / (2 * sideB * sideC))
return answer
def missingSide():
angleA = int(input("size of angle A = "))
sideB = int(input("size of side b = "))
sideC = int(input("size of side c = "))
answer = math.sqrt(sideB**2 + sideC**2 - 2 * sideB * sideC * math.cos(angleA))
return answer
missingSideOrAngle = input("Are you trying to work out the missing angle or side?(Angle/Side) = ")
while True:
if missingSideOrAngle.title() == "Angle":
print("Your answer is = " + str(missingAngle()))
sys.exit()
elif missingSideOrAngle.title() == "Side":
print("Your answer is = " + str(missingSide()))
sys.exit()
else:
missingSideOrAngle = input("Please enter a valid string(Angle/Side) = ")

我永远无法重现产生错误0.1546的错误。

以下是您的程序,其中有一些调整将帮助您扩展程序的能力:

import math
def missingAngle():
sideA = float(input("size of side a = "))
sideB = float(input("size of side b = "))
sideC = float(input("size of side c = "))
try:
answer = math.acos((sideB**2 + sideC**2 - sideA**2) / (2 * sideB * sideC))
return f'Your answer is: {math.degrees(answer):.2f} degrees'
except ValueError:
return 'Values given cannot form a triangle'
def missingSide():
angleA = math.radians(float(input("size of angle A (degrees) = ")))
sideB = float(input("size of side b = "))
sideC = float(input("size of side c = "))
answer = math.sqrt(sideB**2 + sideC**2 - 2 * sideB * sideC * math.cos(angleA))
return f'Your answer is: {answer:.2f} units'

while True:
missingSideOrAngle = input("Are you trying to work out the missing angle or side?(Angle/Side) = ")
if missingSideOrAngle.title() == "Angle":
print(missingAngle())
elif missingSideOrAngle.title() == "Side":
print(missingSide())
else:
missingSideOrAngle = input("Please enter a valid string(Angle/Side) = ")

我把它变成了一个实际的循环,所以它会让用户无休止地运行场景,直到他们达到Ctrl-C或输入一些引发未处理错误的内容。我没有试图解释所有可能的错误。

使missingAngle返回度数。它还包括一个"try-except"块,用于捕捉如果三条边不能形成真正的三角形(例如:12、45、85(将发生的错误。输入被强制转换为浮点值,因此用户可以输入距离或角度的小数,并且返回被格式化为呈现为小数点后2位。

这应该对你有帮助。您可能希望为非数字的数字字段的用户输入设计错误处理,并在missingSide上运行一些测试,以查看用户输入可能出现的问题并发现这些问题。你可能想尝试一个180度的角度。有些值可能不会产生实际错误,但可能会产生意外结果。

祝你好运!

最新更新