返回元组列表时,字符串索引超出范围

时间:2018-11-29 07:26:51

标签: python

让我为标题感到抱歉,mod可以随意将其编辑为您认为更合适的名称。我很难找到一个更合适的标题。

我正在练习。我要实现两个类,分别是Country和CountryDirectory。练习涉及通过添加/删除国家/地区,更新任意国家/地区的人口和面积等方法来操纵此国家/地区的目录。

我们得到了一个驱动程序来测试我们的方法。特别是有一种方法“ populationDensityFilter”给我带来了问题。此方法用于确定哪些国家落入选定的间隔内。更具体地说,它采用min和max作为人口密度范围的参数。它应返回密度在该范围内的国家/地区列表。它应该返回一个配对列表,其中每个配对都是一个国家名称和人口密度。该列表应按从高到低的顺序降序排列 最低的。如果没有落在该范围内,则应返回一个空列表。

我的代码可以正确返回属于给定范围的国家/地区,但是,当与给定的测试方法配对时,它将返回错误。我相信这是因为测试方法期望包含一个元组,该国家的索引为0,该国家的索引为1。谢谢您的帮助。

有两个读取的文本文件:

continent.txt

China,Asia
United States of America,North America
Brazil,South America
Japan,Asia
Canada,North America
Indonesia,Asia
Nigeria,Africa
Mexico,North America
Egypt,Africa
France,Europe
Italy,Europe
South Africa,Africa
South Korea,Asia
Colombia,South America

data.txt

Country|Population|Area
China|1,339,190,000|9,596,960.00
United States of America|309,975,000|9,629,091.00
Brazil|193,364,000|8,511,965.00
Japan|127,380,000|377,835.00
Canada|34,207,000|9,976,140.00
Indonesia|260,581,100|1,809,590.97
Nigeria|186,987,563|912,134.45
Mexico|128,632,004|1,969,230.76
Egypt|93,383,574|1,000,000.00
France|64,668,129|541,656.76
Italy|59,801,004|300,000.00
South Africa|54,978,907|1,222,222.22
South Korea|50,503,933|98,076.92
Colombia|48,654,392|1,090,909.09

这是我的代码:

# My code
    def populationDensityFilter(self, min, max):
        for element in self._catalogue:
            if self._catalogue[element].getPopulationDensity() >= min and self._catalogue[element].getPopulationDensity() <= max:
                print(element) # should be return

# Given test method that my code has to work in conjunction with.
def testDensityFilter(countryDirectory):
    print()
    low = input(" Enter lower bound for population density: ")
    low = float(low.strip())
    up = input(" Enter  upper bound for population density: ")
    up = float(up.strip())
    abc = countryDirectory.populationDensityFilter(low,up)
    if len(abc) == 0:
        print("  Nothing in that range found.")
    else:
        print("  Countries with density in this range:")
        for x in abc:
            print(x[0] + ", " + "density = "+ str(x[1]))

def main():
    cd = countryDirectory('data.txt','continent.txt')
    testDensityFilter(cd)
main()

1 个答案:

答案 0 :(得分:0)

更改populationDensityFilter

results = []
for element in self._catalogue:
    pop = self._catalogue[element].getPopulationDensity()
    if pop >= min and pop <= max:
        results.append((element, pop))
return results

正如您所提到的,

  

我相信这是因为测试方法期望包含的元组,   索引0中的国家和索引1中的密度。

因此,您应该汇编(country, density)的列表以返回。