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

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

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

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1116閲覧

while のループを抜けていないはずなのに、print されません

akirabrian67

総合スコア11

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/10/20 03:29

編集2020/10/20 04:49

python 内で無限ループを作成するべくwhile文を使い、while文中の初めと終わりにprintを入れました。
ですが、実行してみるとコマンドプロンプト上では一回のみの表示でループしているようには見えません。なぜなのでしょうか?

Python

1while True: 2 print('開始') 34567 print('終了')

これであればコマンドプロンプト上には開始、終了が通常羅列されるのでしょうか?

python

1from flask import Flask, render_template 2from decimal import Decimal 3import logging 4import socket 5import webbrowser 6import math 7 8while True: 9 print('開始') 10 11 logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s') 12 host_ip = '192.168.24.204' # PLCのIPアドレス 13 host_port = 8501 # 上位リンク通信のポート番号(デフォルト値) 14 logging.debug('start') 15 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。 16 17 try: 18 #クライアント接続 19 client.connect((host_ip,host_port)) # サーバーに接続(kv-7500にTCP接続/上位リンク通信) 20 except: 21 print("PLC接続NG") 22 23 ##########################以下から画面表示に関係するパラメータ############################################## 24 25 # ↓上位リンク通信のコマンド(データ読み出しコマンド、左から順に、読み出しコード、IOの番号、?。 26 # ↓○○○ = "RDS DM53000.D 2\r" 27 # ↓[.D]⇒±10進数32BIT表示・・・返り値は10桁の0埋め数値 28 29 30 Production = "RD DM1014.D\r" # DM1014 : 生産数 31 Cycle_Time = "RD DM1302.D\r" # DM1302 : サイクルタイム 32 33 # ↓上位リンク通信のデータコードがASCIIなのでエンコード  34 # ↓ASCII:文字コード 35 # ↓エンコード:他の形式に変換すること 36 37 client.send(Production.encode("ascii")) # 生産数ををASCIIにエンコード 38 client.send(Cycle_Time.encode("ascii")) # サイクルタイムをASCIIにエンコード 39 40 print("send : " + Production) 41 print("send : " + Cycle_Time) 42 43 # ↓ 受信用バイト配列を定義しておく 44 # ↓ PLCからの返答がbyteデータなのでUTF-8にデコード 45 # ↓ UTF-8: 文字コード ASCIIよりデータサイズが小さい 46 # ↓ デコード:エンコードされたものをもとの形式に戻すこと 47 48 Production_number = client.recv(64) 49 Production_number = Production_number.decode("UTF-8") 50 Production_number = int(Production_number) 51 52 Cycle_time = client.recv(64) 53 Cycle_time = Cycle_time.decode("UTF-8") 54 Cycle_time = int(Cycle_time) 55 Cycle_time = Cycle_time * Decimal('0.1') 56 57 Goal = 86400 / Cycle_time # 目標数: 24時間 / サイクルタイム 58 Goal = math.floor(Goal) 59 60 Operation_Rate = ( 3600 / Cycle_time ) / Production_number 61 Operation_Rate = Operation_Rate * 100 62 Operation_Rate = math.floor(Operation_Rate) 63 # 進捗、稼働率 時間をどうするか検討必要 64 65 client.close() 66 logging.debug('end') 67 68 print("Received :" , Production_number) 69 print("Received :" , Cycle_time) 70 print("Received :" , Goal) 71 print(Operation_Rate, "%") 72 73 #######################################ここまでがソケット通信のコード######################################################################### 74 75 app = Flask(__name__) # アプリの設定 76 77 @app.route("/") # どのページで実行する関数か設定 78 79 def index(): 80 return render_template("index1.html", production_number=Production_number, cycle_time=Cycle_time, goal=Goal, operation_rate=Operation_Rate) # Hello, World! を出力 81 82 print('終了') 83 84 if __name__ == "__main__": # 実行されたら 85 app.run(debug=False, host='localhost', port=9999) # debug=False でRestartingを無効にする、host="'0'0'0'0"ではなくローカルホストにすること

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

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

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

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

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

guest

回答2

0

開始と終了の間でコードが終了してしまったか、無限ループしてしまったかのどちらかでしょうね

これであればコマンドプロンプト上には開始、終了が通常羅列されるのでしょうか?

ふつうは羅列されます

投稿2020/10/20 03:39

y_waiwai

総合スコア87782

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

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

akirabrian67

2020/10/20 04:37

break などを作ってないので無限ループするようになっています。無限ループでは羅列されないのでしょうか?
y_waiwai

2020/10/20 04:39

いや、その無限ループではなくて、中で無限ループが作られているってことです。 コードを提示しませんか?
akirabrian67

2020/10/20 04:49

コードを追加しました。どのあたりでもう一つの無限ループが作られているのでしょうか?
y_waiwai

2020/10/20 04:59

で、あなたのそのコードはどこまで処理が進むんでしょうか。
akirabrian67

2020/10/20 05:51

終了という文字がコマンドプロンプトには表示されているので、そこまでは処理が進みます。 ’終了’のあとのifの処理の後ろにprint('終了')をやった場合はその文字は表示されませんでした。
guest

0

ベストアンサー

FlaskをWhileの無限ループに入れるような使い方は見たことがありません。

ソケット通信の結果をWebで表示させたいなら、HTTPリクエストがされる度にソケット通信で結果を取得するようなプログラムにしたり、ソケット通信を別プロセスで動作させ、結果をどこか(例えばDBとか)に入れてそれを参照するようなページを作成した方が良いと思います。

投稿2020/10/20 08:17

FiroProchainezo

総合スコア2401

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

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

akirabrian67

2020/10/22 19:30

HTTPリクエストを一定周期的にするにはループが必要ではないですか? 自分自身がループ以外の方法を知らないのでイメージができていません…すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問