動画
課題
課題(チャプター5:繰り返し)
【基本問題】for文とリスト(6問)
問題1
変数itemsに["りんご", "みかん", "ぶどう"]を代入し、for文を使って要素を1行に1つずつ画面に表示するプログラムを作成してください。
期待される出力:
りんご
みかん
ぶどう
ヒント: for 変数 in リスト: のあと、ループ本体はインデントします。
問題2
変数scoresに[88, 92, 79]を代入し、for文で各点数を「点数: ○○点」の形で1行ずつ表示するプログラムを作成してください。
期待される出力:
点数: 88点
点数: 92点
点数: 79点
ヒント: print("点数:", s, "点") のように文字列と変数を並べてもよいです。
問題3
変数numsに[3, 1, 4, 1, 5]を代入し、for文ですべての数を順に表示したあと、ループの外でprint("終わり")を1回だけ実行するプログラムを作成してください。
期待される出力:
3
1
4
1
5
終わり
ヒント: print("終わり")のインデントをforと同じ段にすると、ループの外になります。
問題4
空のリストvalues = []に対してfor v in values:でprint(v)を繰り返すプログラムを作成し、続けてprint("件数0")を表示してください。
期待される出力:
件数0
ヒント: 要素がないリストでは、ループ本体は1回も実行されません。
問題5
変数pricesに[100, 250, 80]を代入し、for文で税込み(10%)の金額を整数のまま1行ずつ表示してください。計算式はint(p * 1.1)(pは各要素)でよいものとします。
期待される出力:
110
275
88
ヒント: ループ変数にpricesの各要素を順に入れます。
問題6
変数wordsに["Python", "は", "楽しい"]を代入し、for文で各要素を表示するプログラムを作成してください。ループ変数の名前はwordにしてください(命名の練習)。
期待される出力:
Python
は
楽しい
ヒント: for word in words: と書きます。
【基本問題】for文で集計(5問)
問題7
変数scoresに[72, 85, 90]を代入し、for文で合計を求めてprint("合計:", total)で表示するプログラムを作成してください。初期値はtotal = 0から始めます。
期待される出力:
合計: 247
ヒント: 台本の例のとおり total = total + s を繰り返します。
問題8
変数dataに[10, 20, 15, 5]を代入し、for文で平均を求めてprint("平均:", avg)で表示してください。平均は合計 ÷ 要素の個数とし、整数除算//でよいものとします。
期待される出力:
平均: 12
ヒント: まず合計をforで求め、ループの外でavg = total // 4のように割ります。
問題9
変数numsに[3, 8, 2, 11, 4]を代入し、for文で10より大きい値の個数を数え、print("10より大きい個数:", count)と表示してください。
期待される出力:
10より大きい個数: 1
ヒント: if n > 10: のときだけ count を1増やします。
問題10
変数numsに[2, -1, 5, -3, 7]を代入し、for文で正の数だけ足し合わせた合計を表示してください(print("正だけの合計:", total))。
期待される出力:
正だけの合計: 14
ヒント: if n > 0: のときだけ total に加えます。
問題11
変数numsに[5, 12, 8, 12, 3]を代入し、for文で最大値を求めて表示してください(max関数は使わないこと)。print("最大:", best)とします。
期待される出力:
最大: 12
ヒント: 最初はbest = nums[0]などとし、大きい値が出たらbestを置き換えます。
【基本問題】文字列とfor文(3問)
問題12
変数textに"ABC"を代入し、for c in text:で1文字ずつprint(c)するプログラムを作成してください。
期待される出力:
A
B
C
ヒント: 文字列もforで1文字ずつ取り出せます。
問題13
変数sに"hello"を代入し、for文で文字"l"が何文字あるか数え、print("lの個数:", count)と表示してください。
期待される出力:
lの個数: 2
ヒント: if c == "l": のとき count を増やします。
問題14
変数passwordに"ab12"を代入し、for文で各文字について、数字(0〜9)ならD、それ以外ならXを1行に1つずつ表示してください(ch.isdigit()を使ってよい)。
期待される出力:
X
X
D
D
ヒント: if ch.isdigit(): print("D") のように分岐します。
【基本問題】range関数(9問)
問題15
for i in range(4):を使い、iを1行ずつ表示するプログラムを作成してください。
期待される出力:
0
1
2
3
ヒント: range(4)は0から3までです。
問題16
for i in range(1, 5):を使い、iを1行ずつ表示するプログラムを作成してください。
期待される出力:
1
2
3
4
ヒント: 終了値5は含まれません。
問題17
for i in range(1, 10, 2):を使い、iを1行ずつ表示するプログラムを作成してください。
期待される出力:
1
3
5
7
9
ヒント: 第3引数はステップ(間隔)です。
問題18
for i in range(10, 0, -2):を使い、iを1行ずつ表示するプログラムを作成してください。
期待される出力:
10
8
6
4
2
ヒント: 負のステップでは、終了値0は含まれません(台本のカウントダウン例)。
問題19
rangeとforを使い、1から10までの整数の合計を求め、print("1〜10の合計:", total)と表示してください。
期待される出力:
1〜10の合計: 55
ヒント: for i in range(1, 11): を使います。
問題20
for i in range(1, 6):を使い、iの2乗(i * i)を1行ずつ表示するプログラムを作成してください。
期待される出力:
1
4
9
16
25
ヒント: ループの中でprint(i * i)します。
問題21
リストnames = ["太郎", "花子", "次郎"]に対し、for i in range(len(names)):を使って、「0: 太郎」のようにインデックスと名前を1行ずつ表示するプログラムを作成してください。
期待される出力:
0: 太郎
1: 花子
2: 次郎
ヒント: print(i, ":", names[i], sep="") などで整形できます。
問題22
for i in range(5):のあと、ループの外でprint("最後のiは", i)を実行するプログラムを作成してください(ループ終了後のiの値に注目)。
期待される出力:
最後のiは 4
ヒント: range(5)の最後のiは4です。
問題23
n = 3としたとき、for i in range(n):のループが回る回数を、ループの外でprint("回数は", n, "回")ではなく、カウンタkをループ内で増やして求め、print("実際に回った回数:", k)と表示するプログラムを作成してください。
期待される出力:
実際に回った回数: 3
ヒント: ループの先頭でk = 0、ループ内でk = k + 1。
【基本問題】while文(7問)
問題24
n = 0から始め、while n < 3:でnを表示し、毎回n = n + 1するプログラムを作成してください(台本の例に近い形)。
期待される出力:
0
1
2
ヒント: ループの中で必ずnを更新します。
問題25
n = 1から始め、while n <= 5:のあいだprint(n)し、n = n + 1するプログラムを作成してください。
期待される出力:
1
2
3
4
5
ヒント: 条件が偽になる直前まで繰り返します。
問題26
total = 0、n = 1から始め、while n <= 4:のあいだtotal = total + nし、n = n + 1するプログラムを作成し、最後にprint("合計:", total)してください。
期待される出力:
合計: 10
ヒント: 1+2+3+4=10です。
問題27
n = 10から始め、while n > 0:のあいだprint(n)し、n = n - 3するプログラムを作成してください。
期待される出力:
10
7
4
1
ヒント: 次は7, 4, 1となり、次が-2で条件が偽になります。
問題28
while 0: のループ本体に print("A") を書き、whileと同じインデント段で print("B") を書くプログラムを作成してください。条件が最初から偽のとき、ループ本体は1回も実行されないことを確認します。
期待される出力:
B
ヒント: 表示されるのはループの外のprint("B")だけです。
問題29
password = "yes" としたあと、いったんpassword = "ok" と代入してから、while password != "ok": のあいだ print("待機中") するプログラムを作成してください。ループ本体は1回も実行されない例です。
期待される出力:
ヒント: whileに入る前に、すでにpasswordが"ok"になっている必要があります。出力が空でも正解です。
問題30
count = 0から始め、while count < 100: のあいだ毎回 count = count + 25 し、各回 print(count) するプログラムを作成してください。
期待される出力:
25
50
75
100
ヒント: countが100になったあと、条件が偽になり終了します。
【基本問題】二重ループ(6問)
問題31
台本の例に近い形で、for row in range(1, 3): と for col in ["A", "B"]: の二重ループを書き、print(row, col) で行と列を1行ずつ表示するプログラムを作成してください。
期待される出力:
1 A
1 B
2 A
2 B
ヒント: 外側が1周するたびに、内側がすべて回り切ります。
問題32
for i in range(2): と for j in range(3): の二重ループで、print(i, j) を実行するプログラムを作成してください。
期待される出力:
0 0
0 1
0 2
1 0
1 1
1 2
ヒント: 内側のjが0→1→2と進んでから、iが増えます。
問題33
二重ループ for a in range(1, 4): と for b in range(1, 4): で、print(a * b) を実行するプログラムを作成してください。
期待される出力:
1
2
3
2
4
6
3
6
9
ヒント: 内側が3回×外側が3回で、合計9行です。
問題34
変数total = 0を用意し、for i in range(2): と for j in range(3): の二重ループの中で total = total + 1 するプログラムを作成し、最後に print(total) してください。
期待される出力:
6
ヒント: 2×3=6回です。
問題35
外側を for color in ["赤", "青"]:、内側を for size in ["S", "M"]: とし、print(color, size) するプログラムを作成してください。内側・外側で違う変数名を使う練習です。
期待される出力:
赤 S
赤 M
青 S
青 M
ヒント: 両方ともiにしないでください。
問題36
for i in range(3): の中に for j in range(2): を書き、内側でだけ print("*", end="") を実行し、内側ループのあと(外側のインデント段)で print() を実行して改行するプログラムを作成してください。
期待される出力:
**
**
**
ヒント: print()の引数なしは改行だけです。
【基本問題】continueとbreak(6問)
問題37
リストnums = [1, 2, 3, 4, 5]に対し、for x in nums: で、xが偶数のときは continue し、奇数だけ print(x) するプログラムを作成してください。
期待される出力:
1
3
5
ヒント: if x % 2 == 0: のとき continue します。
問題38
リストvalues = [5, -2, 8, -1, 3]に対し、負の数のときは continue してスキップし、0以上だけを足し合わせ、最後に print("合計:", total) してください。
期待される出力:
合計: 16
ヒント: if v < 0: のとき continue します。
問題39
リストnums = [3, 1, 4, 1, 5]をfor n in nums:で調べ、n == 4 になったら print("見つけた") のあと break し、それ以外のときは print(n) するプログラムを作成してください(台本のbreak例に近い順序)。
期待される出力:
3
1
見つけた
ヒント: 先にif n == 4:で分岐し、break前にメッセージを出します。
問題40
for i in range(10): の中で print(i) し、その直後に i == 7 なら break するプログラムを作成してください。
期待される出力:
0
1
2
3
4
5
6
7
ヒント: 7を表示したあとで抜けます。
問題41
二重ループ for i in range(2): と for j in range(3): で、j == 1 のとき内側だけ continue し、それ以外は print(i, j) するプログラムを作成してください。
期待される出力:
0 0
0 2
1 0
1 2
ヒント: continueは一番内側のループの次の繰り返しへ進みます。
問題42
for n in range(10, 25): の中で、nが7の倍数(n % 7 == 0)になったらその数だけ print(n) して break するプログラムを作成してください。
期待される出力:
14
ヒント: 10以上で最初に来る7の倍数は14です。
【基本問題】ループのelse(4問)
問題43
for n in [1, 3, 5]: で n == 0 なら break とし、forにelse:を付けて print("0はなかった") とするプログラムを作成してください。
期待される出力:
0はなかった
ヒント: if-elseとは別物のfor-elseです。
問題44
for n in [2, 4, 6, 8]: で n == 6 なら break とし、else: で print("最後まで") とするプログラムを作成してください。
期待される出力:
ヒント: breakされるとelseは実行されません。出力は空で正解です。
問題45
n = 0からwhile n < 3:でn = n + 1するループにelse:を付け、print("while完了")と表示するプログラムを作成してください(breakは使わないこと)。
期待される出力:
while完了
ヒント: breakされずにwhileの条件が偽になったあと、elseが実行されます。
問題46
n = 0からwhile n < 5:の中で、まずif n == 2:ならbreakし、そうでなければn = n + 1するプログラムを作成し、whileにelse:を付けてprint("else実行")と書いてください。
期待される出力:
ヒント: nが0→1→2となり、2でbreakするためelseは動きません。出力は空で正解です。
【応用問題】(4問)
問題47
台本の例に近い形で、while True: の中でカウンタを使い、1回目はline = "no"、2回目はline = "ok"と代入するプログラムを作成してください。line == "ok"ならprint("終了")してbreakし、そうでなければprint("もう一度")してください。
期待される出力:
もう一度
終了
ヒント: t = 0から始め、毎回t = t + 1で分岐してもよいです。
問題48
while True:で、カウンタで1周目にchoice = "1"、2周目にchoice = "9"を代入するプログラムを作成してください。choice == "9"でprint("終了")してbreak、choice == "1"のときはprint("プレイ")、それ以外はprint("無効")としてください。
期待される出力:
プレイ
終了
ヒント: メニュー画面のイメージです。
問題49
次のプログラムと同じ動きになるコードを書き、実行したとき最後の1行が期待どおりになることを確認してください。
k = 0
for i in range(4):
for j in range(5):
print(i, j)
k = k + 1
print("行数は", k, "行")
期待される出力(最後の1行):
行数は 20 行
ヒント: 二重ループの回数は掛け算です。4×5=20。
問題50
forとrangeを使い、九九の1の段(1×1から1×9まで)を1 x 1 = 1のような形で9行出力するプログラムを作成してください(記号は半角のxでよい)。
期待される出力:
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
ヒント: for k in range(1, 10): とし、左は常に1です。
