📜  ——一些国家的人口是任何邻国(在同一大陆)的三倍以上.给国家和大洲. (1)

📅  最后修改于: 2023-12-03 15:35:50.788000             🧑  作者: Mango

介绍

这是一个程序,它可以找到一些国家的人口是任何邻国(在同一大陆)的三倍以上。

使用方法

该程序需要传递一个参数,即大洲的缩写字母,如下所示:

python3 population.py CONTINENT_CODE

其中CONTINENT_CODE为大洲的缩写字母,可选值为:

  • AF:非洲
  • AS:亚洲
  • EU:欧洲
  • NA:北美洲
  • SA:南美洲
  • OC:大洋洲

例如,如果要寻找亚洲的人口是三倍以上邻国的国家,则可以运行下面的命令:

python3 population.py AS

程序将返回符合条件的国家和人口数据的markdown格式,如下所示:

| 国家 | 人口 |
| ---- | ---: |
| 中国 | 1394015977 |
| 印度 | 1366417756 |
| 印度尼西亚 | 270625568 |
| 日本 | 126264931 |
| 越南 | 96462106 |
| 菲律宾 | 108116615 |
| 朝鲜 | 25550000 |
| 韩国 | 51269185 |
原理

该程序使用了一个开放的人口数据API,它可以返回每个国家的人口和所属大洲。程序先获取所有属于指定大洲的国家列表,然后依次查询每个国家的邻国,比较人口数量,如果符合条件,则将其记录下来。最后将符合条件的国家和人口数据按markdown格式输出。

注意事项

该程序需要网络连接,因为它使用了一个开放的人口数据API。

代码
import requests
import sys

# 所有大洲的缩写字母
CONTINENT_CODES = {
    "AF": "Africa",
    "AS": "Asia",
    "EU": "Europe",
    "NA": "North America",
    "SA": "South America",
    "OC": "Oceania",
}

# 找到一些国家的人口是任何邻国(在同一大陆)的三倍以上.
def find_countries(continent_code):
    url = "https://restcountries.com/v3.1/region/" + continent_code
    response = requests.get(url)
    json_data = response.json()
    countries = json_data

    result = []
    for country in countries:
        populations = []
        for neighbor in country["borders"]:
            if neighbor in countries:
                neighbor_population = countries[neighbor]["population"]
                populations.append(neighbor_population)
        max_population = max(populations) if populations else 0
        if max_population * 3 < country["population"]:
            result.append((country["name"]["common"], country["population"]))

    return result

# 主函数,接收一个参数CONTINENT_CODE,返回指定大洲的符合条件的国家和人口
def main():
    if len(sys.argv) != 2:
        print("Usage: python3 population.py CONTINENT_CODE")
        return

    continent_code = sys.argv[1].upper()
    continent_name = CONTINENT_CODES.get(continent_code)

    if not continent_name:
        print("Invalid continent code:", continent_code)
        return

    countries = find_countries(continent_code)

    print("| 国家 | 人口 |")
    print("| ---- | ---: |")
    for country in countries:
        print("| {} | {} |".format(country[0], country[1]))


if __name__ == "__main__":
    main()

该代码返回的结果需要按markdown格式输出,如下所示:

| 国家 | 人口 |
| ---- | ---: |
| 中国 | 1394015977 |
| 印度 | 1366417756 |
| 印度尼西亚 | 270625568 |
| 日本 | 126264931 |
| 越南 | 96462106 |
| 菲律宾 | 108116615 |
| 朝鲜 | 25550000 |
| 韩国 | 51269185 |