2014-02-07 28 views
1

我正在爲我的計算機類工作,並且遇到了一些問題。問題1和問題2重疊,所以我會發布兩者,以及迄今爲止的代碼。在列表中執行二進制搜索 - Python

問題1:編寫一個名爲readCountries的函數來讀取一個文件並返回一個國家列表。應該從這個文件中讀取這些國家的文件,其中包含一個國家的面積和人口不完整的清單。在這個文件中的每一行代表在以下格式中的一個國家:

名稱,面積(平方公里),人口

當打開你的函數應該處理可能發生的任何異常的文件。您的函數應該在文件中完整讀取,並將數據分成2維列表。您可能需要根據需要拆分和刪除數據。數字應該轉換爲正確的類型。你的函數應該返回這個列表,以便你可以在剩下的問題中使用它。

這是我對於這部分代碼:

def readCountries(): 
     countryList = [] 
     for line in open('Countries.py', 'r'): 
      with open('Countries.py', 'r') as countriesFile: 
       countries = countriesFile.read() 
       countryList.append(line.strip().split()) 
     return countryList 

問題2:寫一個名爲getCountry函數,它代表一個國家的名字作爲參數字符串。首先從問題1呼叫您的答案以獲取國家/地區列表,然後在列表中進行二分查找,並在發現國家/地區信息時打印。

這是我對於這部分代碼:

countryList = readCountries() 

    def getCountry(countryList, name): 
     lo, hi = 0, len(countryList) - 1 
     while lo <= hi: 
      mid = lo + (hi - lo) // 2 
      country = countryList[mid] 
      test_name = country[0] 
      if name > test_name: 
       lo = mid + 1 
      elif name < test_name: 
       hi = mid - 1 
      else: 
       return country 
     return countries[lo] if countries[lo][0] == name else None 

輸出是這樣的:['Canada', '9976140.0', '35295770']這部分是我所需要的,但我將如何得到它看起來像這樣:Canada, Area: 9976140.0, Population: 35295770

+0

謝謝!我不再收到錯誤消息,但是當我使用「加拿大」作爲參數時,即使加拿大在列表中,它也會返回錯誤。如果它在列表中,爲什麼會發生這種情況? – MarissaLeigh

+0

您的'readCountries'功能不正確。嘗試顯示'countryList'。它保留逗號,並且數字是字符串,與您的指示衝突。 – ooga

+0

我不明白你的意思是試圖顯示'countryList'。它是否應該保留逗號,因爲它是一個列表? – MarissaLeigh

回答

1

嗯,一個明顯的問題是這一行:

readCountries() 

應該是這樣的:

countryList = readCountries() 

您可以通過具有readCountries函數返回列表中一半有辦法有,但你從來沒有真正給它返回的東西分配任何東西,所以它只是無處可去。