该程序输入三个整数作为三角形的边长,并打印三角形的面积。如果边不能形成三角形,它将打印一条适当的消息。
我遇到的问题包括:
当我输入无效的长度(例如1 2 3)时,我得到的是0.0而不是错误消息的区域。
输入负数时,出现数学域错误,而不是错误消息。
救命?
#This program will check to see if the area of the triangle can or can not be computed based on the sides entered.
import math
while True:
try:
side1 = int(input("Please enter the value of side 1: "))
side2 = int(input("Please enter the value of side 2: "))
side3 = int(input("Please enter the value of side 3: "))
except ValueError:
print("Please enter a value next time instead of a letter.")
continue
else:
break
def isValid(side1, side2, side3):
if (side1 + side2 > side3) or (side1 + side3 > side2) or (side1 + side3 > side2):
return True
else:
return False
def area(side1, side2, side3):
if isValid(side1, side2, side3) is True:
sides = (side1 + side2 + side3) / 2
TriArea = math.sqrt(sides * (sides - side1) * (sides - side2) * (sides - side3))
print("The area of triangle with sides", side1, side2, side3, "is", TriArea)
elif isValid(side1, side2, side3) is False:
print("Please enter numbers that will make a triangle.")
area(side1, side2, side3)
编辑:由于您的回复,在更改了几件事后,它现在可以正常工作。
变更后
if (side1 + side2 > side3) or (side1 + side3 > side2) or (side1 + side3 > side2):
到下面的代码可以使程序更好地运行。
if (side1 + side2 > side3) and (side1 + side3 > side2) and (side1 + side3 > side2):
也改变了
if isValid(side1, side2, side3) is True:
取而代之的是下面的内容使它变得更加简单。
if isValid(side1, side2, side3):
谢谢大家的快速回复! :)
最佳答案
关键问题是您对三角形不等式的检验:
if (side1 + side2 > side3) or (side1 + side3 > side2) or (side1 + side3 > side2):
您的逻辑是错误的:要形成一个三角形,您需要所有这三个条件都正确,而不仅仅是一个。
if (side1 + side2 > side3) and (side1 + side3 > side2) and (side2 + side3 > side1):
# Note the change in the last clause: you made one test twice, and skipped the third.
将解决您的大部分麻烦。
此外,请熟悉布尔值。首先,以上例程可以简单地阅读
return (side1 + side2 > side3) or (side1 + side3 > side2) or (side1 + side3 > side2)
其次,对该例程的调用超额完成:调用一次并检查一次值:
if isValid(side1, side2, side3):
# Compute area
else
# Print error message
您无需将结果与True进行比较:它已经具有逻辑值。其次,如果到达else部分,则可以确保该函数返回False -无需再次调用相同的数据;无需检查是否为False。
OP编辑后:
if isValid(side1, side2, side3) == True:
应该简单
if isValid(side1, side2, side3):
不要将布尔值与布尔常量进行比较;这是多余的检查。您已经有一个从函数返回的逻辑值。
关于python - 程序检查三角形的面积(是否可以根据输入的边进行计算)。 Python-3.x,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42380175/