0

そこで、国名についてクエリを実行し、それに関する面白い事実を提供するこの関数を定義しました。質問した国を辞書に追加するかどうかを尋ねるはずです (まだわかっていない場合)。コード自体は問題ないと思います。しかし、それはあなたに尋ねた後、辞書に新しい国の事実を実際に追加しません:/誰かが問題を特定できますか?

def countries():
    param = input("please enter the country you'd like a fun fact about")
    listofcountries = {"Kuwait": "has 10% of the world's oil reserves.", "UAE": "has the world's highest free-standing structrure, Burj Khalifa.", "Qatar": "is hosting the FIFA 2022 world cup.", "Saudi Arabia": "is the largest GCC country.", "Bahrain": "held the Dilmun civilization, one of the world's oldest civilizations.", "Oman": "is known for its beautiful green mountains."}
    if (param in listofcountries):
        print ("I know something about", param)
        print (param, listofcountries[param])
    else:
        print ("I don't know anything about", param)
        add_yesorno = input("Would you like to add something to the list? (yes or no)")
        if add_yesorno == 'yes':
            country_name = input("What's its name again?")
            add_yes = input("please finish this sentence. This country...")
            print ("Thanks a lot for contributing to the list!")
            listofcountries[country_name] = add_yes
        else:
            print ("Thanks then! See you later.")
4

3 に答える 3

1

listofcountriesはローカル変数なので、関数を呼び出すたびにリセットされます。呼び出し間で値を保持する場合は、グローバル (または他のより高いスコープ) にする必要があります。

listofcountries = {"Kuwait": "has 10% of the world's oil reserves.", "UAE": "has the world's highest free-standing structrure, Burj Khalifa.", "Qatar": "is hosting the FIFA 2022 world cup.", "Saudi Arabia": "is the largest GCC country.", "Bahrain": "held the Dilmun civilization, one of the world's oldest civilizations.", "Oman": "is known for its beautiful green mountains."}

def countries():
    param = input("please enter the country you'd like a fun fact about")
    if (param in listofcountries):
        print ("I know something about", param)
        print (param, listofcountries[param])
    else:
        print ("I don't know anything about", param)
        add_yesorno = input("Would you like to add something to the list? (yes or no)")
        if add_yesorno == 'yes':
            country_name = input("What's its name again?")
            add_yes = input("please finish this sentence. This country...")
            print ("Thanks a lot for contributing to the list!")
            listofcountries[country_name] = add_yes
        else:
            print ("Thanks then! See you later.")

inputのすべてのインスタンスをに変更したことにも注意してくださいraw_input。文字列を読みたいので、絶対にraw_input. 関数は実際に入力を評価し、inputそれをシンボルまたは生のリテラル値に変換します。

以下のコメントに従って、inputどうやらそれがPython 3の正しい機能であるため、元に戻しました。

于 2013-09-18T02:23:47.710 に答える
0

まあ、listofcountries関数のローカル変数ですcountries()。関数が戻ると、辞書が消えます!他のすべてのローカル変数(などparam)とともにadd_yes

モジュールグローバルとして、関数のlistofcountries 外側で定義することをお勧めします。その後listofcountries、 への呼び出し間でその値を保持しますcountries

より高度な方法は、クラスを作成し、辞書をクラスの属性として保存することです。しかし、それを除けば、モジュールをグローバルにすると、問題がすぐに解決するはずです。

于 2013-09-18T02:24:59.840 に答える