質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

699閲覧

フィボナッチの計算方法について

taketake77

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/08/10 10:02

編集2020/08/10 12:19

フィボナッチ数列を以下のように標準する出力するプログラムを作成しています。
実行コマンド例と標準出力結果:
$ python fib.py 5
0 + 1 = 1
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8

$ python fib.py (任意の数字1)
繰り返し上限の数値です。(1~10の内の任意の数字)

def fb(count): a, b = 1, 0 for _ in range(count): a, b = a + b, a print(a-1, "+", b, "=", a) num = input() if num < str(24): count = int(num) fb(count)

上記のような記載したのですが、想定通りの結果となりませんでした。
例えば繰り返しの数値として3や4などの数値を入力すると結果が出力されず
1や10を入力すると結果が表示されます。
上記コードの記載に問題がありますでしょうか。

また計算結果はあっているものの式が誤った状態で出力されます。
計算式も併せて正常に出力されるようにするには、どのように記載したらよいでしょうか?
0 + 1 = 1
1 + 1 = 2
2 + 2 = 3
4 + 3 = 5
7 + 5 = 8
12 + 8 = 13
20 + 13 = 21
33 + 21 = 34
54 + 34 = 55
88 + 55 = 89

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2020/08/10 10:21

このままでは、コードが読みにくいので、質問を修正して、コードは<code>(コードの挿入)で出てくるテンプレートに入れてください。
taketake77

2020/08/10 12:20

失礼しました。 インデントをいれました。
guest

回答3

0

繰り返し上限の数値です。(1~10の内の任意の数字)

これはどういう意味ですか?

実行コマンド例と標準出力結果:

$ python fib.py 5

とあるんだから、呼び出しは、fb(int(sys.argv[1])) なのではありませんか?
もちろん先頭に import sys が必要です。

投稿2020/08/10 11:36

編集2020/08/10 11:52
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taketake77

2020/08/10 12:46

ありがとうございます。 VSCODEとpaizaIOの両方で動作確認をしていましたので、ご教授いただいた方法で VSCodeからも実行できました。
kazuma-s

2020/08/10 12:50

コード中の 24 と「1~10の内の任意の数字」とは関係があるんですか?
taketake77

2020/08/12 12:16

失礼しました。 最初は上限24以下で作成していたのを、そのまま記載していました。
guest

0

ベストアンサー

「3や4などの数値を入力すると結果が出力されず」については、以下の部分で「数値」で比較していないからでしょう。、

python

1num = input() 2if num < str(24):

こんな感じになおせばいいのではないでしょうか? (以降の処理も変更必要です)

python

1num = int(input()) 2if num < 24:

「計算結果はあっているものの式が誤った状態で出力されます。」については、出力するときに、「計算の後に出力」していて、計算前の値がなくなっているからです。 「a-1」としても、「以前のaの値」にはなりません。

python

1a, b = a + b, a 2print(a-1, "+", b, "=", a)

たとえば、こんな感じでどうでしょうか。(python3でないと動きません)

python

1print(a, "+", b, "=", end="") 2a, b = a + b, a 3print(a)

printの引数にend="" を付けると、改行を抑制できます。

投稿2020/08/10 10:31

TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taketake77

2020/08/10 12:47

ありがとうございました。 ご教示いただいた記載で、想定通り動作しました。 end=""で改行を抑制すればよかったのですね。さんこうになりました。
guest

0

Python

1def fb(count): 2 a, b = 1, 0 3 for _ in range(count): 4 a, b = a + b, a 5 print(a-1, "+", b, "=", a) 6 7num = input() 8#if num < str(24): 9count = int(num) 10fb(count)

if num < str(24):
はなんのためにあるのでしょうか。これが悪さをしていると思います。外すと動きます。
文字列を < でしないほうがいいですね

投稿2020/08/10 10:38

aokikenichi

総合スコア2218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問