80791
**やりたいこと**  
input()で関数名を入力し、指定した関数を実行したいと考えています。

```

    print('実行する関数を選んでください')
    input()
    def main():
        print('a')
        
    def main2():
        print('b')
    
```

main()を入力して a を出力したいと考えています。

**実行結果**

```

    実行する関数を選んでください
     main()
    
```

そのほかにもif で分岐したりなど工夫してみましたがうまくいきません。

もしわかる方は教えていただけると幸いです。
CC BY-SA 4.0
2021-08-14T07:21:59.463
80790
2021-08-14T07:39:55.247
47546
question
python
input()に入力した関数()を実行したい。
`input()`の戻り値は文字列なので、辞書やif文を使用して分岐するよう工夫してみてください。

```

    def main():
        print('a')
        
    def main2():
        print('b')
    
    print('実行する関数を選んでください')
    value = input()
    
    # if
    if value == "main":
        main()
    elif value == "main2":
        main2()
    
    # 辞書による高階関数
    dic = { "main": main, "main2": main2}
    if value in dic.keys():
        dic[value]()
    
    # evalで直接実行(非推奨)
    eval(f"{value}()")
    
    """
    実行する関数を選んでください
    main2
    b
    b
    b
    """
    
```

FYI: [eval関数をwebフォームなどで使うとなぜ危険なのか？](https://ja.stackoverflow.com/q/61989/9820)
CC BY-SA 4.0
2021-08-14T07:39:55.247
80791
2021-08-14T07:39:55.247
9820
80790
answer