Pythonのwhileループがうまく動作しない

このQ&Aのポイント
  • 初心者がPythonでwhileループを使用しているが、うまく動作しない。
  • 実行したプログラムでは、whileループが予想に反して終了しない。
  • 同じプログラムを他の環境で試しても同様の結果が得られる。
回答を見る
  • ベストアンサー

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です。 どなたか、詳しい方ご教授をお願いします。

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

  • ベストアンサー
回答No.1

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が印字されてプログラムは終わるわけです。

q4i771j9
質問者

お礼

cametan_42様 御返事、有難う御座います、インデントは入れたのですが確認せずに投稿したらインデントがありませんでした。 なるほど、確かにそういう事になりますね、深く考えず最後は50になると思い込んでいました。 もう少し深く考えるべきでしたね、すみません。

関連するQ&A

  • pythonのエラーについて教えて下さい。

    pythonの勉強をおこなっている超初心者です。 ネットでみた。以下のサンプルコードを実行しようとしました。 # -*- coding: utf-8 -*- print u'モジュールのロード' def test(): print u'関数:testを呼び出しました' if __name__ == '__main__': print 'python-izm' # print 'パイソンイズム' test() しかし、以下の様なエラーとなってしまいます。 File ”test02.py"、line 9 print ’python-izm'  ^ indentionError:expected an indented block ネット調べてみたとことpythonのインデントのエラーだとわかりました。 pythonはインデントで実行範囲を認識するので、 そこがうまく記述できていないであろうとは思うのですが、何回か試したのですが うまく動いてくれません。 どなたか御指南下さい。

  • Pythonでの日本語処理

    Pythonでの日本語処理 Windows環境でPythonを勉強し始めたところです(本当に始めたばかりです)。 エンコードは「utf-8」が推奨されているようなので、 # coding: utf-8 print u'全角でも' print u'半角でも' print u'ともかくutf-8でエンコードして、且つ頭にuを付ける。' というような書き方で統一してしまおうと思っているのですが、 Pythonに詳しい方のご意見をいただきたく。 よろしくお願いいたします。

  • pythonのプログラムを走らせるには?

    使用するソフトウェアの関係でWeb(HTMLまたはPHP)とPythonの連携が必要になりました。 しかしPythonをWebで扱ったことがなくいまいちどうしたらいいのか分りません。 <form action="/python/pythontest.py" method="GET">  <input type="submit" name="submit" value="更新"> </form> といった形で呼び出しているのですがファイルが開かれるだけでptythonのプログラムが実行されません。 pythonのプログラムは #!/usr/bin/env python # coding: utf-8 import cgi from datetime import datetime html_body = u""" <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> %s </body> </html>""" content='' print "Content-type: text/html;charset=utf-8\n" print (html_body % content).encode('utf-8') と書いています。 何が原因なのでしょうか? /usr/bin/env python のパスがうまく通っていないからでしょうか?

    • ベストアンサー
    • HTML
  • pythonスクリプト実行不可

    pythonスクリプトをCGIとして動作させるとエラーになります。 環境は、 OS : CentOS 6.4 Python : 2.6.6 pythonソースは、 #!/usr/bin/python # coding: utf-8 print "Content-type: text/html; charset=UTF-8" print print ブラウザーから、このCGIを直接起動すると、/var/log/httpd/error_logに下記のエラーが出ます。 [Fri Oct 18 12:45:28 2013] [error] [client 10.1.34.89] (8)Exec format error: exec of '/home/httpd/cgi-bin/test.py' failed Exec format errorとは、何でしょうか? perl CGIは、正常に動作しているのですが。 アドバイスよろしくお願いします。

  • python3.3についての質問です

    python3.3についてお聞きいたします。 「すべてのプログラム」-「Python3.3」-「IDLE(Python GUI)」を立ち上げて、 a=[5,6,7] a[0] と入力し「Enter」で、結果が「5」と正常に表示されます。 「IDLE」の一番上の欄の「File」-「New Window」の画面で上記と同じプログラムを入力し、「File」-「Save」で保存してから、「Run」-「Run Module F5」で実行させますと、 >>> ===========RESTART========== >>> >>> と表示されるだけです。 なぜ「5」と表示出来ないんでしょうか。 同じプログラムをメモ帳で書いて、文字コードを「UTF-8」で保存して、走らせても結果は何も表示しません。 なぜなんでしょうか。ご教授お願いいたします。

  • centos python

    以前WindowsでPythonのWebプログラムを書いていました。 webサーバーはapacheを利用しています。 そちらをcentOS(apache)に持って行きたいです。 ↓↓↓↓こちらがwindowsでのスクリプトです #! C:/Python27/python # coding: utf-8 temple_body= u""" <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>Pythonタイトル</title> </head> <body> <h1>Python テンプレート</h1> テンプレートです</br> </body> </html>""" try: print "Content-type: text/html;charset=utf-8\n" print ( temple_body.format() ).encode('utf-8') except Exception as e: print e ただテンプレートと表示されるだけのものです。 この1行目の #! C:/Python27/python を #! /usr/bin/python2.7 と直したところ サイトは開けず 500 Internal Server Error が、 エラーログには以下のようなものが出ていました。 End of script output before headers: index.py AH01215: (13)Permission denied: exec of '/var/www/html/index.py' failed #! /usr/bin/python2.7の部分が問題だと思うのですが どのように直せばいいのかがわかりません。 windowsの時は.exeを探し、Pathを指定しました。 しかし、centosでpython.exeに相当するものがどこにあるのか分りません。 centosの場合どのようなぱすを指定すれば良いのでしょうか?

  • PythonのUnicode文字について 

    PythonのUnicode文字について  最近pythonを始めました。このサイト(http://www.pythonweb.jp/index.html)でいろいろと勉強しているのですがUnicode文字についてよくわかりません。 #coding: UTF-8 print u"こんにちは" と入力するとなぜか File "test.py", line 2 print u"こんにちは" SyntaxError: (unicode error) 'utf8' codec can't decode byte 0x82 in position 0: unexpected code byteと表示され出力されませんでした。何故でしょうか。unicode文字についても説明をお願いします。

  • Pythonについて

    Pythonの勉強を始めて10日程の初心者です。 ホームページに載っていました例題を実際に動かそうとしましたが上手く行きません。 バージョンは3.3.0です。 「すべてのプログラム」-「python3.3」-「「IDLE(pythonGUI)」で動かそうとしています。 i = 3 while 0 < i:    print(i) i -= 1     else:  print 'else i=', i3 i -= 1 を入力した後Enterキーを押すと例題が処理を始めてしまい、else: を入力出来ません。 どうすれば良いんでしょうか。よろしくお願いします。

  • Python について質問です

    私はPythonの初心者です。 今Python でCSVのファイルを読んで数値だけ(数値以外に文字列や空白などがあります)を計算処理出来なくて困っています。教えて頂けませんか? 質問は、BB.csvというファイルの数値だけの合計と平均を計算したいです。 私のコードは以下です。 # coding: utf-8 import csv import re import string DATAFILE = 'BB.csv' class UnicodeDictReader(csv.DictReader): def __init__(self, f, fieldnames=None): csv.DictReader.__init__( self, f, fieldnames) def main(): total = 0 all_sum = 0 line_num = 0 with open(DATAFILE) as csvfile: reader = UnicodeDictReader(csvfile) for record in reader: # 値を数値で取得 A = int(record['38186']) B = int(record['38181']) C = int(record['38143']) item_total = A + B + C total = item_total all_sum += item_total line_num += 1 average = all_sum / reader.line_num print(" %d + %d + %d = %d " % ( A, B, C, total)) print(u"合計 %d " % all_sum) print(u"平均 %d " % average) if __name__ == '__main__': main() BB.csvは以下です、 38186,38181,38143 1,1,4 1,1,4 ,, ,, 2020,2020,2020 1412,1412,1412 625,625,625 75,75,75 75,75,75 75,75,75 75,75,75 4,4,4 4,4,4 4,4,4 7828,7828,7828 X,, 0,0,0 0,0,0 ○,, 0,0,0 0,0,0 0,0,0 ,,AAA 0,0,0 0,0,0 0,0,0 ,BBB, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 ,, 0,0,0 0,0,0 ,, 0,0,0 0,0,0 750,750,750 400,400,400 400,400,400 ,, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 16,16,16 16,16,16 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 11,11,11 11,11,11 11,11,11 3,3,3 3,3,3 3,3,3 3,3,3 4,4,4 4,4,4 3,3,3 3,3,3 16,16,16 16,16,16 16,16,16 14,8,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 15,15,15

  • pythonのCGIでページを遷移したい

    PythonのCGIserverを使っています。 /cgi-bin/hoge.py から /cgi-bin/foo.py へとページを遷移させたいのですが、うまくいきません。 どうすればいいですか? 以下、hoge.pyのソースです。 #!/usr/local/bin/python # coding: utf-8 (中略) print "Location: /cgi-bin/foo.py\n\n" 他の方法として、 import foo として、fooの関数やメソッドを呼ぶことも考えたのですが、 これもうまくいきません。。

    • 締切済み
    • CGI

専門家に質問してみよう