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

質問編集履歴

3

追記しました。

2018/10/26 04:15

投稿

Ykkykk
Ykkykk

スコア140

title CHANGED
File without changes
body CHANGED
@@ -74,4 +74,9 @@
74
74
  c = i + lst2[a] + lst2[a+1]
75
75
  IndexError: list index out of range
76
76
  ```
77
- となっています。これだとfor文の中ではインクリメントされた```a```が使われていないということだと思うのですが、インクリメントされた```a```をfor文の中でも使用したいと思っています。
77
+ となっています。これだとfor文の中ではインクリメントされた```a```が使われていないということだと思うのですが、インクリメントされた```a```をfor文の中でも使用したいと思っています。
78
+
79
+ ##追記
80
+
81
+ 上記のコードでも、for文の中でインクリメントされたaの値が使用されているということをお教えいただきました。
82
+ ```a```がある値の間for文の中の計算を行い、そのたびごとに条件を評価し、条件から外れた場合には```a```をインクリメントして再びfor文の計算に戻る、という繰り返しを行いたいのですが、そのためにはwhile文を使わないということでしょうか?

2

追記しました。

2018/10/26 04:15

投稿

Ykkykk
Ykkykk

スコア140

title CHANGED
File without changes
body CHANGED
@@ -31,5 +31,47 @@
31
31
  処理としては、インクリメントする変数```a```を用意し、```lst2[a] * d < 0```であればaを増やして計算を行い、そうでない場合は```a```をインクリメントせずに計算を行うということがしたいです。
32
32
 
33
33
  上記のコードだと、インクリメントしたあとにうまくfor文に戻れていないような気がしています。
34
- while文をこに置けばよいかわからないのですが、どのようにすればうまくループを回しながら計算することができるのでしょうか?
34
+ どのようにすればfor文に戻って計算することができるのでしょうか?
35
+
36
+ ## 修正と追記
37
+ ```Python3
38
+ lst = [1, 5, 2, 32, 3, 41, 0, 5, 26, 7, 18, 9, 10]
39
+ lst2 = [1 ,-2 ,-3 ,1 ,3 ,4 ,5 ,-6, -7, 8, 9]
40
+ a = 0
41
+ len_lst = len(lst) - 1
42
+
43
+ print("forの前のa", a)
44
+ for i in lst:
45
+ c = lst2[a] +lst2[a+1]
46
+ d = lst2[a] + i
47
+ print("for", a)
48
+ while a < len_lst:
49
+ while lst2[a] * d < 0:
50
+ a += 1
51
+ print("while", a)
52
+ else:
53
+ a += 1
35
- ご教示いただけますと幸いです。よろしくお願いします。
54
+ print("else", a)
55
+ ```
56
+ 以上のようにelseを置くと無限ループを回避することはできているのですが、出力としては、
57
+ ```Python3
58
+ len 10
59
+ forの前 0
60
+ for 0
61
+ 2
62
+ else 1
63
+ while 2
64
+ while 3
65
+ else 4
66
+ else 5
67
+ else 6
68
+ else 7
69
+ while 8
70
+ while 9
71
+ else 10
72
+ Traceback (most recent call last):
73
+ File "loop.py", line 9, in <module>
74
+ c = i + lst2[a] + lst2[a+1]
75
+ IndexError: list index out of range
76
+ ```
77
+ となっています。これだとfor文の中ではインクリメントされた```a```が使われていないということだと思うのですが、インクリメントされた```a```をfor文の中でも使用したいと思っています。

1

コードに修正を加えました。

2018/10/26 03:16

投稿

Ykkykk
Ykkykk

スコア140

title CHANGED
File without changes
body CHANGED
@@ -8,27 +8,28 @@
8
8
  print("forの前のa", a)
9
9
  for i in lst:
10
10
  c = lst2[a] +lst2[a+1]
11
+ d = lst2[a] + i
11
- print(c)
12
+ print(c, d)
12
13
  while a < len_lst:
13
- while lst2[a] * c < 0:
14
+ while lst2[a] * d < 0:
14
15
  a += 1
15
16
  print("最後のa", a)
16
17
  ```
17
18
  以上のようなコードを書いたのですが、出力としては、
18
19
  ```Python3
19
20
  forの前のa 0
20
- -1
21
- 最後のa 1
21
+ 6, 2
22
22
  ```
23
23
  と表示されたあと処理が動かなくなり、Ctrl+Cで処理を中断しました。
24
24
  ```Python3
25
25
  ^CTraceback (most recent call last):
26
26
  File "loop.py", line 11, in <module>
27
- while lst2[a] * c < 0:
27
+ while lst2[a] * d < 0:
28
28
  KeyboardInterrupt
29
29
  ```
30
30
  エラーメッセージとしては以上の文言が表示されます。
31
- 処理としては、インクリメントする変数```a```を用意し、```lst2[a] * c < 0```であればaを増やしながら計算を行い、そうでない場合は```a```をインクリメントせずに計算を行うということがしたいです。
31
+ 処理としては、インクリメントする変数```a```を用意し、```lst2[a] * d < 0```であればaを増やし計算を行い、そうでない場合は```a```をインクリメントせずに計算を行うということがしたいです。
32
+
32
33
  上記のコードだと、インクリメントしたあとにうまくfor文に戻れていないような気がしています。
33
34
  while文をどこに置けばよいのかわからないのですが、どのようにすればうまくループを回しながら計算することができるのでしょうか?
34
35
  ご教示いただけますと幸いです。よろしくお願いします。