簡體   English   中英

在列表中執行二進制搜索-Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM