0
0

【Progate】Python I を修了した人向け練習問題

Last updated at Posted at 2024-02-19

はじめに

Progateの Python Iを修了した方向けの練習問題集です
お好きなエディタで解いてみてください
おすすめはPaiza.ioです

各問題には入力済みのコードが付いていますので、それをコピーし足りない要素を埋めて解答を完成させてください
☆は難易度です

「Pythonの基礎を学ぼう」より

問題1-1 Print some values ☆

コメントの指示に従ってコードを完成させてください

task1-1.py
# 「Progate最高」と出力してください

# 数値の334を出力してください

# 1000に111を足した値を出力してください

# 「1000 + 111」を文字列として出力してください

出力例

Progate最高
334
1111
1000 + 111

解答例

解答例
task1-1.py
# 「Progate最高」と出力してください
print('Progate最高')
# 数値の334を出力してください
print(334)
# 1000に111を足した値を出力してください
print(1000+111)
# 「1000 + 111」を文字列として出力してください
print('1000+111')

「変数を使ってみよう」より

問題2-1 Exam result ☆☆

あなたは国語、数学、英語の三教科のテストを受け、
国語の点数が40点、数学の点数が70点、英語の点数が80点でした
あなたの合計得点を「○○さんの合計得点」となるように、
平均得点を「○○さんの平均得点」となるように出力してください

コメントの指示に従ってコードを完成させてください

task2-1.py
# 変数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

解答例

解答例
task2-1_answer.py
# 変数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行目も同様に(次郎、太郎)の順番で繋げたものを「次郎 + 太郎 = ○○」となるように出力してください

コメントの指示に従ってコードを完成させてください

task2-2.py
taro_number = '1111'
jiro_number = '200'

# 変数number1にtaro_numberとjiro_numberの順番で連結した文字列を代入してください

# 変数number1を「太郎 + 次郎 = ○○」となるように出力してください


# 変数number2にjiro_numberとtaro_numberの順番で連結した文字列を代入してください

# 変数number2を「次郎 + 太郎 = ○○」となるように出力してください

出力例

太郎 + 次郎 = 1111200
次郎 + 太郎 = 2001111

解答例

解答例
task2-2_answer.py
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)

+αの知識

変数number1number2を使わずに書くこともできます
なぜこのように書けるのか考えてみてください

変数を使わない解答例
task2-2_answer.py
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行目も同様に(次郎、太郎)の順番で繋げたものを「次郎 + 太郎 = ○○」となるように出力してください

コメントの指示に従ってコードを完成させてください

task2-3.py
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

解答例

解答
task2-3_answer.py
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_numbernew_jiro_numberを使わずに書くこともできます
このように書くことが出来る方法を身につけておくと、管理する変数が減って良いことがあります

変数を使わない解答例

str()int()は入れ子構造にすることによってすっきり書くことが出来ます

task2-3_answer.py
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の値を変更して正確に結果が出力されることを確かめてください

task3-1.py
score = 55

# 変数scoreが100と等しい時は「満点です」と出力

# 変数scoreが40点以上、100点未満の時は「○○点です」となるように出力

# 変数scoreが40点未満の時は「○○点で、これは赤点です」となるように出力

出力例

55点です

解答例

解答例

「○○以上、□□未満」といった条件を書くときは、
40 <= score and scorer < 100のように比較演算子の左に小さい数字を持ってくるように書くと、見た目でわかりやすい条件式になります

task3-1_answer.py
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:

もちろんelifelseを使って書くこともできます

elifやelseを使用した解答例
task3-1_answer.py
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の値によって正しい出力がなされることを確認してください

task3-2.py
x = 120

# xを3で割った時の余りが0に等しい場合に「3の倍数」と出力してください

# それ以外の時は「3の倍数ではない」と出力してください

出力例

3の倍数

解答例

解答例
task3-2_answer.py
x = 120

# xを3で割った時の余りが0に等しい場合に「3の倍数」と出力してください
if x % 3 == 0:
    print('3の倍数')
# それ以外の時は「3の倍数ではない」と出力してください
else:
    print('3の倍数ではない')

+αの知識

今回は3で行いましたが、これはどんな数でも倍数かを判定することが出来ます
3の部分を変数化したコードを書いてみてください

3の部分を変数化した解答例

dの値を変更してみて、正確に判定出来ていることを確かめてみてください

task3-2_answer.py
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の値によって正しい出力がなされることを確認してください

task3-3.py
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で残りの数字から判定できます

task3-3_answer.py
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であることを使うとこのようにも書けます

最小公倍数を使用した解答例
task3-3_answer.py
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 ☆☆

ある一桁の数字ABを入力で受け取ります
Aを十の位Bを一の位とする数字を出力してください

入力

A
B

入力例1

3
8

出力例1

38

入力例2

5
3

出力例2

53

解答例

解答例
task4-1_answer.py
A = input()
B = input()

number = int(A)*10 + int(B)
print(number)

+αの知識

入力されたAとBが文字列型であることを利用した解法もあります
なぜこのように書けるか考えてみてください

AとBが文字列型であることを利用した解法
task4-1_answer.py
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になる場合もあります

解答例

解答例
task4-2_answer.py
X = input()

A = int(X) // 10 # 十の位
B = int(X) % 10 # 一の位

number = B*10 + A
print(number)

+αの知識

この問題では二桁でしたが、三桁の場合はどうやって各位の数字を取ってこればいいでしょうか
考えてみましょう

三桁の場合
task4-2_answer.py
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になります

解答例

解答例
task4-3_answer.py
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関数を使った解法
min()
print(min(3, 5)) # 3

print(min(2*3, 10//2)) # 5
task4-3_answer.py
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()関数もあります

max()
print(min(3, 5)) # 5

print(min(2*3, 10//2)) # 6

問題4-4 Sort 1 ☆☆☆

ある数ABを入力で受け取ります
数A、Bを小さい順に並べ各数字の間に半角スペースを入れた文字列を出力してください

入力

A
B

入力例1

6
3

出力例1

3 6

3と6の間に半角スペースが入っています

入力例2

123
450

出力例2

123 450

解答例

解答例
task4-4_answer.py
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
task4-4_answer.py
# 入力と同時に整数型へ変換
A = int(input())
B = int(input())

if A < B:
    print(A, B)
else:
    print(B, A)

問題4-5 Sort 2 ☆☆☆☆

ある数ABCを入力で受け取ります
数A、B、Cを小さい順に並べ各数字の間に半角スペースを入れた文字列を出力してください

入力

A
B
C

入力例1

6
3
4

出力例1

3 4 6

入力例2

123
450
356

出力例2

123 356 450

解答例

解答例
task4-5_answer.py
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)はリストの中身を半角スペース区切りで出力するテクニックです

task4-4_answer.py
A = int(input())
B = int(input())
C = int(input())

sorted_list = sorted([A, B, C])
print(*sorted_list)

コピーして実行し、数値を変更しても正しく並び替えられることを確認してみてください

さいごに

以上でProgateの Python I を修了した方向けの練習問題集は終了です
問題はまた増えるかもしれません

お疲れさまでした

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0