メインコンテンツへスキップ

Python基礎ハンズオン

·
目次

はじめに
#

Pythonの基本文法を習得した後は、より実践的なプログラミング技術を身につけることが重要です。アルゴリズムの理解、複雑な条件分岐、ループの応用など、実際の開発現場で使われる技術を段階的に学習できます。

以下に、Python基礎レベルの実践的な練習問題をハンズオン形式で説明します。

練習問題
#

九九の段を出力
#

1×1 ~ 9×9 の九九の段を出力するプログラムを書いてください。
各行の末尾に「○の段です」と表示しましょう。

1 2 3 4 5 6 7 8 9 「1」の段です
2 4 6 8 10 12 14 16 18 「2」の段です
...
9 18 27 36 45 54 63 72 81 「9」の段です

for ループを2つ使う(二重ループ)ことで、九九のような表を作成できます。内側のループが列、外側のループが行を処理します。

for i in range(1, 10):
    for j in range(1, 10):
        print(i * j, end=" ")
    print("「{}」の段です".format(i))

3の倍数ならfoo、そうでなければnoo
#

ユーザーから1つ数字を入力し、それが「3の倍数」であれば foo、そうでなければ noo と出力してください。

数字を入力してください: 9
foo

% 演算子は、割り算の余りを求めます。num % 3 == 0 のように、3で割った余りが0になるかどうかで、3の倍数を判定できます。

num = int(input("数字を入力してください: "))

if num % 3 == 0:
    print("foo")
else:
    print("noo")

2つの数字の和を計算しよう
#

ユーザーから2つの数字を受け取り、その和を出力してください。

1つ目の数字: 3
2つ目の数字: 5
合計: 8

input() で受け取った文字列を int() で整数に変換してから、足し算を行います。

x = int(input("1つ目の数字: "))
y = int(input("2つ目の数字: "))

print("合計:", x + y)

値を入れ替えてみよう
#

ユーザーから数字を2つ入力し、入れ替えて表示しましょう。
出力の書式は print("i =", i, ", j =", j) を必ず使ってください。

i = 1 , j = 2
i = 2 , j = 1

Pythonでは i, j = j, i のように、1行で複数の変数の値を簡単に入れ替えることができます。

i = input("iを入力: ")
j = input("jを入力: ")

print("i =", i, ", j =", j)
i, j = j, i
print("i =", i, ", j =", j)

三角形を描いてみよう
#

ユーザーから高さを入力し、その高さの直角三角形を「*」で描いてください。

# 出力例(高さ=5)
*
**
***
****
*****

文字列に * 演算子を使うと、その文字列を指定した回数だけ繰り返します。"*" * 5***** となります。

h = int(input("高さを入力してください: "))

for i in range(1, h+1):
    print("*" * i)

素数の和を求めよう
#

20000 以下の素数をすべて足し算してください。

21171191

素数とは、1とその数自身以外に約数を持たない自然数のことです。ある数 i が素数かどうかは、2から i の平方根までの数で割り切れるかどうかで判定できます。

sum_num = 0
for i in range(2, 20001):
    for j in range(2, int(i ** 0.5) + 1):
        if i % j == 0:
            break
    else:
        sum_num += i

print(sum_num)

数字を連続で入力してカウントしよう
#

ユーザーから10回数を入力し、同じ数が連続で入力された回数をカウントしてください。
10回連続なら perfect!! と表示しましょう。

数字を入力してください: 1
連続なし
数字を入力してください: 1
2回連続
数字を入力してください: 1
3回連続
...

1つ前の入力値を prev のような変数に保存しておくことで、現在の入力値と比較して連続しているかどうかを判定できます。

prev = None
count = 1

for i in range(10):
    num = int(input("数字を入力してください: "))
    if num == prev:
        count += 1
        print("{}回連続".format(count))
        if count == 10:
            print("perfect!!")
    else:
        count = 1
        print("連続なし")
    prev = num

数字の中に「5」があるか探そう
#

入力された数字を1桁ずつ調べて「5」が含まれるかを出力してください。

12345
5じゃないです
5じゃないです
5じゃないです
5じゃないです
5です!!

input() で受け取った値は文字列なので、for ループで1文字ずつ取り出して調べることができます。

x = input("数字を入力してください: ")

for i in x:
    if i == "5":
        print("5です!!")
    else:
        print("5じゃないです")

足し算と引き算をしてみよう
#

2つの数字を入力し、足し算と引き算の結果を出力してください。

1つ目の数字: 4
2つ目の数字: 2
足し算の合計 6
引き算の合計 2

input() で受け取った文字列を int() で整数に変換し、+- の演算子を使って計算します。

x = int(input("1つ目の数字: "))
y = int(input("2つ目の数字: "))

print("足し算の合計", x + y)
print("引き算の合計", x - y)

九九の表を作ろう
#

九九を「式と答え」をセットで表示してください。

1 x 1 = 1
1 x 2 = 2
...
9 x 9 = 81

二重の for ループを使い、print() 関数で式と答えを整形して出力します。

for i in range(1, 10):
    for j in range(1, 10):
        print(i, "x", j, "=", i * j)

正方形を描こう
#

入力された大きさの正方形を「*」で描きましょう。

# 5の場合
*****
*   *
*   *
*   *
*****

for ループの中で if 文を使い、最初の行と最後の行、それ以外の行で処理を分けることで、中が空洞の図形を描くことができます。

h = int(input("数字を入力してください: "))

for i in range(h):
    if i == 0 or i == h - 1:
        print("*" * h)
    else:
        print("*" + " " * (h - 2) + "*")

フィボナッチ数列を出力しよう
#

10000未満のフィボナッチ数列を出力してください。

0 1 1 2 3 5 8 ... 6765

フィボナッチ数列は、前の2つの項の和が次の項になる数列です。a, b = b, a + b のように値を更新していくことで、数列を生成できます。

a, b = 0, 1
while a < 10000:
    print(a, end=" ")
    a, b = b, a + b
print()

2つの素数判定
#

ユーザーから入力した2つの数字が両方とも素数なら True、そうでなければ False と出力してください。

1つ目の数字を入力してください: 7
2つ目の数字を入力してください: 11
True

素数判定のロジックを is_prime という関数にまとめることで、同じ処理を何度も書く必要がなくなり、コードが読みやすくなります。

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

num1 = int(input("1つ目の数字を入力してください: "))
num2 = int(input("2つ目の数字を入力してください: "))

print(is_prime(num1) and is_prime(num2))

バブルソートに挑戦!
#

整数リストを引数に取り、バブルソートで昇順に並べ替える関数を作りましょう。
関数にリストを渡して、ソート前とソート後を表示してください。

[5, 3, 8, 1, 9] => [1, 3, 5, 8, 9]

バブルソートは、隣り合う要素を比較して入れ替えながら、リスト全体を整列させるアルゴリズムです。

def bubble_sort(data):
    for i in range(len(data) - 1):
        for j in range(len(data) - i - 1):
            if data[j] > data[j + 1]:
                data[j], data[j + 1] = data[j + 1], data[j]
    return data

data = [5, 3, 8, 1, 9]
print(f"{data} => {bubble_sort(data.copy())}")