- ベストアンサー
python ver3について
python3を勉強している初心者です。 参考書に載っていた、階乗を計算する例題を変更したいと思っています。 このプログラムを書き換えて、input文で任意の数字nをキーボードから入力して、結果を表示させたいんですが、どうすれば良いでしょうか。 このプログラムでは思う様に動きません。 n=input() def fact(n): if n ==0: return 1 return n*fact(n-1) print(fact(n)) input() よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみません。 昨日の回答は if __name__ == "__main__" の中にミスがありました。 最初はエラー処理を入れない方がわかり易いかなと思っていたもので (^_^; 最後の if 節の中は下記に訂正させてください。 """ if __name__ == "__main__": try: n = input() print( fact( int( n ) ) ) sys.exit( 0 ) except ValueError: exit( "数字を入力してください。" ) """
その他の回答 (1)
- FmtWeisszwerg
- ベストアンサー率100% (1/1)
input() の戻り値は string 型、つまり文字列です。 数値ではないのでそのままでは計算することができないのです。 input() で受け取った入力を階乗計算に使うためには、 「これは数値として扱いなさい」という命令を書く必要があるのです。 n を数値として扱うためには int( n ) とします。 kakekomi さんのコードを基に修正すると以下のようになります。 """ から """ の中を fact.py というファイルに保存して python fact.py と実行してみてください。 """ # coding: utf-8 import sys def fact( n ): if n == 0: return 1 else: return n * fact( n - 1 ) if __name__ == "__main__": try: n = input() print( fact( int( n ) ) ) except ValueError: print( "数字を入力してください。" ) sys.exit( 0 ) """
お礼
FmtWeisszwergさま 教えていただいた内容を参考にして、自分がイメージしていたプログラムができました。 プログラムと言っても8行程度のものですが。 これからも、何かの時には、回答お願いします。 ありがとうございました。
補足
FmtWeisszwergさま 回答ありがとうございます。 IDLE(python GUI)で教えていただいたプログラムを書いて走らせたのですが、上手く行ってるんでしょうか。 任意の数字を入れて、enterで階乗が計算されて表示されるんですが、その後に Traceback (most recent call last): File "C:/python/fact.py",line 12, in <module> sys.exit(0) SystemExit: 0 と赤字で表示されます。 この赤字の英文はどう言ういみなんでしょうか。