🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

while

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

ループ

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

Q&A

解決済

2回答

464閲覧

ループ文(while、for)が上手くいきません

yus.sy

総合スコア14

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

while

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

ループ

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

0グッド

0クリップ

投稿2019/10/30 11:45

編集2019/10/30 12:01

現在、研究としてECGのRRIを求めるプログラムを作成しています。
そこで、ループ文が上手くいかず(jが加算されない)、詰まってしまっています。

このコードの説明をします。
リストeの各要素にはECGの振幅値のデータが入っています。
例えば、e_1には0.12、-0.26、-0.09,1.21,0.65・・・といった感じで、60000個のデータが格納されています。
e_2やe_3,e_4,e_5にもそれぞれ60000個のデータが入っています。

R_num_lstのリストの各要素には、空のリストが5個入っています。
下のプログラムは、ECGのR波を検出する仕様になっています。

プログラムの理想としては、
・1回目のループ
e_1に入っているR波を抽出し、R_num_lst0に代入する。
・2回目のループ
e_2に入っているR波を抽出し、R_num_lst1に代入する。
3,4,5回目も同様に…
といったプログラムにしたいです。

しかし、ループが上手くいかずに苦戦しています。
print jでループが上手くいっているか確認した所、コンソールでは
0
0
0
0
0
0
0
となっていて、jに加算がされていない状態です。

ただ、j=0の時のiのループは上手くいっていたのでjの方に問題があると考えています。

私は、プログラミングが苦手でやっと参考サイトなどを見ながら書けるようになってきたものの、
ループがどうも苦手なようでwhile文やfor文の基本のようなサイトを見ても解決できませんでした。

アドバイス、解決策などがわかるようでしたらぜひ教えていただきたいです。

e = [e_1,e_2,e_3,e_4,e_5] R_num_lst = [R_num_lst0,R_num_lst1,R_num_lst2,R_num_lst3,R_num_lst4] j = 0 while 5 > j: i = 0 while len(e[0]) > i: if(i - R_num > thr_time): if(e[j][i] >= thr_amp): R = e[j][i] R_lst.append(R) R_num = i R_num_lst[j].append(R_num) print j i+=1 j+=1

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

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

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

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

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

azuapricot

2019/10/30 11:47

(課題なら教授に聞けばよいのに(研究課題ならそれも研究の結果です))
azuapricot

2019/10/30 11:50

あとe_1とか何が入っているかよくわからないので 具体的に書いた方が良いです
meg_

2019/10/30 11:59

whileループは抜けているのですよね?
yus.sy

2019/10/30 12:05

azuaprictさん 教授はプログラミング専門ではないので先輩に聞きましたが、先輩もその場ではわからなかったです。
yus.sy

2019/10/30 12:06

meg_さん その’抜ける’というのがよくわからないです。
meg_

2019/10/30 14:41

「whileループが無限ループになっていないですよね?」という意味です。
azuapricot

2019/10/31 00:19

デバッグの仕方がわかってないように見受けられます。 デバッグ機能が使えないなら、各所にprint()を設置するなどして処理の流れを追ってみては?
guest

回答2

0

ベストアンサー

仕様についてはよくわからないので、
あくまで 1回目のループで e_1 の中身をR_num_list0 に代入する というところにだけ着目します。

Python

1e_1=[1, 2, 3, 4, 5] 2e_2=[6, 7, 8, 9, 10] 3e_3=[11, 12, 13, 14, 15] 4e_4=[16, 17, 18, 19, 20] 5e_5=[21, 22, 23, 24, 25] 6e = [e_1,e_2,e_3,e_4,e_5] 7R_num_lst0 = [] 8R_num_lst1 = [] 9R_num_lst2 = [] 10R_num_lst3 = [] 11R_num_lst4 = [] 12 13R_num_lst = [R_num_lst0,R_num_lst1,R_num_lst2,R_num_lst3,R_num_lst4] 14i = 0; 15for eItem in e: 16 print(str(i + 1) + "回目のループ") 17 for item in eItem: 18 print(item) 19 R_num_lst[i].append(item) 20 print(R_num_lst[i]) 21 i+=1 22 23print("最終出力結果") 24print(R_num_lst)

実行結果

1回目のループ 1 2 3 4 5 [1, 2, 3, 4, 5] 2回目のループ 6 7 8 9 10 [6, 7, 8, 9, 10] 3回目のループ 11 12 13 14 15 [11, 12, 13, 14, 15] 4回目のループ 16 17 18 19 20 [16, 17, 18, 19, 20] 5回目のループ 21 22 23 24 25 [21, 22, 23, 24, 25] 最終出力結果 [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25]]

拡張for文ってやつで、1回のループ毎に中身を変数に格納して利用できます。

やりたいことはこれであってますか?

投稿2019/10/31 00:35

azuapricot

総合スコア2341

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

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

0

デバッガの使い方を覚えてみてはどうでしょう?
PyCharmなどをインストールして、ループ付近にブレークポイントを仕掛けてステップ実行すると、プログラムの動きや変数の変化がわかるので、質問者様のような問題に立ち会った時に解決することが出来ます。

投稿2019/10/30 13:11

fukatani

総合スコア626

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問