表显示代码显示错误的列

2024-06-16 13:32:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个程序,显示哪些国家在人类发展方面被划分为“非常高”、“高”、“中”或“低”。国家分类如下:

  1. “非常高”,0.75<;人类发展指数得分
  2. “高”…..,0.51<;HDI<;0.75英寸
  3. “中等”…,0.26<;HDI<;0.5英寸
  4. “低”……HDI<;0.26毫米

结果应该如下所示:

Country  HDI score
Japan 0.903
Finland 0.895
Qatar 0.856
Lebanon 0.763
Armenia 0.743
Iraq 0.649
Pakistan 0.550
Djibouti 0.473
Cameroon 0.518

我写了这样的代码:

Country=   ["Japan","Finland","Qatar","Lebanon","Armenia","Iraq","Pakistan",
            "Djibouti","Cameroon"]
Country[0]=0.903
Country[1]=0.895
Country[2]=0.856
Country[3]=0.763
Country[4]=0.743
Country[5]=0.649
Country[6]=0.550
Country[7]=0.473
Country[8]=0.518
for Country in Country:
    if Country>0.76:
        print [Country, "Very High"]
    elif 0.76>Country>0.51:
        print [Country,"High"]
    elif 0.51>Country>0.26:
        print [Country,"Medium"]
    elif Country < 0.26:
        print [Country,"Low"]

但该代码的问题在于,它显示的是人类发展指数和排名,而不是国家名称和排名,如下所示:

[0.903, 'Very High']
[0.895, 'Very High']
[0.856, 'Very High']
[0.763, 'Very High']
[0.743, 'High']
[0.649, 'High']
[0.55, 'High']
[0.473, 'Medium']
[0.518, 'High']

我不明白我在这里错过了什么,为什么它打印人类发展指数,而不是国家的名称相当于它,虽然我介绍了国家的名称作为第一件事


Tags: lt名称人类国家指数countryveryprint
3条回答

这里好像出了点问题

您正在使用for Country in Country。。陈述……(我很困惑)。无论如何,请使用国家/地区作为列表名:

Countries = ["Japan","Finland","Qatar","Lebanon","Armenia","Iraq","Pakistan",
             "Djibouti","Cameroon"]

Countries[0]=0.903  # overriding in Countries the 'Japan' Country name with the value '0.903'
... snippet...

for Country in Countries:
    ...snippet...

你的清单和口述也几乎是混合的。让我们坚持列表+元组

尝试:

Countries = [('Japan', 0.903), (country, value), etc...]

然后你会得到:

for country in Countries:
    my_country_name  = country[0]
    my_country_value = country[1]

    if my_country_value >0.76:
        print [my_country_name, "Very High"]
    elif ... :
        print ...
    etc..
    ..snippet...

好好享受

您正在使用list来定义国家及其HDI,但在输入HDI值时,您正在修改列表,而不是将值附加到每个国家

让我们快速了解一下您的几个早期步骤:

Country = ["Japan",
           "Finland", 
           "Qatar",
           "Lebanon",
           "Armenia",
           "Iraq",
           "Pakistan",
           "Djibouti",
           "Cameroon"]

如果我定义了它,然后在Python shell中打印出来:

> print Country
['Japan', 'Finland', 'Qatar', 'Lebanon', 'Armenia', 'Iraq', 'Pakistan', 'Djibouti', 'Cameroon']

一切看起来都很好

但是如果我运行你的下一行代码:

> Country[0]=0.903 

我们再把它打印出来:

> print Country
[0.903, 'Finland', 'Qatar', 'Lebanon', 'Armenia', 'Iraq', 'Pakistan', 'Djibouti', 'Cameroon']

我们刚刚用0.903替换了Japan,因为您在执行Country[0]时替换了Country列表中的原始值

因此,你真正想要的是把每个国家与各自的人类发展指数联系起来。一种方法是使用dictionary,它将一个某物与另一个某物相关联

使用字典的基本语法是:

countries = { 'Japan': 0.903,
              'Finland': 0.895,
              # etc
            }

然后可以按键对其进行迭代,并使用值。下面是适合于使用字典的代码,它使用字典的键和值对字典进行迭代

countries = {
    'Japan': 0.903,
    'Finland': 0.895,
    'Qatar': 0.856,
    'Lebanon': 0.763,
    'Armenia': 0.743,
    'Iraq': 0.649,
    'Pakistan': 0.550,
    'Djibouti': 0.473,
    'Cameroon': 0.518
}

for country, hdi in countries.iteritems():
    if hdi > 0.76:
        print [country, "Very High"]
    elif 0.76 > hdi > 0.51:
        print [country,"High"]
    elif 0.51 > hdi > 0.26:
        print [country,"Medium"]
    elif hdi < 0.26:
        print [country,"Low"]

输出如下所示:

['Pakistan', 'High']
['Qatar', 'Very High']
['Iraq', 'High']
['Armenia', 'High']
['Japan', 'Very High']
['Finland', 'Very High']
['Lebanon', 'Very High']
['Djibouti', 'Medium']
['Cameroon', 'High']

你会注意到订单与原来的清单不一样。普通词典不保持插入顺序

注意我做的一些风格上的事情:

  • 我使用小写的变量名
  • 我不使用同一个变量来引用不同的东西,就像您对Country所做的那样
  • 数学比较中的间距

或者

country = [
    ("japan", 0.903),
    ("Finland", 0.895),
    ("Qatar", 0.856),
    ("Lebanon", 0.763),
    ("Armenia", 0.743),
    ("Iraq", 0.649),
    ("Pakistan", 0.550),
    ("Djibouti", 0.473),
    ("Cameroon", 0.518)
]

v1 = ''
for c, v in country:
    if v < 0.26:
        v1 = "very low"
    elif v > 0.26 and v < 0.51:
        v1 = "low"
    elif v > 0.51 and v < 0.76:
        v1 = "High"
    else:
        v1 = "Very High"
    print("{:10} {:6} {:10}".format(c, v, v1))

output

japan       0.903 Very High 
Finland     0.895 Very High 
Qatar       0.856 Very High 
Lebanon     0.763 Very High 
Armenia     0.743 High      
Iraq        0.649 High      
Pakistan     0.55 High      
Djibouti    0.473 low       
Cameroon    0.518 High

相关问题 更多 >