寻找最小和最大人口

问题描述 投票:0回答:1

这是我的代码。当我尝试获取要返回的人口最少和人口最多的国家/地区时,它会从 csv 文件中为人口最多和人口最少的国家/地区打印第一个国家/地区。

import csv
import math

def main(file_name, region):

    data = []
    
    with open(file_name, 'r') as file:
        reader = csv.DictReader(file)   #Reads the CSV file and returns a list of dictionaries containing the data
        for row in reader:
            data.append(row)
            
        countries = []
    
    
        for row in data:
            if row['Regions'] == region and float(row['Net Change']) > 0:   #Returns a list of countries in a specific region with positive net change in population
                countries.append(row['Name'])
        #return countries
    
    
                min_population = math.inf
                max_population = -math.inf
                
                min_country = None
                max_country = None
                
    
                if row['Name'] in countries:    #Returns the country with minimum and maximum population in the given list of countries
                    population = int(row['Population(2020)'])
                    if population < min_population:
                        min_population = population
                        min_country = row['Name']
                    if population > max_population:
                        max_population = population
                        max_country = row['Name']
                return min_country, max_country

我期待它提供两个不同的国家,即人口最多和最少的国家

python-3.x max min
1个回答
0
投票

我们可以考虑很多事情来让它发挥作用。你有一个好的解决方案的框架,我认为我们只需要稍微调整一下。

我要改变的两件事是:

  1. 让我们一步读取和过滤数据
  2. 将最小/最大变量的初始化移出我们的循环
import csv
import math

def main(file_name, region):
    min_population = math.inf
    max_population = -math.inf
    min_country = None
    max_country = None

    with open(file_name, 'r') as file:
        countries = [
            row
            for row
            in csv.DictReader(file)
            if row['Regions'] == region and float(row['Net Change']) > 0
        ]

    for row in countries:
        population = int(row['Population(2020)'])

        if population < min_population:
            min_population = population
            min_country = row['Name']

        if population > max_population:
            max_population = population
            max_country = row['Name']

    return min_country, max_country
© www.soinside.com 2019 - 2024. All rights reserved.