Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用有序数组求解勾股定理(Python)_Python_Arrays - Fatal编程技术网

使用有序数组求解勾股定理(Python)

使用有序数组求解勾股定理(Python),python,arrays,Python,Arrays,在毕达哥拉斯定理中,斜边是最长的长度。我能够对数组进行排序,自动将值从最小到最大排序。现在,问题是如何处理这些值?程序中的用户不知道最长的长度(用户输入坐标),计算机绘制三个点的图形,并使用距离公式查看三条边之间的长度 下面是可以对值进行排序的代码 #result3, result2, result are leg measurements brandonarray[result3,result2,result] brandonarray.sort(key=int) 因此,例如,如果用户绘制3

在毕达哥拉斯定理中,斜边是最长的长度。我能够对数组进行排序,自动将值从最小到最大排序。现在,问题是如何处理这些值?程序中的用户不知道最长的长度(用户输入坐标),计算机绘制三个点的图形,并使用距离公式查看三条边之间的长度

下面是可以对值进行排序的代码

#result3, result2, result are leg measurements
brandonarray[result3,result2,result]
brandonarray.sort(key=int)
因此,例如,如果用户绘制3个随机点(让我们使用(3,5)、(10,10)、(19,20)) 我让程序打印阵列距离数字

#result3 was 8, result2 was 13, result was 21
[8,13,21]
如果我插入这三个数字,我知道它会起作用。我让程序告诉你这些腿的尺寸会使它成不等边,它是一个钝角三角形

但是,如果用户在不注意边长的情况下提出了这些观点,又会怎样呢

#all of these are strings b/c  in the beginning of program, user has input
joe=str(float(result3)**int(2))
sally=str(float(result2)**int(2))

print(str(float(result3)**int(2)),"+",float(result2)**int(2),"=",float(result)**int(2))
print("")
print(str(float(joe)+float(sally)),"=",str(float(result)**int(2)))

#this code no matter what, will take the number its assigned too, regardless if its bigger than the hypotenuse
if(str(float(joe)+float(sally))>str(float(result)**int(2))):
    print("This is an acute triangle!")
elif(str(float(joe)+float(sally))<str(float(result)**int(2))):
    print("This is an obtuse triangle!")
elif(str(float(joe)+float(sally))==str(float(result)**int(2))):
    print("This is an right triangle!")
#所有这些都是程序开头的b/c字符串,用户有输入
joe=str(浮动(结果3)**int(2))
sally=str(float(result2)**int(2))
打印(str(float(result3)**int(2)),“+”,float(result2)**int(2),“=”,float(result)**int(2))
打印(“”)
打印(str(float(joe)+float(sally)),“=”,str(float(result)**int(2)))
#不管怎样,这个代码也会取它指定的数字,不管它是否大于斜边
如果(str(float(joe)+float(sally))>str(float(result)**int(2)):
打印(“这是一个锐角三角形!”)

elif(str(float(joe)+float(sally))我认为这可能是一个更好的方法,假设您的三个长度当前是变量
x
y
z
中的数字(整数或浮点,甚至字符串):

x = float(x)  # convert from int or string if necessary
y = float(y)
z = float(z)

x, y, z = sorted([x, y, z])
a = x * x + y * y
b = z * z
if a < b:
    print("obtuse")
elif a > b:
    print("acute")
else:             # a == b
    print("right")
x=float(x)#必要时从int或string转换
y=浮动(y)
z=浮动(z)
x、 y,z=已排序([x,y,z])
a=x*x+y*y
b=z*z
如果ab:
打印(“急性”)
其他:#a==b
打印(“右”)
然而,请注意,由于浮点运算的不精确性,检测直角三角形时会出现一些失败,因为,例如,25.0!=25.000000000001…如果您想避开这个问题,您需要使用类似于
的东西,如果abs(a-b)
对于一些适当小的
epsilon


如果没有前三行,代码应该可以正确地处理所有整数值,因为这样所有计算值都将是整数(或
long
s),并且算法应该是精确的。

代码中有太多转换floatintstr。您应该能够删除其中的大部分。特别是
int(2)
brandonarray[result3,result2,result]
?你的意思是
brandonarray=[result3,result2,result]
?就像@Elazar说的:不要过度使用构造函数转换。特别是,想象一种情况,
joe=2
sally=10
。然后
str(joe)>str(sally)
.Oops!您的描述建议您从整数坐标开始。在这种情况下,不要执行平方根运算,而是保留平方值,只进行整数运算。这样您就不会失去精度。了解它,热爱它,再也不会因为不精确的表示而遭受不精确的痛苦。@MatthewCole是的,如果它真的是不精确的话,也是这样考虑到问题中的示例代码和数字,我有点犹豫是否要提出这个问题,因为尽管这个包很好,但它确实引入了一点复杂性。。。