python:float()参数中出现错误,必须是字符串或数字
我现在是一名Python新手,我通过在上完课程来学习这一点。这个网站提供了一个在线评判系统,就像一个ACM一样,可以检查我的代码是否工作正常。除此之外,它在我的其他代码上也非常有效 我试图在安装了Python2.6的情况下将这段代码复制到我的本地pc上,它可以正常工作 顺便问一下,你能给像我这样的初学者推荐一些Python语法书吗?我只是想知道一些关于这种语言的内部细节 因为我不能在这里发布图片,所以我只粘贴下面的代码: 在我的mac电脑上: : 在网站上:标题是:熟能生巧15/15:python:float()参数中出现错误,必须是字符串或数字,python,typeerror,Python,Typeerror,我现在是一名Python新手,我通过在上完课程来学习这一点。这个网站提供了一个在线评判系统,就像一个ACM一样,可以检查我的代码是否工作正常。除此之外,它在我的其他代码上也非常有效 我试图在安装了Python2.6的情况下将这段代码复制到我的本地pc上,它可以正常工作 顺便问一下,你能给像我这样的初学者推荐一些Python语法书吗?我只是想知道一些关于这种语言的内部细节 因为我不能在这里发布图片,所以我只粘贴下面的代码: 在我的mac电脑上: : 在网站上:标题是:熟能生巧15/15: def
def median(li):
if len(li) >= 2:
li_test = sorted(li)
if len(li_test)%2 == 0:
cd1 = len(li_test)/2-1
cd2 = cd1
re = (li_test[cd1] + li_test[cd2])/2.0
else:
cd = (len(li_test)+1)/2-1
re = li_test[cd]
else:
re = li
return re
Oops, try again. Your function crashed on [1] as input because your function throws a "float() argument must be a string or a number" error.
发生此错误的原因是,如果li
的长度为1或0,则返回列表li
>>> median([1])
[1]
>>> median([0])
[0]
也许你想要
if len(li) >= 1:
...
else:
raise IndexError("No items in this list")
代码中的另一个错误是,如果列表中有偶数个元素,则应取中间两个元素的平均值。但在你的代码中
if len(li_test)%2 == 0:
cd1 = len(li_test)/2-1
cd2 = cd1
re = (li_test[cd1] + li_test[cd2])/2.0
取两个中间元素中的一个,将相同的数字加两次,然后除以2。应该是
if len(li_test) % 2 == 0:
cd1 = len(li_test) / 2
cd2 = cd1 - 1
re = (li_test[cd1] + li_test[cd2])/2.0
不,我想我做不到。这是一个在线评判系统,所以我只能制作代码以满足其标准。在[1]的长度为1的情况下,很明显中位数是1,所以我只返回了数字。我看不出有什么错误。您返回的是列表[1]
而不是int
1
TK,来说明Jay的第二点--[1,3]
的中值是多少?对不起,我正忙于上课。。我知道我的错在哪里了。[0]和0不是一回事。对不起,我曾经是一个Matlab用户,这两个都很混乱。看来我需要更多的练习。谢谢你们的帮助。
if len(li_test)%2 == 0:
cd1 = len(li_test)/2-1
cd2 = cd1
re = (li_test[cd1] + li_test[cd2])/2.0
if len(li_test) % 2 == 0:
cd1 = len(li_test) / 2
cd2 = cd1 - 1
re = (li_test[cd1] + li_test[cd2])/2.0