ループの回し方がよくわかりません。
Python3
1lst = [1, 5, 2, 32, 3, 41, 0, 5, 26, 7, 18, 9, 10] 2lst2 = [1 ,-2 ,-3 ,1 ,3 ,4 ,5 ,-6, -7, 8, 9] 3a = 0 4len_lst = len(lst) - 1 5 6print("forの前のa", a) 7for i in lst: 8 c = lst2[a] +lst2[a+1] 9 d = lst2[a] + i 10 print(c, d) 11 while a < len_lst: 12 while lst2[a] * d < 0: 13 a += 1 14 print("最後のa", a)
以上のようなコードを書いたのですが、出力としては、
Python3
1forの前のa 0 26, 2
と表示されたあと処理が動かなくなり、Ctrl+Cで処理を中断しました。
Python3
1^CTraceback (most recent call last): 2 File "loop.py", line 11, in <module> 3 while lst2[a] * d < 0: 4KeyboardInterrupt
エラーメッセージとしては以上の文言が表示されます。
処理としては、インクリメントする変数a
を用意し、lst2[a] * d < 0
であればaを増やして計算を行い、そうでない場合はa
をインクリメントせずに計算を行うということがしたいです。
上記のコードだと、インクリメントしたあとにうまくfor文に戻れていないような気がしています。
どのようにすればfor文に戻って計算することができるのでしょうか?
修正と追記
Python3
1lst = [1, 5, 2, 32, 3, 41, 0, 5, 26, 7, 18, 9, 10] 2lst2 = [1 ,-2 ,-3 ,1 ,3 ,4 ,5 ,-6, -7, 8, 9] 3a = 0 4len_lst = len(lst) - 1 5 6print("forの前のa", a) 7for i in lst: 8 c = lst2[a] +lst2[a+1] 9 d = lst2[a] + i 10 print("for", a) 11 while a < len_lst: 12 while lst2[a] * d < 0: 13 a += 1 14 print("while", a) 15 else: 16 a += 1 17 print("else", a)
以上のようにelseを置くと無限ループを回避することはできているのですが、出力としては、
Python3
1len 10 2forの前 0 3for 0 42 5else 1 6while 2 7while 3 8else 4 9else 5 10else 6 11else 7 12while 8 13while 9 14else 10 15Traceback (most recent call last): 16 File "loop.py", line 9, in <module> 17 c = i + lst2[a] + lst2[a+1] 18IndexError: list index out of range
となっています。これだとfor文の中ではインクリメントされたa
が使われていないということだと思うのですが、インクリメントされたa
をfor文の中でも使用したいと思っています。
##追記
上記のコードでも、for文の中でインクリメントされたaの値が使用されているということをお教えいただきました。
a
がある値の間for文の中の計算を行い、そのたびごとに条件を評価し、条件から外れた場合にはa
をインクリメントして再びfor文の計算に戻る、という繰り返しを行いたいのですが、そのためにはwhile文を使わないということでしょうか?
回答1件
あなたの回答
tips
プレビュー