- ベストアンサー
Pythonの問題
a, b = 0, 1 while b < 10: print(b, end=',') a, b = b, a+b 実行結果 1,1,2,3,5,8, Python3基礎認定試験の試験対策をしています。上記の実行結果がどうしてそうなるのかが分かりません。どなたか教えてください!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
流れは、bが10未満の間bの値を出力するループで、出力後にaにbを代入し、bにはaとbを足したものを入れて行きます。 a b 出力 a=b b=a+b 1: 0 1 1 1 0+1=1 2: 1 1 1 1 1+1=2 3: 1 2 2 2 1+2=3 4: 2 3 3 3 2+3=5 5: 3 5 5 5 3+5=8 6: 5 8 8 8 5+8=13 7: 8 13←ここでループ条件(b<10)外になるので、処理中止。 出力後にa=b、b=a+bが行われ、その値が次のaとbの値になります。 よって、1,1,2,3,5,8 になる。
その他の回答 (2)
- heyboy
- ベストアンサー率21% (1852/8731)
大昔にBASICを かじった程度ですが わかりますよ。 a,b=0,1 これは aに1を入れて bに0を入れる で合ってますよね? a,b=b,a+b これは aにbの値を入れ bにaとbを足した値を入れます。 最初はaが0でbが1 ループ1でaが1でbが1 ループ2でaが1でbが2 ループ3でaが2でbが3 : : bが10以上だとループから 外れるのです。 一応、知っているとは 思われますが a=a+3とかの表記は aに3加算すると言う意味です。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
初めて見た言語です! なのですが、これ行列ですね。 {a,b}={0,1};って読めば、わかる気がする。 最初にいきなり、bを表示するので、最初は「1」 {a, b} = {b, a+b}; ここで、ポイントは、a,bの代入が「後から実行されている」という 事実、なので、展開すると、2回目は、 {a,b}={0,1}なのだから、{a, b} = {1, 0+1};ですね。 つまり、{a,b}={1,1};となり、次のプリントでもbは「1」になる。 3度目のループ {a,b}={1,1}から、展開{a, b} = {1, 1+1}; ですので、{a,b}={1,2}; bを表示するので、「2」。 4度目 {a,b}={1,2}から、展開{a, b} = {2, 1+2};ですので、 {a,b}={2,3};となり、bは、「3」 5度目 {a,b}={1,3}から、展開{a, b} = {3, 2+3};ですので、 {a,b}={3,5};となり、bは、「5」 6度目 {a,b}={3,5}から、展開{a, b} = {5, 3+5};ですので、 {a,b}={5,8};となり、bは、「8」ですね。 7度目(サンプルの実行結果には含まれてませんが) {a,b}={5,8}から、展開{a, b} = {8, 5+8};ですので、 {a,b}={8,13};となり、bは、「13」となるという具合 ってことでしょうね。 この言語はやったことないので、ソース見てワクワクできました。 ありがとね!。 ポイントは a,bの代入が「後から実行されている」 この部分です。