我正在爲我的計算機類工作,並且遇到了一些問題。問題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
?
謝謝!我不再收到錯誤消息,但是當我使用「加拿大」作爲參數時,即使加拿大在列表中,它也會返回錯誤。如果它在列表中,爲什麼會發生這種情況? – MarissaLeigh
您的'readCountries'功能不正確。嘗試顯示'countryList'。它保留逗號,並且數字是字符串,與您的指示衝突。 – ooga
我不明白你的意思是試圖顯示'countryList'。它是否應該保留逗號,因爲它是一個列表? – MarissaLeigh