回答編集履歴

2

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

2018/10/26 04:34

投稿

dice142
dice142

スコア5158

test CHANGED
@@ -79,3 +79,59 @@
79
79
  for文の2回目のループに入るときには`a`は`len_lst`の値と同じになり、
80
80
 
81
81
  `lst2`は`lst`よりも要素数が少ないので、`IndexError`となります。
82
+
83
+
84
+
85
+ ---
86
+
87
+
88
+
89
+ さらに回答追加されてたので追記
90
+
91
+
92
+
93
+ 正直質問者様がどういう処理をしたいのかが伝わっていません。
94
+
95
+ > aがある値の間for文の中の計算を行い
96
+
97
+
98
+
99
+ - 「aがある値の間」とはどの値なのか
100
+
101
+ - 「for文の中の計算」とは何の計算なのか
102
+
103
+
104
+
105
+ > そのたびごとに条件を評価し
106
+
107
+
108
+
109
+ - 「for文の中でaがある間」繰り返すなら、2重ループになり、その中に条件分岐が来るはずです。
110
+
111
+
112
+
113
+ > 条件から外れた場合にはaをインクリメント
114
+
115
+
116
+
117
+ - 現状のコードでは条件が外れる外れないに関わらずインクリメントしてます。
118
+
119
+
120
+
121
+ > 再びfor文の計算に戻る
122
+
123
+
124
+
125
+ 現状ではwhile文に戻るので、for文に戻るのであればwhile文を抜ける処理が必要です。
126
+
127
+
128
+
129
+ > while文を使わないということでしょうか?
130
+
131
+
132
+
133
+ 使い方によります。
134
+
135
+ まずはどんな処理をしたいのかを明確にし、それに従ってループするのか条件分岐だけなのかを
136
+
137
+ 判断して適切なプログラムを組む必要があります。

1

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

2018/10/26 04:34

投稿

dice142
dice142

スコア5158

test CHANGED
@@ -31,3 +31,51 @@
31
31
  少なくとも`while lst2[a] * c < 0`のループに入らなかったときの対応を
32
32
 
33
33
  正しく行うことで無限ループにはならなくなるかと思います。
34
+
35
+
36
+
37
+ ---
38
+
39
+
40
+
41
+ いつの間にか質問文が追記されてたので回答も追記。
42
+
43
+
44
+
45
+ > これだとfor文の中ではインクリメントされたaが使われていないということだと思うのですが、
46
+
47
+
48
+
49
+ いえ、for文の中でもきちんとwhile文でインクリメントされた値が使われています。
50
+
51
+ ただし、`IndexError`とあるように、aの値が進みすぎているので、
52
+
53
+ リストの範囲外の要素にアクセスしてしまっている状態です。
54
+
55
+
56
+
57
+ ```Python
58
+
59
+ while a < len_lst:
60
+
61
+ while lst2[a] * d < 0:
62
+
63
+ a += 1
64
+
65
+ print("while", a)
66
+
67
+ else:
68
+
69
+ a += 1
70
+
71
+ print("else", a)
72
+
73
+ ```
74
+
75
+ for文の1回のループにつき、`while a < len_lst`のループ内で、
76
+
77
+ `a`はlen_lstと同値になるまでループします。
78
+
79
+ for文の2回目のループに入るときには`a`は`len_lst`の値と同じになり、
80
+
81
+ `lst2`は`lst`よりも要素数が少ないので、`IndexError`となります。