2017-12-01 4 views
2

私はpython 3.6を使用しています。ユーザーが入力した値にキーを印刷する必要があります。ユーザーが6文字の郵便番号を入力すると、その郵便番号が存在する地域が印刷されるように、郵便番号に関連付けられた州および最初の文字の長いリストが表示されます。 *私はif文を使用することは許されないのです、ループまたはリスト* これは私がこれまで持っているものです。ユーザーがPythonで入力した値にキーを印刷するには

それは私に印刷(データ[キー])とのエラーメッセージを表示しますしかし
data = {} 

    # Initialize dictionary so that it maps from Province to correlated first letter   
    data = {"Alberta": "T", 
      "British Columbia":"V", 
      "Manitoba":"R", 
      "New Brunswick": "E", 
      "Newfoundland":"A", 
      "Nova Scotia": "B", 
      "Nunavut": "X", 
      "Northwest Territories": "X", 
      "Ontario": ["K,L,M,N,P"], 
      "Prince Edward Island": "C", 
      "Quebec":"[G,H,J]", 
      "Saskatchewan":"S", 
      "Yukon":"Y"} 


    # Read a postal code from the user 

    key = input("Enter a 6 character postal code (A1A1A1): ") 

    #computer letters to uppercase 
    key = key.upper() 
    print("That postal code resides in", (data[key])) 

ステートメント。私は、私の州が1つの値と関連づけられているので、6つの値を入力して省を印刷できるように方法を見つけ出すのにも苦労しています。私はちょうど辞書を学びました。私はこれを解決するのに苦労しています。どんな助けも素晴らしいだろう!本当にありがとう。

+0

T彼はどのキーが見つからないのかを示すエラーメッセージが表示されます( "KeyError:"の直後)。探しているキーと辞書のキー(地方の名前 - ':'の左*のもの)を比較してください。何か気づく? – Ryan

+0

あなたの辞書は、指定されたタスクの後方にあります。あなたはそれを変更することが許されていますか? –

+0

辞書は ""と宣言されています: ""の順番で辞書を "T"に切り替える方が良いでしょう: "Alberta"そしてif文とループなしであなたの仕事をすることができます – yvs

答えて

1

辞書を<key>:<value>順序で宣言され、あなたはより良いあなたが "T" 辞書を切り替えたいので:「アルバータ州をif文とループなしでタスクを実行できます。
data = {"T": "Alberta", "V":"British Columbia", "R":"Manitoba", "E":"New Brunswick", "A":"Newfoundland", "B":"Newfoundland", "X":["Nunavut","Northwest Territories"], "K":"Ontario", "L":"Ontario", "M":"Ontario", "N":"Ontario", "P":"Ontario", "N":"Ontario", "G":"Quebec", "H":"Quebec", "J":"Quebec", "S":"Saskatchewan", "Y":"Yukon"}

+0

ユーザーがエラーメッセージを受け取らずに6文字/数字を入力できるように変更する方法はありますか?プログラムは彼らに6を入力するように求めますが、私は州を出力するために最初の手紙を取る必要があります。 –

+1

@SarD一度入力すると、常に最初の文字を取り込むことができます。入力があれば、 'key = key [1]'のようなものです。あなたの鍵がこの答えに示唆されたように定義されていれば – NSP

1

あなたはfilter使用することができます。

key = input("Enter a 6 character postal code (A1A1A1): ") 
data = {"Alberta": "T", 
     "British Columbia":"V", 
     "Manitoba":"R", 
     "New Brunswick": "E", 
     "Newfoundland":"A", 
     "Nova Scotia": "B", 
     "Nunavut": "X", 
     "Northwest Territories": "X", 
     "Ontario": ["K,L,M,N,P"], 
     "Prince Edward Island": "C", 
     "Quebec":"[G,H,J]", 
     "Saskatchewan":"S", 
     "Yukon":"Y"} 
options = list(filter(lambda x:x[-1].startswith(key.upper()) if not isinstance(x[-1], list) else x[-1][0] == key , data.items())) 
options = "Code not found" if not options else list(options)[0][0] 

出力用key = 'A'とき:

'Newfoundland' 
+0

これは意味があります.... opはちょうど学んだ辞書! –

関連する問題