質問するログイン新規登録

回答編集履歴

2

さらに質問文追記されていたので回答追記

2018/10/26 04:34

投稿

dice142
dice142

スコア5158

answer CHANGED
@@ -38,4 +38,32 @@
38
38
  for文の1回のループにつき、`while a < len_lst`のループ内で、
39
39
  `a`はlen_lstと同値になるまでループします。
40
40
  for文の2回目のループに入るときには`a`は`len_lst`の値と同じになり、
41
- `lst2`は`lst`よりも要素数が少ないので、`IndexError`となります。
41
+ `lst2`は`lst`よりも要素数が少ないので、`IndexError`となります。
42
+
43
+ ---
44
+
45
+ さらに回答追加されてたので追記
46
+
47
+ 正直質問者様がどういう処理をしたいのかが伝わっていません。
48
+ > aがある値の間for文の中の計算を行い
49
+
50
+ - 「aがある値の間」とはどの値なのか
51
+ - 「for文の中の計算」とは何の計算なのか
52
+
53
+ > そのたびごとに条件を評価し
54
+
55
+ - 「for文の中でaがある間」繰り返すなら、2重ループになり、その中に条件分岐が来るはずです。
56
+
57
+ > 条件から外れた場合にはaをインクリメント
58
+
59
+ - 現状のコードでは条件が外れる外れないに関わらずインクリメントしてます。
60
+
61
+ > 再びfor文の計算に戻る
62
+
63
+ 現状ではwhile文に戻るので、for文に戻るのであればwhile文を抜ける処理が必要です。
64
+
65
+ > while文を使わないということでしょうか?
66
+
67
+ 使い方によります。
68
+ まずはどんな処理をしたいのかを明確にし、それに従ってループするのか条件分岐だけなのかを
69
+ 判断して適切なプログラムを組む必要があります。

1

質問文追記により回答も追記

2018/10/26 04:34

投稿

dice142
dice142

スコア5158

answer CHANGED
@@ -14,4 +14,28 @@
14
14
  というのが繰り返されているので無限ループとなっています。
15
15
  何がしたいコードかわからないので、whileをどこに置くかは指摘できませんが、
16
16
  少なくとも`while lst2[a] * c < 0`のループに入らなかったときの対応を
17
- 正しく行うことで無限ループにはならなくなるかと思います。
17
+ 正しく行うことで無限ループにはならなくなるかと思います。
18
+
19
+ ---
20
+
21
+ いつの間にか質問文が追記されてたので回答も追記。
22
+
23
+ > これだとfor文の中ではインクリメントされたaが使われていないということだと思うのですが、
24
+
25
+ いえ、for文の中でもきちんとwhile文でインクリメントされた値が使われています。
26
+ ただし、`IndexError`とあるように、aの値が進みすぎているので、
27
+ リストの範囲外の要素にアクセスしてしまっている状態です。
28
+
29
+ ```Python
30
+ while a < len_lst:
31
+ while lst2[a] * d < 0:
32
+ a += 1
33
+ print("while", a)
34
+ else:
35
+ a += 1
36
+ print("else", a)
37
+ ```
38
+ for文の1回のループにつき、`while a < len_lst`のループ内で、
39
+ `a`はlen_lstと同値になるまでループします。
40
+ for文の2回目のループに入るときには`a`は`len_lst`の値と同じになり、
41
+ `lst2`は`lst`よりも要素数が少ないので、`IndexError`となります。