Misaku
@Misaku (Misaku suzuki)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

python 数字の表示

AWS の jupyterlab で pathon を勉強しておりますが
スクリーンショット 2022-02-26 9.35.04.png

画像の上のセルが私の書いた文で、inputした数のフィボナッチ数列を表示させたいのですが、実行するとなぜか

になってしまいます。
sum_numは16進数で機能します的な意味でしょうか!?

下のセル他の例文で、普通に数字が表示されるのですが、
なぜでしょう!?

私の書いたぶんはおそらく何かが間違っているのはわかっているのですが、
なぜ、16進数?表示をしてしていないのにこのようになってしまうのか永遠の疑問にしたくありません。。。

どなたか教えてください。

0

3Answer

まだ指摘されていない点で、誤解されたままだと将来的に困りそうなのを1つ。

Pythonにおける & はビット演算子で、論理演算子は and です。

boolに限っては返値が同じになるため気づきにくいですが、
オペランドの型、intに対する挙動、短絡性の有無など、全く別の演算子です。

うっかり日本語で検索するとこういうデタラメな記事がトップにくるので注意喚起しておきます。

2Like

Comments

  1. @Misaku

    Questioner

    ありがとうございます。気をつけます!

変えてみたら変えてみたで エラー出まくりです。

原因は,else: nownにあると思われます.
上のプログラムの問題点を他にも指摘しておきます.

  • if (fibo_num == 1) & (fibo_num == 2)
    • この条件は本来,fibo_num1または2のときという条件にしなければならなりません.
    • しかし,&演算子を使っていることも相まって,fibo_num1かつ2のときという,絶対に存在しない条件を指定しています.
  • return fibo_num == 1
    • 先述の通り,絶対に存在しない条件を指定されたので,この処理は絶対にありません.
    • また,本来の条件分岐に指定され直したとしても正しい文ではありません.
  • if fibo_num > 3
    • この条件文は,fibo_num3より大きい ときにTrueと判断されます.
    • fibo_numは今回全て整数なので,実質 4以上 からTrueになりますね.
    • 先のif文ではfibo_num12のとき,今のif文では,4以上のケースを考えています.
    • fib_num3のときはいつ考えるのでしょうか.
  • else: nown
    • 何もしない条件であればpassと書きましょう.nownなんてものは存在しませんのでエラーになります.

一度,フィボナッチ数列の定義を書いておきます.

{\rm fib(n)} = \left\{\begin{array}{lrl}
1 & {\rm if} & n \in \{1,2\} \\
{\rm fib}(n - 1) + {\rm fib}(n - 2) & {\rm if} & n > 2
\end{array}\right.

以上より,fibo_num1または2のとき1を返せばよく,fibo_num2より大きければsum_num(fibo_num - 1) + sum_num(fibo_num - 2)を返せば良さそうです.

余談

フィボナッチ数列一般項は

{\rm fib}(n) = \frac{1}{\sqrt{5}}\left\{\left(\frac{1+\sqrt{5}}{2}\right)^n - \left(\frac{1-\sqrt{5}}{2}\right)^n\right\}

ですので,

def fib_eq(n):
	return int((((1 + 5 ** 0.5) / 2) ** n - ((1 - 5 ** 0.5) / 2) ** n) / (5 ** 0.5))

とも書くことができます.上で書かれているsum_numよりも実行速度が高速な記述になります.参考までに.

1Like

Comments

  1. @Misaku

    Questioner

    ありがとうございます! 参考にします!!

sum_numを表示しようとしていますが、sum_numは関数ですね。
本当に表示したいのはsum_num(fibo_num)なのではないですか?

0Like

Comments

  1. @Misaku

    Questioner

    ありがとうございます、その通りです。
    変えてみたら変えてみたで エラー出まくりです。

    また少し調べたり考えます、

Your answer might help someone💌