2014-03-04 40 views
0

基本上這裏是應該返回中位數和時間的代碼,但它顯示了第32,30和6行的錯誤,「全局名稱'insertionSort'沒有被定義,我知道這是沒有定義,但我不知道如何實現它,使它與此代碼?位數和時間python

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

您需要定義與接受一個列表參數,並進行了[插入排序]合適名稱的函數(HTTP: //en.wikipedia.org/wiki/Insertion_sort)。 – jonrsharpe

+0

@jonrsharpe他希望我們實現算法:) – thefourtheye

+0

誰說我想讓你實現算法? @thefourtheye我只是要求幫助 - 是指導如何做到這一點? – user3369517

回答

0

目前,insertion_sort沒有任何意義的計劃。它尚未確定。

如果你知道插入排序的工作方式,基本上你從一個空的列表開始,並在其中放置數字,你從一端開始,比較你插入的數字和已經存在的數字該列表直到數字在列表中的兩個數字之間。然後將其插入並重復該過程。

希望這足以指導您如何實施它。

1

的一些問題:

def distSum(lst,n): 
    sum==0 
    for current in lst: 
     sum=sum+abs(current-bestLoc) 
    return sum 
  1. sum是內置函數;不要將它用作變量名稱(這會造成混淆,並阻止您調用該函數)。

  2. 您的意思是sum = 0(設置爲0),而不是sum==0(總和等於0?)。

  3. 什麼是bestLoc?你永遠不會定義它。什麼是n?你從不使用它。這個功能應該完成什麼?目前還不清楚,你沒有記錄或評論它...

  4. ...但這是無關緊要的,因爲你從來沒有使用函數要麼!

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() 
  1. 您設置一個全局變量,start_time,從不使用它;

  2. 創建同名函數局部變量(這是適度混亂),

  3. 你只檢查過了多長時間對列表進行排序,如果有奇數個項目。

return (lst[(len(lst)//2)-1]+lst[(len(lst)//2)//2])/2 
  1. ......我簡直無以言表。你是如何製作這個的?

  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") 
  1. 你重用fileName變量;這不是非法的,但令人困惑,特別是對於大多數程序來說,它是一個文件對象,而不是文件名。

至於你的原始問題:它看起來像insertionSort期望的項目列表和排序列表就地。簡單的執行是

insertion_sort = lambda lst: lst.sort() 

但是這可能欺騙;-)