即使将其包装在整数函数中,我的代码也将iMid读为float并给出TypeError。另外,还有另一种方法可以找到中间值的索引,这比我在这里尝试的要容易吗?
def isIn(char, aStr):
'''
char: a single character
aStr: an alphabetized string
returns: True if char is in aStr; False otherwise
'''
# Your code here
import numpy as np
def iMid(x):
'''
x : a string
returns: index of the middle value of the string
'''
if len(x) % 2 == 0:
return int(np.mean(len(x)/2, (len(x)+2)/2)) #wrapped the
# answer for iMid
#in the integer function
else:
return int((len(x)+1)/2)
if char == aStr[iMid] or char == aStr: #iMid is not being interpreted as an integer
return True
elif char < aStr[iMid]:
return isIn(char, aStr[0:aStr[iMid]])
else:
return isIn(char, aStr[aStr[iMid]:])
print(isIn('c', "abcd"))
答案 0 :(得分:1)
在
if char == aStr[iMid] or char == aStr: #iMid is not being interpreted as an integer
iMid
不是整数。是功能。
您需要调用该函数以获取返回的整数。
if char == aStr[iMid(aStr)] or char == aStr: #iMid is called and returns an integer
答案 1 :(得分:0)
正如Doctorlove所说,aStr [iMid]使用函数iMid作为索引。因为iMid是一个功能对象。 我认为您应该将所有aStr [iMid]替换为aStr [iMid(aStr)]
答案 2 :(得分:0)
您的问题是您在numpy mean函数中使用axis选项的方式。 https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.mean.html
根据经验,1-轴应该是整数,2-如果是元组,则应该在数组的尺寸之内。
例如,对于这样的数组:[1,2],轴只有0。如果您有[[1,2]],则该轴可以为0或1。