第7回:繰り返し処理(解答)#

演習1:for文による繰り返し処理#

演習1-1#

以下の出力結果となるようにrange関数とfor文を用いて処理を作成せよ.

出力

1
2
4
8
16
32
64
128
256
512
1024
# 解答
for i in range(11):
    a = 2 ** i
    print(a)
1
2
4
8
16
32
64
128
256
512
1024

演習1-2#

range関数とfor文を用いて以下の要素を持つリストを作成せよ.

ヒント:append関数を使うとリストに要素を追加できる.

出力

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# 解答
l_loop = []
for i in range(0, 22, 2):
    l_loop.append(i)
print(l_loop)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

演習1-3#

for文は文字列も繰り返すことができる.文字列abcdefを作成し,リストの代わりに文字列をfor文で繰り返した結果を確認せよ.正しく実行ができると以下の出力結果となるはずである.

出力

a
b
c
d
e
f
# 解答用セル
ss = 'abcdef'
for s in ss:
    print(s)
a
b
c
d
e
f

演習1-4#

演習1-3をベースに文字列からの文字の取り出しと,繰り返し回数を同時に出力せよ. 参考までに以下のような出力例が得られると良い.

出力

文字: a - 繰り返し回数: 1
文字: b - 繰り返し回数: 2
文字: c - 繰り返し回数: 3
文字: d - 繰り返し回数: 4
文字: e - 繰り返し回数: 5
文字: f - 繰り返し回数: 6
# 解答例
ss = 'abcdef'

i = 1
for s in ss:
    print(f'文字: {s} - 繰り返し回数: {i}')
    i = i + 1
文字: a - 繰り返し回数: 1
文字: b - 繰り返し回数: 2
文字: c - 繰り返し回数: 3
文字: d - 繰り返し回数: 4
文字: e - 繰り返し回数: 5
文字: f - 繰り返し回数: 6
# 解答例
ss = 'abcdef'

i = 1
for i, s in enumerate(ss):
    print(f'文字: {s} - 繰り返し回数: {i}')
    i = i + 1
文字: a - 繰り返し回数: 0
文字: b - 繰り返し回数: 1
文字: c - 繰り返し回数: 2
文字: d - 繰り返し回数: 3
文字: e - 繰り返し回数: 4
文字: f - 繰り返し回数: 5

演習1-5#

演習1-3と1-4を参考に以下の出力結果となるような繰り返し処理を作成せよ.

出力

aaaaaa
bbbbb
cccc
ddd
ee
f
# 解答例
ss = 'abcdef'

i = 1
total = len(ss)
for s in ss:
    print(s*(total - i + 1))
    i = i + 1
aaaaaa
bbbbb
cccc
ddd
ee
f
# 解答例
ss = 'abcdef'

i = 1
total = len(ss)
for i, s in enumerate(ss):
    print(s*(total - i))
aaaaaa
bbbbb
cccc
ddd
ee
f

演習2:繰り返し処理と条件分岐#

演習2-1#

1から20までの整数を出力する際に,その数が偶数であれば”偶数”,奇数であれば”奇数”と出力するプログラムを繰り返し処理を用いて作成せよ

出力

1: 奇数
2: 偶数
3: 奇数
4: 偶数
...
# 解答セル
# 解答例
for i in range(1, 21):
    if i % 2 == 0:
        print(f"{i}: 偶数")
    else:
        print(f"{i}: 奇数")
1: 奇数
2: 偶数
3: 奇数
4: 偶数
5: 奇数
6: 偶数
7: 奇数
8: 偶数
9: 奇数
10: 偶数
11: 奇数
12: 偶数
13: 奇数
14: 偶数
15: 奇数
16: 偶数
17: 奇数
18: 偶数
19: 奇数
20: 偶数

演習2-2#

以下の点数リストが与えられたとき,70点以上の点数を取った人は何人いるかを計算するプログラムを作成せよ.

点数リスト: [45, 78, 62, 89, 73, 55, 81, 68]

# 解答例
scores = [45, 78, 62, 89, 73, 55, 81, 68]
count = 0
for score in scores:
    if score >= 70:
        count += 1
print(count)
4

演習2-3#

以下の点数リストが与えられたとき,平均点を計算するプログラムを作成せよ.

点数リスト: [45, 78, 62, 89, 73, 55, 81, 68]

# 解答例
scores = [45, 78, 62, 89, 73, 55, 81, 68]
total_score = 0
for score in scores:
    total_score += score
average = total_score / len(scores)
print(average)
68.875

演習2-4#

文字列 faehoieanfeaobasbaksfae の中に含まれる a の数を繰り返し処理を用いて計算せよ.

# 解答例
ss = 'faehoieanfeaobasbaksfae'
i = 0
for s in ss:
    if s == 'a':
        i = i + 1
print(i)
6

演習2-5#

以下の出力のように\({1,2,...,999}\)の数の中で\(123\)で割り切れる値をすべて出力せよ

出力

123
246
369
492
615
738
861
984
# 解答例
j = 123
for i in range(1,1000):
    if i % j == 0:
        print(i)
123
246
369
492
615
738
861
984

演習3:繰り返し処理と数列#

演習3-1#

1から10までの整数の総和(与えられた複数の数を全て足した和のこと)を求めるプログラムをfor文を使用して作成せよ

出力

55
# 解答例
total = 0
for i in range(1, 11):
    total = total + i
print(total)
55

演習3-2#

1から5までの整数の総乗(与えられた複数の数を全て掛けた積のこと)を求めるプログラムをfor文を使用して作成せよ

出力

120
# 解答例
product = 1
for i in range(1, 6):
    product = product * i
print(product)
120

演習3-3#

1からnまでの整数の総和と総乗を求めるプログラムをfor文を使用して作成せよ.

ただし出力時は n に6以上の任意の値を代入せよ.

出力 (n=5の場合)

総和: 15
総乗: 120
# 解答例
n = 5
sum_value = 0
prod_value = 1
for i in range(1, n + 1):
    sum_value = sum_value + i
    prod_value = prod_value * i
print("総和:", sum_value)
print("総乗:", prod_value)
総和: 15
総乗: 120

演習3-4#

以下の式は奇数列 \(1, 3, 5, 7, \dots\)\(n\) 項までの総和を表す.

\[ S = \sum_{k=1}^{n} (2k - 1) \]

\(n=10\) としたとき,この和 \(S\) を繰り返し処理で求めよ.

結果は次のようになるはずである.

\[ S = 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 = 100 \]
# 解答例

n = 10
total = 0
for k in range(1, n+1):
    num = 2 * k - 1
    total = total + num
print(total)
100

演習4:発展課題#

これ以降は発展的な演習課題となります. 解くことは必須ではありませんがぜひチャレンジしてみてください.

演習4-1#

繰り返し処理を使って以下のようなピラミッドの文字列を出力を得よ.

出力

     1
    222
   33333
  4444444
 555555555
# 解答例
ss = '12345'
num_ss = len(ss)

i = 0
for s in ss:
    side = ' ' * (num_ss-i)
    print(side + s*i + s + s*i)
    i = i + 1
     1
    222
   33333
  4444444
 555555555

演習4-2#

条件分岐の発展課題のFizzBuzz問題を繰り返し処理で拡張する. 変数 number の値を 1 から 20 まで繰り返し,number

  • 3 で割り切れて 5 で割り切れないときは「Fizz」と出力

  • 5 で割り切れて 3 で割り切れない時は「Buzz」と出力

  • 両方で割り切れるときは「FizzBuzz」と出力

  • 両方で割り切れないときは,入力した数をそのまま出力

とされるような繰り返し処理を実装せよ.

出力例は以下である.

出力

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
# 解答例
for number in range(1,21):
    if number % 3 == 0 and number % 5 != 0:
        print('Fizz')
    elif number % 5 == 0 and number % 3 != 0:
        print('Buzz')
    elif number % 5 == 0 and number % 3 == 0:
        print('FizzBuzz')
    else:
        print(number)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz