Python3方法输出异常问题咨询:为何返回类似数组的奇怪结果?
问题根源与修复方案
兄弟,你遇到的这个奇怪输出(1, 5),根源是一个超容易疏忽的语法细节:你在计算平方根时用了逗号0,5,而不是小数点0.5!
为什么会出现元组输出?
在Python里,逗号是元组的分隔符,而且它的优先级比幂运算**低。所以你写的:
n=(((punkt1[0]-punkt2[0])**2)+((punkt1[1]-punkt2[1])**2))**0,5
会被Python拆成两部分:
- 先计算
(((punkt1[0]-punkt2[0])**2)+((punkt1[1]-punkt2[1])**2))**0——任何非零数的0次幂都是1,所以这部分结果是1 - 再把这个1和5组合成一个元组
(1, 5)
这就是你看到“类似数组的奇怪结果”的原因啦!而你前面的print(int((punkt1[0])-(punkt2[0])))输出0是完全正常的,因为两个点的x坐标都是1,相减后就是0。
修复后的代码
只需要把逗号改成小数点,让**0.5来表示平方根运算就可以解决问题:
class Maths(): def __init__(self): pass def abstand_punkt_punkt(self,punkt1,punkt2): print(int((punkt1[0])-(punkt2[0]))) print(punkt1[0]) print(punkt2[0]) # 把逗号替换成小数点 n=(((punkt1[0]-punkt2[0])**2)+((punkt1[1]-punkt2[1])**2))**0.5 print(n) return n m=Maths() print(m.abstand_punkt_punkt([1,10],[1,100]))
运行后会输出正确的距离值90.0,再也不会出现奇怪的元组了。
更直观的写法(可选)
如果你觉得**0.5不够直观,也可以用Python标准库的math.sqrt()函数来计算平方根,代码可读性会更高:
import math class Maths(): def __init__(self): pass def abstand_punkt_punkt(self,punkt1,punkt2): dx = punkt1[0] - punkt2[0] dy = punkt1[1] - punkt2[1] n = math.sqrt(dx**2 + dy**2) print(n) return n m=Maths() print(m.abstand_punkt_punkt([1,10],[1,100]))
内容的提问来源于stack exchange,提问作者WuschelderI
相关产品推荐
相关产品推荐

