こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Pythonでwhileがうまく動きません。

プログラムは初心者ですが、Pythonが簡単そうなので参考書を買ってPythonのホームページから最新の3.6.2 32bitをインストールして本に書かれているサンプルプログラムを書き込んで試しているのですが
# coding:utf-8
total = 0
a = 1
while total <= 50:
print a
total = total + a
a = a + 1
print(total)
これをRunすると
1
2
3
4
5
6
7
8
9
10
55
と出ます
Python 3.5.4 64bitでも試してみたのですが、55 と出ます。
他のパソコンでも試してみたのですが、結果は同じでした。
OSはWindws10 1703homeです。
どなたか、詳しい方ご教授をお願いします。

投稿日時 - 2017-08-24 00:08:56

QNo.9366500

困ってます

質問者が選んだベストアンサー

Pythonの場合だと、インデント無しだとコードが良く分からなくなるんですよね。
恐らくこう言うコードでしょう。

total = 0
a = 1
while total <= 50:
 print(a)
 total = total + a
 a = a + 1
print(total)

print(a)はwhileブロックに入っていますが、print(total)はwhileブロック外にありませんか?

aの初期値は1、そしてwhileブロック内で1づつ加算されていきますよね。
つまりprint(a)が出す情報は

1, 2, 3, 4, ・・・・・・

となっていきますね。

一方、totalの初期値は0。そしてwhileブロック内でaが加算されていきます。
つまりtotalの値は次のようになっていきますね。

1回目: 0 + 1 -> 1
2回目: 1 + 2 -> 3
3回目: 3 + 3 -> 6
4回目: 6 + 4 -> 10
・・・・・・。

まあ、平たく言うと、totalは

1 + 2 + 3 + 4 + ......

って計算をしてるわけですね。
9回目の加算でtotalは45、10回目の加算でtotalは55になります。totalが50より小さい間ループをしろ、とwhileで条件付けしてますから、10回目の計算でtotalが55になったと同時にwhileブロックは終了します。
しかしながらtotalは55と言う値を保持したままなので、print(total)と言う命令によって最後に55が印字されてプログラムは終わるわけです。

投稿日時 - 2017-08-24 03:09:36

お礼

cametan_42様
御返事、有難う御座います、インデントは入れたのですが確認せずに投稿したらインデントがありませんでした。

なるほど、確かにそういう事になりますね、深く考えず最後は50になると思い込んでいました。
もう少し深く考えるべきでしたね、すみません。

投稿日時 - 2017-08-24 09:03:39

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問