python codeacademy 上的数学在除以 int 与 float 时表现得很奇怪。动态 typed/cast 个问题
python math on codeacademy acting weird when dividing by int vs float. dynamically typed/cast issues
好的,所以问题要求在数字列表中找到中位数(中间数)。如果列表中的数字数量为偶数 return 中间两个数字的平均值。
我发现有些代码在网站上不起作用,但在 PyCharm 中却有效。我想这是因为代码学院学习python上的一些代码是旧的(例如它们的打印功能和raw_input()现在已被弃用)
以下不适用于 CodeAcademy
def median(ls):
ls = sorted(ls)
length = len(ls)
median = 0.0
temp = 0
if length % 2 == 0:
temp = int(length / 2)
median = float (ls[temp-1] + ls[temp]) / 2 #why is this a problem?
return median
else:
temp=int((length-1) / 2)
median = ls[temp]
return median
注:上面returns 4.0 而不是4.5 传[4,5,5,4]
然而,当我像下面那样将 /2 更改为 /2.0 时,它会起作用。
def median(ls):
ls = sorted(ls)
length = len(ls)
median = 0.0
temp = 0
if length % 2 == 0:
temp = int(length / 2)
median = float (ls[temp-1] + ls[temp]) / 2.0 #here
return median
else:
temp=int((length-1) / 2)
median = ls[temp]
return median
注意:以上正确 returns 4.5 当通过 [4,5,5,4]
所以即使我已经找到了解决问题的方法,我还是想知道为什么会发生这种情况,即使两个代码示例都可以在 python 的较新版本中工作,但一个就是更多正确或 'cleaner' 为什么?
好的,所以我认为第一个返回奇怪结果的代码示例中发生的是 Python 将前两个数字转换为整数以便除以整数(传递 [4,4 时产生 4 ,5,5](排序后))然后投出那个答案
(4) 给一个浮点数 4.0。但是当我除以 2.0 时,它首先将这些数字转换为浮点数,给出正确的 4.5。这也允许我删除显式转换为 float 并且在测试时在代码学院工作
好的,所以问题要求在数字列表中找到中位数(中间数)。如果列表中的数字数量为偶数 return 中间两个数字的平均值。
我发现有些代码在网站上不起作用,但在 PyCharm 中却有效。我想这是因为代码学院学习python上的一些代码是旧的(例如它们的打印功能和raw_input()现在已被弃用)
以下不适用于 CodeAcademy
def median(ls):
ls = sorted(ls)
length = len(ls)
median = 0.0
temp = 0
if length % 2 == 0:
temp = int(length / 2)
median = float (ls[temp-1] + ls[temp]) / 2 #why is this a problem?
return median
else:
temp=int((length-1) / 2)
median = ls[temp]
return median
注:上面returns 4.0 而不是4.5 传[4,5,5,4]
然而,当我像下面那样将 /2 更改为 /2.0 时,它会起作用。
def median(ls):
ls = sorted(ls)
length = len(ls)
median = 0.0
temp = 0
if length % 2 == 0:
temp = int(length / 2)
median = float (ls[temp-1] + ls[temp]) / 2.0 #here
return median
else:
temp=int((length-1) / 2)
median = ls[temp]
return median
注意:以上正确 returns 4.5 当通过 [4,5,5,4]
所以即使我已经找到了解决问题的方法,我还是想知道为什么会发生这种情况,即使两个代码示例都可以在 python 的较新版本中工作,但一个就是更多正确或 'cleaner' 为什么?
好的,所以我认为第一个返回奇怪结果的代码示例中发生的是 Python 将前两个数字转换为整数以便除以整数(传递 [4,4 时产生 4 ,5,5](排序后))然后投出那个答案 (4) 给一个浮点数 4.0。但是当我除以 2.0 时,它首先将这些数字转换为浮点数,给出正确的 4.5。这也允许我删除显式转换为 float 并且在测试时在代码学院工作