该程序输入三个整数作为三角形的边长,并打印三角形的面积。如果边不能形成三角形,它将打印一条适当的消息。

我遇到的问题包括:


当我输入无效的长度(例如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/

10-14 19:22