9. for文とwhile文

9-1. for文の基本構文
 Pythonのfor文は、任意のシーケンス型(文字列やリスト、タプルなど)の要素に基づいて反復を行います。反復の順番はシーケンス中に要素が現れる順番になります。C言語のように、反復の始まりの数と終わりの数、ステップ数などを指定する訳ではない点に注意してください。反復処理を行うプログラムブロックは、半角スペースを使ったインデントで行頭をずらすことて設定します。

▽サンプルプログラム9-1. for文の基本構文

a="Hiroshima"
for i in a:
    print(i)
a=[1, 2, 3, 4, 5]
for i in a:
    print(i)
a=("a", "b", "c", "d", "e")
for i in a:
    print(i)
▼プログラミングセル9-1. packages = [] terminal = false

9-2. for文におけるインデントの注意
 反復するプログラムブロック部分の行頭のインデントがずれないように注意してください。

▽サンプルプログラム9-2. for文におけるインデントの注意

a=[1, 2, 3, 4, 5]
for i in a:
    b = i**2
    print(b)
a=[1, 2, 3, 4, 5]
for i in a:
    b = i**2
     print(b) # エラー部分
▼プログラミングセル9-2.

9-3. for文におけるbreakによる反復の終了
 for文の反復処理から途中で止めるにはbreakを利用します。breakを利用した場合、for文から抜け出るので注意してください。

▽サンプルプログラム9-3. for文におけるbreakによる反復の終了

a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in a:
    if i == 5:
        break
    print("i = ", i)
print("for文の終了")
▼プログラミングセル9-3.

9-4. continueによるfor文の反復のスキップ
 for文の反復処理の中である処理をスキップしたい場合にはcontinueを利用します。breakとは異なり、continueではfor文の反復の中の1つの処理のみスキップしてfor文の反復処理に戻る点に注意してください。

▽サンプルプログラム9-4. continueによるfor文の反復のスキップ

a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in a:
    if i == 5:
        continue
    print("i = ", i)
print("for文の終了")
▼プログラミングセル9-4.

9-5. for文の入れ子(ネスト)
 for文の中にfor文を記述して入れ子(ネスト)の状態にできます。

▽サンプルプログラム9-5. for文の入れ子(ネスト)

a=[1, 2, 3, 4, 5]
b=["a", "b", "c", "d", "e"]
for i in a:
    print("i = ", i)
    for j in b:
        print(" j = ", j)
print("for文の終了")
▼プログラミングセル9-5.

9-6. range関数とfor文
 range関数は、連続した数値を要素として持つシーケンスになります。range関数のシーケンスはrange型になります。range関数では、最初の数(省略した場合は0)、終了の数(指定した数は含まない)、ステップ数などを設定することができます。for文の反復処理の源泉として利用される機会が多いので注意してください。

▽サンプルプログラム9-6. range関数とfor文

a=range(5)
for i in a:
    print(i)
print(type(a))
a=range(2, 5)
for i in a:
    print(i)
a=range(0, 5, 2)
for i in a:
    print(i)
a=range(5, 0, -1)
for i in a:
    print(i)
▼プログラミングセル9-6.

9-7. while文の基本構文
 while文は条件が成立する間は反復を実施します。条件が成立しなくなるように設定したり、反復を終了したいときにbreakを記述したりする必要がある点に注意してください。終了がうまく設定されていない場合、反復処理が終わらない無限ループになるので注意しましょう。

▽サンプルプログラム9-7. while文の基本構文

a=10
while a > 0:
    print(a)
    a-=1
print("while文の終了")
a="Hiroshima"
b=0
while b < len(a):
    print(a[b])
    b+=1
print("while文の終了")
▼プログラミングセル9-7.

9-8. while文におけるインデントの注意
 反復するプログラムブロック部分の行頭のインデントがずれないように注意してください。

▽サンプルプログラム9-8. while文におけるインデントの注意

a=10
while a > 0:
    print(a)
    a-=1
print("while文の終了")
a=10
while a > 0:
    print(a)
     a-=1 # エラー箇所
print("while文の終了")
▼プログラミングセル9-8.

9-9. while文におけるbreakによる反復の終了
 while文の反復処理から途中で止めるにはbreakを利用します。breakを利用した場合、while文から抜け出るので注意してください。

▽サンプルプログラム9-9. while文におけるbreakによる反復の終了

a=10
while a > 0:
    if a == 5:
        break
    print("a=", a)
    a-=1
print("while文の終了")
▼プログラミングセル9-9.

9-10. continueによるwhile文の反復のスキップ
 while文の反復処理の中である処理をスキップしたい場合にはcontinueを利用します。breakとは異なり、continueではfor文の反復の中の1つの処理のみスキップしてwhile文の反復処理に戻る点に注意してください。

▽サンプルプログラム9-10. continueによるwhile文の反復のスキップ

a=10
while a > 0:
    if a == 5:
        a-=1 # この行がない場合は無限ループになる点に注意
        continue
    print("a=", a)
    a-=1
print("while文の終了")
▼プログラミングセル9-10.

9-11. while文の無限ループ
 while文を終了する設定が正しくない場合(条件が常に成立する場合)は無限ループになりプログラムが止まりません。
※Webブラウザの挙動がおかしくなった場合はページを閉じて開き直してください。

▽サンプルプログラム9-11. while文の無限ループ

a=10
while a > 0:
    if a == 5:
        # a-=1がないので無限ループになってしまいます
        continue
    print("a=", a)
    a-=1
print("while文の終了")
▼プログラミングセル9-11.

9-12. while文の入れ子(ネスト)
 while文の中にwhileを記述して入れ子(ネスト)の状態にできます。

▽サンプルプログラム9-12. while文の入れ子(ネスト)

a=5
while a > 0:
    print("a=", a)
    a-=1
    b=5
    while b > 0:
        print(" b=", b)
        b-=1
print("while文の終了")
▼プログラミングセル9-12.

9-13. while-else文
 while-else文では、whlie文を正常終了したとき(while文の条件が成立しなくなって反復が終了するとき)の処理をelse文で明記します。

▽サンプルプログラム9-13. while-else文

a=10
while a > 0:
    print(a)
    a-=1
else:
    print("elseの処理")
print("while文の終了")
▼プログラミングセル9-13.

 breakでwhlie文を抜け出た場合はelse文の処理を実施しません。

▽サンプルプログラム9-14. break時のwhile-else文の処理
a=10
while a > 0:
    if a == 5:
        break
    print(a)
    a-=1
else:
    print("elseの処理")
print("while文の終了")
▼プログラミングセル9-14.

 breakとは異なり、continueでwhlie文を抜け出た場合はelse文の処理が実施される点に注意しましょう。

▽サンプルプログラム9-15. cotinue時のwhile-else文の処理
a=10
while a > 0:
    if a == 1:
        a-=1
        continue
    print(a)
    a-=1
else:
    print("elseの処理")
print("while文の終了")
▼プログラミングセル9-15.

問題
 以下の問題の解答となるプログラムを作成しましょう。

  1. 過去7日間の温度を調べてリストに格納し、リストの項目を順番に表示させましょう。なお、for文とwhile文の2種類作成してください。
  2. ▼プログラミングセル
  3. 整数を標準入力し、その数だけ*を表示させましょう。なお、for文とwhile文の2種類作成してください。
  4. ▼プログラミングセル
  5. 整数を標準入力し、1からその数までの自然数を合計して結果を表示させましょう.なお、for文とwhile文の2種類作成してください。
  6. ▼プログラミングセル
  7. 1から1000までの自然数のうち、7の倍数の個数を調べて表示させましょう.なお、for文とwhile文の2種類作成してください。
  8. ▼プログラミングセル
  9. 整数を標準入力し、その数を*を表示する行数とします。ただし、1行目は*を1つ、2行目は*を2つといったように、行番号に合わせて*の個数を変化させましょう。なお、for文とwhile文の2種類作成してください。以下は標準入力の整数が5の場合の表示例です。
  10. *
    **
    ***
    ****
    *****
    
    ▼プログラミングセル