9819

[code]

    my_property = 1000
    farm= []
    
    def monster_merchant1():
        global my_property
        global farm
        cat = 100
        rat = 50
        lizard = 200
        dog = 300
        feeble_doragon = 1000
    
    
        print("商人が来ました")
        print("なにか御入り用ですか？")
        print("1.ネズミ：{0}.2.ネコ:{1}.3.トカゲ:{2}.4.番犬:{3}.5.弱弱しいドラゴン:{4}".format(rat,cat,lizard,dog,feeble_doragon))
        print("数字を入力してください:")
    
        number =input()
        if number ==1:
           my_property = my_property - rat
           farm.append("ネズミ")
        elif number ==2:
            my_property = my_property -cat
            farm.append("ネコ")
        elif number ==3:
            my_property = my_property - lizard
            farm.append("トカゲ")
        elif number ==4:
            my_property = my_property - dog
            farm.append("番犬")
        elif number ==5:
            my_property = my_property -feeble_doragon
            farm.append("弱弱しいドラゴン")
    
        print("あなたの農場:"),
        print(farm)
        print("貴方の資産："),
        print(my_property)
    
    
    monster_merchant1()
    
[/code]

このコードを描いたとき、最後のprint文で表示する二つの変数（farm,my_property）に関数内での操作の結果を反映させたいのですが、実際にはリストfarmには何も入っておらず、my_propertyは初期値の1000のままです.

どうすれば関数内での操作を反映できるでしょうか。初心者なので要領を得ない質問かもしれませんが、よろしくお願いします。


CC BY-SA 3.0
2015-05-04T08:17:27.813
9816
2015-05-07T11:38:57.890
2015-05-04T08:47:52.413
5044
9597
question
python
pythonのグローバル変数を関数内で操作して保持する方法を教えてください


`input()`の返す型が文字列なので(python
3.xの場合)、if文であてはまるものがなくて、変数が変更されず初期の値がそのまま出ているんだと思います。入力を数値に変換する処理をどこかに入れると良いでしょう。

例:

[code]

    number = int(input())
    
[/code]

余談: python
2.xでは元のコードでも期待通りに動作するでしょう。2.xの`input()`は`eval(raw_input(prompt))`と同等なので、文字列がevalされて数値になるからです。


CC BY-SA 3.0
2015-05-04T11:23:09.340
9819
2015-05-07T11:38:57.890
2015-05-07T11:38:57.890
9575
9575
9816
answer