[英]Performing Binary Search in List - Python
我正在為我的計算機課分配作業,並且在遇到問題時遇到了一些麻煩。 問題1和2有點重疊,因此我將同時發布它們和到目前為止的代碼。
問題1:編寫一個名為readCountries的函數,該函數讀取文件並返回國家/地區列表。 應該從此文件中讀取國家/地區,該文件包含不完整的國家/地區列表及其區域和人口。 此文件中的每一行均以以下格式表示一個國家/地區:
名稱,面積(平方千米),人口
打開文件時,您的函數應處理可能發生的任何異常。 您的函數應完全讀入文件,並將數據分成二維列表。 您可能需要根據需要拆分和剝離數據。 數字應轉換為正確的類型。 您的函數應返回此列表,以便您可以在其余問題中使用它。
這是我這部分的代碼:
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
?
好吧,一個明顯的問題是這一行:
readCountries()
應該是這樣的:
countryList = readCountries()
通過讓readCountries
函數返回列表,您可以readCountries
一半,但實際上您從未為返回的內容分配任何內容,因此它變得readCountries
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.