はじめに
Progateの Python Iを修了した方向けの練習問題集です
お好きなエディタで解いてみてください
おすすめはPaiza.ioです
各問題には入力済みのコードが付いていますので、それをコピーし足りない要素を埋めて解答を完成させてください
☆は難易度です
「Pythonの基礎を学ぼう」より
問題1-1 Print some values ☆
コメントの指示に従ってコードを完成させてください
# 「Progate最高」と出力してください
# 数値の334を出力してください
# 1000に111を足した値を出力してください
# 「1000 + 111」を文字列として出力してください
出力例
Progate最高
334
1111
1000 + 111
解答例
解答例
# 「Progate最高」と出力してください
print('Progate最高')
# 数値の334を出力してください
print(334)
# 1000に111を足した値を出力してください
print(1000+111)
# 「1000 + 111」を文字列として出力してください
print('1000+111')
「変数を使ってみよう」より
問題2-1 Exam result ☆☆
あなたは国語、数学、英語の三教科のテストを受け、
国語の点数が40点、数学の点数が70点、英語の点数が80点でした
あなたの合計得点を「○○さんの合計得点」となるように、
平均得点を「○○さんの平均得点」となるように出力してください
コメントの指示に従ってコードを完成させてください
# 変数nameに好きな文字列を代入してください
# 変数japanese_scoreに40を代入してください
# 変数math_scoreに70を代入してください
# 変数english_scoreに80の値を代入してください
# 変数total_scoreにjapanese_scoreとmath_scoreとenglish_scoreを足した値を代入してください
# 変数nameを使用し、「○○さんの合計得点」となるように出力してください
# 変数total_scoreを出力してください
# 変数nameを使用し、「○○さんの平均得点」となるように出力してください
# 三教科の平均得点を出力してください
出力例
太郎さんの合計得点
190
太郎さんの平均得点
63.333333333333336
解答例
解答例
# 変数nameに好きな文字列を代入してください
name = '太郎'
# 変数japanese_scoreに40を代入してください
japanese_score = 40
# 変数math_scoreに70を代入してください
math_score = 70
# 変数english_scoreに80の値を代入してください
english_score = 80
# 変数total_scoreにjapanese_scoreとmath_scoreとenglish_scoreを足した値を代入してください
total_score = japanese_score + math_score + english_score
# 変数nameを使用し、「○○さんの合計得点」となるように出力してください
print(name + 'さんの合計得点')
# 変数total_scoreを出力してください
print(total_score)
# 変数nameを使用し、「○○さんの平均得点」となるように出力してください
print(name + 'さんの平均得点')
# 三教科の平均得点を出力してください
print(total_score / 3)
+αの知識
それぞれの点数の変数に代入する値を変更して、
合計得点と平均得点が変わるのを確かめてみてください
問題2-2 Taro+Jiro ☆☆
太郎君と次郎君はそれぞれ数字が書かれた紙を持っています
二人はそれぞれ持っている紙を横に繋げ数字を完成させようとしています
1行目に(太郎、次郎)の順番で繋げたものを「太郎 + 次郎 = ○○」となるように出力してください
2行目も同様に(次郎、太郎)の順番で繋げたものを「次郎 + 太郎 = ○○」となるように出力してください
コメントの指示に従ってコードを完成させてください
taro_number = '1111'
jiro_number = '200'
# 変数number1にtaro_numberとjiro_numberの順番で連結した文字列を代入してください
# 変数number1を「太郎 + 次郎 = ○○」となるように出力してください
# 変数number2にjiro_numberとtaro_numberの順番で連結した文字列を代入してください
# 変数number2を「次郎 + 太郎 = ○○」となるように出力してください
出力例
太郎 + 次郎 = 1111200
次郎 + 太郎 = 2001111
解答例
解答例
taro_number = '1111'
jiro_number = '200'
# 変数number1にtaro_numberとjiro_numberの順番で連結した文字列を代入してください
number1 = taro_number + jiro_number
# 変数number1を「太郎 + 次郎 = ○○」となるように出力してください
print('太郎 + 次郎 = ' + number1)
# 変数number2にjiro_numberとtaro_numberの順番で連結した文字列を代入してください
number2 = jiro_number + taro_number
# 変数number2を「次郎 + 太郎 = ○○」となるように出力してください
print('次郎 + 太郎 = ' + number2)
+αの知識
変数number1
やnumber2
を使わずに書くこともできます
なぜこのように書けるのか考えてみてください
変数を使わない解答例
taro_number = '1111'
jiro_number = '200'
print('太郎 + 次郎 = ' + taro_number + jiro_number)
print('次郎 + 太郎 = ' + jiro_number + taro_number)
問題2-3 Taro+Jiro 2 ☆☆☆
太郎君と次郎君はそれぞれ数字が書かれた紙を持っています
二人はそれぞれ持っている紙を横に繋げ数字を完成させようとしています
ただし、太郎君は持っている数字の3倍の数字を、次郎君は持っている数字に240を足した数字を使います
1行目に(太郎、次郎)の順番で繋げたものを「太郎 + 次郎 = ○○」となるように出力してください
2行目も同様に(次郎、太郎)の順番で繋げたものを「次郎 + 太郎 = ○○」となるように出力してください
コメントの指示に従ってコードを完成させてください
taro_number = '1111'
jiro_number = '200'
# 変数new_taro_numberにtaro_numberを3倍した数字を代入して下さい
# 変数taro_numberをnew_taro_numberの値を文字列型に変換した文字列で更新してください
# 変数new_jiro_numberにjiro_numberに240を足した数字を代入して下さい
# 変数jiro_numberをnew_jiro_numberの値を文字列型に変換した文字列で更新してください
number1 = taro_number + jiro_number
print('太郎 + 次郎 = ' + number1)
number2 = jiro_number + taro_number
print('次郎 + 太郎 = ' + number2)
出力例
太郎 + 次郎 = 3333440
次郎 + 太郎 = 4403333
解答例
解答
taro_number = '1111'
jiro_number = '200'
# 変数new_taro_numberにtaro_numberを3倍した数字を代入して下さい
new_taro_number = int(taro_number) * 3
# 変数taro_numberをnew_taro_numberの値を文字列型に変換した文字列で更新してください
taro_number = str(new_taro_number)
# 変数new_jiro_numberにjiro_numberに240を足した数字を代入して下さい
new_jiro_number = int(jiro_number) + 240
# 変数jiro_numberをnew_jiro_numberの値を文字列型に変換した文字列で更新してください
jiro_number = str(new_jiro_number)
number1 = taro_number + jiro_number
print('太郎 + 次郎 = ' + number1)
number2 = jiro_number + taro_number
print('次郎 + 太郎 = ' + number2)
+αの知識
変数new_taro_number
やnew_jiro_number
を使わずに書くこともできます
このように書くことが出来る方法を身につけておくと、管理する変数が減って良いことがあります
変数を使わない解答例
str()
やint()
は入れ子構造にすることによってすっきり書くことが出来ます
taro_number = '1111'
jiro_number = '200'
taro_number = str(int(taro_number)*3)
jiro_number = str(int(jiro_number)+240)
print('太郎 + 次郎 = ' + taro_number + jiro_number)
print('次郎 + 太郎 = ' + jiro_number + taro_number)
「真偽値と条件分岐」より
問題3-1 Teacher's comment ☆☆
あなたはテストを受けました
以下の分岐で結果を出力してください
- 点数が100点の時:「満点です」と出力
- 点数が40点以上、100点未満の時:「○○点です」と出力
- 点数が40点未満の時:「○○点で、これは赤点です」と出力
コメントの指示に従ってコードを完成させ、score
の値を変更して正確に結果が出力されることを確かめてください
score = 55
# 変数scoreが100と等しい時は「満点です」と出力
# 変数scoreが40点以上、100点未満の時は「○○点です」となるように出力
# 変数scoreが40点未満の時は「○○点で、これは赤点です」となるように出力
出力例
55点です
解答例
解答例
「○○以上、□□未満」といった条件を書くときは、
40 <= score and scorer < 100
のように比較演算子の左に小さい数字を持ってくるように書くと、見た目でわかりやすい条件式になります
score = 55
# 変数scoreが100と等しい時は「満点です」と出力
if score == 100:
print('満点です')
# 変数scoreが40点以上、100点未満の時は「○○点です」となるように出力
if 40 <= score and score < 100:
print(str(score) + '点です')
# 変数scoreが40点未満の時は「○○点で、これは赤点です」となるように出力
if score < 40:
print(str(score) + '点で、これは赤点です')
+αの知識
「○○以上、□□未満」といった条件は実はこう書くこともできます
「○○以上、□□未満」を書くときは...
こっちの方が感覚的ですよね
if 40 <= score and score < 100:
↓
if 40 <= score < 100:
もちろんelif
やelse
を使って書くこともできます
elifやelseを使用した解答例
score = 55
if score == 100:
print('満点です')
elif 40 <= score:
print(str(score) + '点です')
else:
print(str(score) + '点で、これは赤点です')
問題3-2 Multiple of three ☆☆
ある数xが与えられます
xを3で割った時の余りが0の時は「3の倍数」、それ以外の時は「3の倍数ではない」と出力してください
コメントの指示に従ってコードを完成させ、xの値によって正しい出力がなされることを確認してください
x = 120
# xを3で割った時の余りが0に等しい場合に「3の倍数」と出力してください
# それ以外の時は「3の倍数ではない」と出力してください
出力例
3の倍数
解答例
解答例
x = 120
# xを3で割った時の余りが0に等しい場合に「3の倍数」と出力してください
if x % 3 == 0:
print('3の倍数')
# それ以外の時は「3の倍数ではない」と出力してください
else:
print('3の倍数ではない')
+αの知識
今回は3で行いましたが、これはどんな数でも倍数かを判定することが出来ます
3の部分を変数化したコードを書いてみてください
3の部分を変数化した解答例
dの値を変更してみて、正確に判定出来ていることを確かめてみてください
x = 120
d = 3
if x % d == 0: # dの倍数
print(str(d)+'の倍数')
else:
print(str(d)+'の倍数ではない')
問題3-3 FizzBuzz ☆☆☆
ある数xが与えられます
xが、3でも5でも割り切れる時は「3と5の倍数」、3だけで割り切れる時は「3だけの倍数」、5だけで割り切れる時は「5だけの倍数」、それ以外の時は「3と5の倍数ではない」と出力してください
コメントの指示に従ってコードを完成させ、xの値によって正しい出力がなされることを確認してください
x = 120
# xが3でも5でも割り切れる時は「3と5の倍数」と出力してください
# xが3だけで割り切れる時は「3だけの倍数」と出力してください
# xが5だけで割り切れる時は「5だけの倍数」と出力してください
# それ以外の時は「3と5の倍数ではない」と出力してください
出力例
3と5の倍数
解答例
解答例
この問題では条件を確かめる順番が大事です
最初にif x % 3 == 0:
としてしまうと、「3だけの倍数」の数だけでなく「3と5の倍数」の数も条件に含まれてしまうことに注意してください
最初にif x % 3 == 0 and x % 5 == 0:
とすることで、elif
で残りの数字から判定できます
x = 120
# xが3でも5でも割り切れる時は「3と5の倍数」と出力してください
if x % 3 == 0 and x % 5 == 0:
print('3と5の倍数')
# xが3だけで割り切れる時は「3だけの倍数」と出力してください
elif x % 3 == 0:
print('3だけの倍数')
# xが5だけで割り切れる時は「5だけの倍数」と出力してください
elif x % 5 == 0:
print('5だけの倍数')
# それ以外の時は「3と5の倍数ではない」と出力してください
else:
print('3と5の倍数ではない')
+αの知識
この問題は一般にFizzBuzz問題と言われている問題です
3と5の最小公倍数が15であることを使うとこのようにも書けます
最小公倍数を使用した解答例
x = 120
if x % 15 == 0:
print('3と5の倍数')
elif x % 3 == 0:
print('3だけの倍数')
elif x % 5 == 0:
print('5だけの倍数')
else:
print('3と5の倍数ではない')
応用問題
ここからはコメント付きのコードはありません
プログラミングを始めたばかりの方には難しい内容となっております
今すぐできなくても問題はありませんので、しばらく勉強した後にまた解きに戻ってきてみてください
問題4-1 Make number ☆☆
ある一桁の数字AとBを入力で受け取ります
Aを十の位、Bを一の位とする数字を出力してください
入力
A
B
入力例1
3
8
出力例1
38
入力例2
5
3
出力例2
53
解答例
解答例
A = input()
B = input()
number = int(A)*10 + int(B)
print(number)
+αの知識
入力されたAとBが文字列型であることを利用した解法もあります
なぜこのように書けるか考えてみてください
AとBが文字列型であることを利用した解法
A = input()
B = input()
number = int(A + B)
print(number)
問題4-2 Swap number ☆☆
ある二桁の数字Xを入力で受け取ります
Xの十の位と一の位を入れ替えた数字を出力してください
演算子/
は割り算を行いますが、小数点以下も計算します
整数部分だけを使いたい時は演算子//
を使用します
x = 9 / 2
print(x) # 4.5
x = 9 // 2
print(x) # 4
演算子//
と%
を使用することで二桁の数字の十の位と一の位を取得できます
x = 35
a = x // 10 # 十の位
print(a) # 3
b = x % 10 # 一の位
print(b) # 5
入力
X
入力例1
79
出力例1
97
入力例2
30
出力例2
3
十の位が0になる場合もあります
解答例
解答例
X = input()
A = int(X) // 10 # 十の位
B = int(X) % 10 # 一の位
number = B*10 + A
print(number)
+αの知識
この問題では二桁でしたが、三桁の場合はどうやって各位の数字を取ってこればいいでしょうか
考えてみましょう
三桁の場合
X = input()
A = int(X) // 100
B = (int(X) % 100) // 10 # 下二桁にしてから10で割る
C = int(X) % 10
number = C * 100 + B*10 + A
print(number)
問題4-3 Digit multiply ☆☆☆
ある二桁の数字Xを入力で受け取ります
Xの各桁の数字を2倍にした数字を出力してください
ただし、各桁の数字を2倍した結果が一桁に収まらない場合はその桁を9にしてください
入力
X
入力例1
24
出力例1
48
入力例2
36
出力例2
69
一の位の6を2倍すると12になり、9を超えるので答えの一の位は9になります
解答例
解答例
X = input()
A = int(X) // 10
A *= 2
if A > 9:
A = 9
B = int(X) % 10
B *= 2
if B > 9:
B = 9
number = A*10 + B
print(number)
+αの知識
二つの数字を比べて小さい方を返すmin()
関数を使うとif文を使わなくても書けます
min関数を使った解法
print(min(3, 5)) # 3
print(min(2*3, 10//2)) # 5
X = input()
A = int(X) // 10
A = min(A*2, 9)
B = int(X) % 10
B = min(B*2, 9)
number = A*10 + B
print(number)
もちろん大きい方を返すmax()
関数もあります
print(min(3, 5)) # 5
print(min(2*3, 10//2)) # 6
問題4-4 Sort 1 ☆☆☆
ある数A、Bを入力で受け取ります
数A、Bを小さい順に並べ、各数字の間に半角スペースを入れた文字列を出力してください
入力
A
B
入力例1
6
3
出力例1
3 6
3と6の間に半角スペースが入っています
入力例2
123
450
出力例2
123 450
解答例
解答例
A = input()
B = input()
if int(A) < int(B):
print(A + ' ' + B)
else:
print(B + ' ' + A)
+αの知識
変数の値を半角スペース区切りで出力したい時はこう書くこともできます
変数の値を半角スペース区切りで出力したい時
print(A, B)
と書くことで変数の値を半角スペース区切りで出力できます
A = 120
B = '520'
# どちらも「120 520」と出力される
print(str(A) + ' ' + B)
print(A, B) # 型が違っても問題なく並べられます
# 3個以上でもできます
C = 55
print(A, B, C) # 120 520 55
# 入力と同時に整数型へ変換
A = int(input())
B = int(input())
if A < B:
print(A, B)
else:
print(B, A)
問題4-5 Sort 2 ☆☆☆☆
ある数A、B、Cを入力で受け取ります
数A、B、Cを小さい順に並べ、各数字の間に半角スペースを入れた文字列を出力してください
入力
A
B
C
入力例1
6
3
4
出力例1
3 4 6
入力例2
123
450
356
出力例2
123 356 450
解答例
解答例
A = int(input())
B = int(input())
C = int(input())
# Aが一番小さい時
if A <= B and A <= C:
if B < C:
print(A, B, C)
else:
print(A, C, B)
# Bが一番小さい時
elif B <= A and B <= C:
if A < C:
print(B, A, C)
else:
print(B, C, A)
# Cが一番小さい時
else:
if A < B:
print(C, A, B)
else:
print(C, B, A)
+αの知識
数字の数が2つから3つになっただけで処理がとても増えました
これが4つなら?10個なら?1000個なら?どんな処理を書けばいいでしょうか
このような、数字の並びを小さい順に並び替える処理をソートアルゴリズムと言います
アルゴリズムにも種類があり、並び替える方法によって並び替えにかかる時間が全然違い、
優れたアルゴリズムはよりたくさんの数の並びをより短い時間で並び替えることが出来ます
アルゴリズムの種類ごとにどうやって並び替えるかを視覚的に鑑賞できる動画がありますので、興味があったら見てみてください
ソートアルゴリズムを使った解法(学んでいない内容が含まれています)
ProgateのPython IIで学ぶ「リスト」を使用しています
sorted_list = sorted([A, B, C])
でA,B,Cをリストに格納し、sorted()
で小さい順に並び替えています
print(*sorted_list)
はリストの中身を半角スペース区切りで出力するテクニックです
A = int(input())
B = int(input())
C = int(input())
sorted_list = sorted([A, B, C])
print(*sorted_list)
コピーして実行し、数値を変更しても正しく並び替えられることを確認してみてください
さいごに
以上でProgateの Python I を修了した方向けの練習問題集は終了です
問題はまた増えるかもしれません
お疲れさまでした