Python计算特定地区国家平均人口函数无输出问题求助
Python计算特定地区国家平均人口函数无输出问题求助
嘿,我看了你的代码和问题描述,发现几个关键问题导致你拿不到平均人口的输出,咱们一步步拆解并修正:
核心问题1:函数提前终止,后续代码无法执行
你的代码在第一个for循环处理完最小/最大人口国家后,直接执行了return min_country, max_country——return语句会立即终止函数,这就导致后面计算平均人口的代码完全没有机会运行,自然不会输出平均人口结果。
核心问题2:平均人口计算的判断逻辑错误
在计算平均人口的循环里,你写了if row['Name'] == region,但region是地区名称,而row['Name']是国家名称,这两个永远不会相等,所以total_pop和num_countries一直是0,就算前面的return问题解决了,这里也得不到正确的平均值。
额外可选优化:筛选条件的必要性
你在筛选countries时加了float(row['Net Change']) > 0的条件,如果你不是只想统计净人口增长为正的国家,这个条件会过滤掉一部分国家,可能不符合你“计算该地区所有国家平均人口”的需求,可以考虑移除或者注释说明。
修正后的代码
我把这些问题都修复了,同时调整了逻辑,让函数可以同时返回最小人口国家、最大人口国家和平均人口(你也可以按需调整返回内容):
import csv import math def main(file_name, region): min_population = math.inf max_population = -math.inf min_country = None max_country = None total_pop = 0 num_countries = 0 with open(file_name, 'r') as file: # 这里可选是否保留Net Change>0的筛选,根据你的实际需求调整 countries = [row for row in csv.DictReader(file) if row['Regions'] == region] # 如果需要只统计净增长为正的国家,用下面这行替换上面的: # 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'] # 累加总人口和国家数量 total_pop += population num_countries += 1 # 计算平均人口 if num_countries > 0: average_pop = total_pop / num_countries return min_country, max_country, average_pop else: # 如果该地区没有符合条件的国家,返回None或你需要的默认值 return None, None, None
使用示例
调用函数时可以这样获取结果:
min_c, max_c, avg_p = main('countries_data.csv', 'Asia') print(f"该地区最小人口国家:{min_c},最大人口国家:{max_c},平均人口:{avg_p:.2f}")
这样就能正常得到你需要的平均人口结果啦!
备注:内容来源于stack exchange,提问作者Rambes
相关产品推荐
相关产品推荐

