我对Python完全陌生,因此问题就在于此。 我试图解决一个标准的面试问题,即在阵列中找到一个高峰 峰值被定义为大于它的左右邻居的数字。我试图找到最大的峰值。
这是我的代码
#!/usr/bin/python3
def main():
arr = [7, 12, 13, 8, 2, 16, 24, 11, 5, 1]
num = find_peak(arr)
print(num)
def find_peak(arr):
return find_peak(arr, 0, len(arr))
def find_peak(arr, start, stop):
mid = (start + stop)/2
if(arr[mid] > arr[mid-1] and arr[mid] > arr[mid+1]):
return arr[mid]
elif (arr[mid] < arr[mid -1]):
find_peak(arr, 0, mid-1)
elif (arr[mid] < arr[mid+1]):
find_peak(arr, mid+1, stop)
if __name__ == '__main__':
main()
这是我得到的错误
Traceback (most recent call last):
File "peak.py", line 23, in <module>
main()
File "peak.py", line 5, in main
num = find_peak(arr)
TypeError: find_peak() missing 2 required positional arguments: 'start' and 'stop'
任何帮助表示赞赏
答案 0 :(得分:4)
你有find_peak
的两个函数定义,一个有一个参数arr
,另一个有三个参数arr
,start
和stop
。第二个覆盖了第一个。
为两个不同的功能使用两个不同的名称
答案 1 :(得分:0)
你这是在说:
num = find_peak(arr)
但是find_peak
有3个参数,正如错误所述。你只提供了一个。
与C ++或其他语言不同,您不能使用具有不同参数的同名函数(也称为函数重载)。但是,您可以在函数声明中定义可选参数。
答案 2 :(得分:0)
def main():
arr = [7, 12, 13, 8, 2, 16, 24, 11, 5, 1]
num = find_peak(arr)
print(num)
def find_peak(arr):
return find_peaks(arr, 0, len(arr))
def find_peaks(arr, start, stop):
mid = (start + stop)/2
if(arr[mid] > arr[mid-1] and arr[mid] > arr[mid+1]):
return arr[mid]
elif (arr[mid] < arr[mid -1]):
find_peaks(arr, 0, mid-1)
elif (arr[mid] < arr[mid+1]):
find_peaks(arr, mid+1, stop)
if __name__ == '__main__':
main()
答案 3 :(得分:0)
Python中不允许重载,我的建议是使用默认值而不是两个函数
$.ajax({
type: "POST",
url: URL_one,
data: submitData
}).then(function (response) {
console.log("Ajax response", response);
});