2017-12-14 9 views
1

私は人間開発の「非常に高い」「高い」「中」「低い」と分類される国を表示するプログラムを作成しました。次のように国に分類されます。テーブルの表示コードに間違った列が表示されています

  1. "非常に高い"、0.75 < HDIは
  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"] 

をしかし、そのコードの問題は、以下のように、それはHDIのランクではなく、国の名前とランクを表示する、ということである:

[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'] 

私はここで紛失しているのですが、その国の名前を最初のものとして紹介しましたが、なぜそれがそれに相当する国の名前ではなくHDIを印刷していますか?

+3

'Country'は、あなたが最初に国の名前を入れたリストですが、その後、あなたはHDIと、リスト内の各項目を上書きします。 – birryree

+0

特異なフラット配列ではなく、ネスト構造を定義する必要があります。 – tadman

+0

あなたは国をリストとして定義しました: 'Country = [" Japan "、" Finland "...]'辞書が欲しいと思ったら、国:{"Japan":0.903、 "Finland":0.895、。 ..} ' – alfasin

答えて

1

は...いくつかの物事が間違ってここに行くことがあるようです

あなた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... 

あなたもほとんど混合リストとdicts:とにかくリスト名用を使用しています。リスト+タプルに固執する。

試してみてください。

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... 

をお楽しみください!

1

国とそのHDIを定義するのにlistを使用していますが、各国に値を付けるのではなく、HDI値を入力するときにリストを変更しています。

のは、あなたの初期段階のいくつかで何が起こっているかを簡単に見てみましょう:

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

私はそれを定義して、Pythonシェルでそれをプリントアウトした場合:

> 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.903Japanを置き換えますあなたがCountry[0]をしたときにCountryのリスト。

あなたが本当に望むのは、各国をそれぞれのHDI値に関連付けるものです。これを行う1つの方法は、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
  • のために行ったように私は別のものを参照するために同じ変数を使用していない
  • 変数の小文字の名前を使用します数学的な比較
0

か...

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)) 
でより多くの間隔

出力

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 
関連する問題