44255


keijoのアンダースコアの隣にyear2のインプットを。net_worthのアンダースコアの隣にyear1とyear2をいれたいのですがエラーがでて計算できません。  
どうすれば、うまく計算できるでしょうか？

[code]

    net_worth_1 = 308009
    net_worth_2 = 233488
    net_worth_3 = 315739
    　　　　
    keijo_pro_1 = 8000
    keijo_pro_2 = 9000
    keijo_pro_3 = 10000
    　　　　
    year1 = input("Enter first year:")
    year2 = input("Enter end year:")
    　　　　　
    roa = keijo_year2 / ((net_worth_year1 +  net_worth_year2) / 2)
    
[/code]


CC BY-SA 4.0
2018-05-25T05:05:15.273
44249
2018-05-25T08:25:48.110
2018-05-25T05:56:51.270
3060
27722
question
python
python inputを変数に入力する方法


やりたいことは使用する変数を数値入力して選択することでしょうか。

`input`で取得した文字列をそのまま変数名に書き換えることはできませんので、`eval`や`exec`を使って動的に変数名を生成する必要があります。

[code]

    net_worth_1 = 308009
    net_worth_2 = 233488
    net_worth_3 = 315739
    
    keijo_pro_1 = 8000
    keijo_pro_2 = 9000
    keijo_pro_3 = 10000
    
    year1 = input("Enter first year:") #例えば「1」を入力
    year2 = input("Enter end year:")   #例えば「2」を入力
    
    cmd = 'keijo_pro_{1} / ((net_worth_{0} +  net_worth_{1}) / 2)'.format(year1, year2)
    # 上記の例の通り入力した場合、cmdは "keijo_pro_2 / ((net_worth_1 +  net_worth_2) / 2)" となる
    roa = eval(cmd) #evalで動的に式を実行して計算後の値を取得する
    print(roa) #0.033241181391586654
    
[/code]

動的に式を変換して実行するよりも、リストを使う方が可読性が高く、後で機能変更することも容易になりますので、下記のように書き換えることをお勧めします。

[code]

    net_worth = {} #1から始まるので辞書{}を使っていますが、0から始めるなら配列[]でも良いです
    net_worth['1'] = 308009
    net_worth['2'] = 233488
    net_worth['3'] = 315739
    keijo_pro = {'1':8000, '2':9000, '3':10000}
    
    year1 = input("Enter first year:") #例えば「1」を入力
    year2 = input("Enter end year:")   #例えば「2」を入力
    
    roa = keijo_pro[year2] / ((net_worth[year1] +  net_worth[year2]) / 2)
    print(roa) #0.033241181391586654
    
[/code]


CC BY-SA 4.0
2018-05-25T08:25:48.110
44255
2018-05-25T08:25:48.110
9820
44249
answer