基本上这里是应该返回中位数和时间的代码,但它在第32,30和6行显示错误,“全局名称'insertSort'未定义,我知道它不是已定义但我不知道如何实现它以便它可以使用此代码?
import time
start_time = 0 #starts the time from 0 seconds
def median(lst):
start_time = time.time()
insertionSort(lst)
if len(lst)%2==1:
end_time = time.time()
print("Time: " , end_time - start_time) #prints the time of the process
return lst[len(lst)//2]
else:
return (lst[(len(lst)//2)-1]+lst[(len(lst)//2)//2])/2
def distSum(lst,n):
sum==0
for current in lst:
sum=sum+abs(current-bestLoc)
return sum
def main():
fileName = input('Enter a filename: ')
fileName = open(fileName, "r")
lst = []
for inputLine in fileName:
splittext = inputLine.split()
place = splittext[0]
locations = splittext[1]
lst += [locations]
print(lst)
print(median(lst))
main()
答案 0 :(得分:1)
一些问题:
def distSum(lst,n):
sum==0
for current in lst:
sum=sum+abs(current-bestLoc)
return sum
sum
是内置函数;不要将它用作变量名称(这会令人困惑,并阻止您调用该函数)。
您的意思是sum = 0
(将总和设为0),而不是sum==0
(总和等于0?)。
什么是bestLoc
?你永远不会定义它。什么是n
?你从不使用它。这个功能应该完成什么?目前尚不清楚,您还没有记录或评论过它......
...但这无关紧要,因为你永远不会使用这个功能!
start_time = 0 #starts the time from 0 seconds
def median(lst):
start_time = time.time()
insertionSort(lst)
if len(lst)%2==1:
end_time = time.time()
您设置了一个全局变量start_time
,并且从不使用它;
您可以使用相同的名称创建一个函数局部变量(这有点令人困惑),
如果列表中包含奇数项目,您只需检查对列表进行排序所需的时间。
return (lst[(len(lst)//2)-1]+lst[(len(lst)//2)//2])/2
......我根本就没有言语。你是怎么编造这个的?
如果您正在寻找中值,您可能需要
lst_len = len(lst)
halflen = lst_len // 2
if lst_len % 2:
return lst[halflen]
else:
return (lst[halflen-1] + lst[halflen]) / 2
def main():
fileName = input('Enter a filename: ')
fileName = open(fileName, "r")
fileName
变量;这不是非法的,但令人困惑,特别是对于大多数程序而言,它是文件对象,而不是文件名。至于您的原始问题:看起来insertionSort
需要一个项目列表并对列表进行排序。一个简单的实现是
insertion_sort = lambda lst: lst.sort()
但这可能是作弊; - )
答案 1 :(得分:0)
目前,insertion_sort
对程序没有任何意义。它尚未定义。
如果你知道插入排序是如何工作的,基本上你从一个空列表开始并在其中放置数字。从一端开始,将插入的数字与列表中已有的数字进行比较,直到数字在列表中已有的两个数字之间。然后将其插入并重复该过程。
希望这足以指导您如何实施它。