ステップ19:モジュールとインポート

📦 ステップ19: モジュールとインポート

既に作られた便利な機能を使って、プログラミングをもっと楽に!

今まで、関数はすべて自分で作っていました。でも、「平方根を計算する」「ランダムな数を生成する」といった機能を毎回自分で作るのは大変ですよね。実は、多くの便利な機能は既に誰かが作ってくれています

📖 このステップで学ぶこと

・モジュールとは何か

・import、fromの使い方

・mathモジュール(数学関数)

・randomモジュール(ランダム生成)

・datetimeモジュール(日付と時刻)

🎯 1. モジュールって何?

🔰 モジュールとは

モジュールとは、関数や変数をまとめたファイル(.pyファイル)のことです。

例えば、こんな機能がすでに用意されています:

📌 よく使うモジュールの例

モジュール名 できること
math 平方根、三角関数、円周率など数学の計算
random ランダムな数を生成、リストからランダムに選ぶ
datetime 日付や時刻の取得・計算
time 時間計測、処理を一時停止
os ファイルやフォルダの操作

💡 モジュールを使うメリット

・自分で機能を作らなくていい(時間短縮)

・専門家が作った信頼性の高いコードが使える

・「車輪の再発明」をしなくて済む

📘 標準ライブラリとは

Pythonには「標準ライブラリ」という、最初から付いてくるモジュール集があります。追加インストール不要で、すぐに使えます。

math、random、datetimeは全て標準ライブラリに含まれています。

📥 2. importの基本

モジュールを使うには、importで読み込む必要があります。

📝 方法1:モジュール全体をインポート

最も基本的な方法は、モジュール全体をインポートすることです。

📝 import の構文

import モジュール名

使う時:モジュール名.関数名()

完成コード:mathモジュールをインポート

※スマートフォンでは横スクロールできます

# mathモジュールをインポート
import math

# math.sqrt() で平方根を計算
# sqrt = square root(平方根)の略
print(math.sqrt(16))  # 16の平方根 = 4

# math.pi で円周率πを取得
print(math.pi)  # 3.141592...

実行結果

4.0
3.141592653589793

💡 ポイント

import math でmathモジュールを読み込む

・関数を使う時はmath.sqrt()のように「モジュール名.関数名」で呼び出す

・これにより、どのモジュールの関数か明確になる

📝 方法2:別名を付けてインポート

モジュール名が長い場合、asを使って短い名前を付けられます。

📝 import as の構文

import モジュール名 as 別名

使う時:別名.関数名()

完成コード:別名を付けてインポート

※スマートフォンでは横スクロールできます

# math を m という短い名前でインポート
import math as m

# m.sqrt() で呼び出せる
print(m.sqrt(25))  # 25の平方根 = 5
print(m.pi)        # 円周率

実行結果

5.0
3.141592653589793

📝 方法3:特定の関数だけインポート(from)

fromを使うと、モジュールから特定の関数だけをインポートできます。

📝 from import の構文

from モジュール名 import 関数名

使う時:関数名()(モジュール名不要)

完成コード:特定の関数だけインポート

※スマートフォンでは横スクロールできます

# mathモジュールから sqrt と pi だけをインポート
from math import sqrt, pi

# モジュール名なしで直接使える
print(sqrt(36))  # 36の平方根 = 6
print(pi)        # 円周率

実行結果

6.0
3.141592653589793

💡 fromを使うメリット

・毎回モジュール名を書かなくていい

・コードが短くなる

・よく使う関数だけを取り込める

📝 3つの方法の比較

📌 インポート方法の比較

方法 書き方 使い方
import import math math.sqrt(16)
import as import math as m m.sqrt(16)
from import from math import sqrt sqrt(16)

⚠️ 注意:*(アスタリスク)でのインポートは避けよう

from math import *のように、全てをインポートすることもできますが、おすすめしません。

・どの関数がどのモジュールから来たか分かりにくい

・名前の衝突(同じ名前の関数が上書きされる)が起きる可能性がある

🔢 3. mathモジュール – 数学関数

mathモジュールには、数学に関する便利な関数や定数がたくさんあります。

📝 よく使う関数一覧

📌 mathモジュールの主な関数

関数 説明
sqrt(x) 平方根(ルート) sqrt(16) → 4.0
pow(x, y) xのy乗 pow(2, 3) → 8.0
ceil(x) 切り上げ ceil(3.2) → 4
floor(x) 切り捨て floor(3.8) → 3
fabs(x) 絶対値 fabs(-5) → 5.0
pi 円周率π 3.14159…
e 自然対数の底 2.71828…

📝 基本的な数学関数

完成コード:よく使う数学関数

※スマートフォンでは横スクロールできます

import math

# sqrt() - 平方根(ルート)を計算
# 16の平方根 = 4(4 × 4 = 16 だから)
print(f"√16 = {math.sqrt(16)}")

# pow() - べき乗(xのy乗)を計算
# 2の10乗 = 1024(2を10回かける)
print(f"2の10乗 = {math.pow(2, 10)}")

# fabs() - 絶対値(マイナスを取る)
print(f"|-5| = {math.fabs(-5)}")

# ceil() - 切り上げ(次の整数に上げる)
print(f"3.2の切り上げ = {math.ceil(3.2)}")

# floor() - 切り捨て(小数を切り捨てる)
print(f"3.8の切り捨て = {math.floor(3.8)}")

実行結果

√16 = 4.0
2の10乗 = 1024.0
|-5| = 5.0
3.2の切り上げ = 4
3.8の切り捨て = 3

📝 定数(pi と e)

完成コード:数学定数

※スマートフォンでは横スクロールできます

import math

# pi - 円周率(3.14159...)
# 円の計算でよく使う
print(f"円周率π = {math.pi}")

# e - 自然対数の底(2.71828...)
# 指数関数や対数でよく使う
print(f"自然対数の底e = {math.e}")

実行結果

円周率π = 3.141592653589793
自然対数の底e = 2.718281828459045

📝 三角関数

三角関数を使う場合、角度は「ラジアン」で指定します。度をラジアンに変換するにはradians()を使います。

完成コード:三角関数

※スマートフォンでは横スクロールできます

import math

# 90度をラジアンに変換
# radians() - 度をラジアンに変換する関数
angle_deg = 90
angle_rad = math.radians(angle_deg)

print(f"90度 = {angle_rad:.4f}ラジアン")

# sin() - サイン(正弦)
print(f"sin(90°) = {math.sin(angle_rad)}")

# cos() - コサイン(余弦)
print(f"cos(90°) = {math.cos(angle_rad)}")

# tan() - タンジェント(正接)
print(f"tan(45°) = {math.tan(math.radians(45))}")

実行結果

90度 = 1.5708ラジアン
sin(90°) = 1.0
cos(90°) = 6.123233995736766e-17
tan(45°) = 0.9999999999999999

💡 ポイント

・cos(90°)の結果は限りなく0に近い値(浮動小数点の誤差)

・tan(45°)の結果は限りなく1に近い値

・コンピュータの計算には小さな誤差が含まれることがあります

📝 実践例:円の面積と円周を計算

完成コード:円の計算

※スマートフォンでは横スクロールできます

import math

def circle_info(radius):
    """半径から円の面積と円周を計算する関数"""
    # 面積 = π × 半径²
    area = math.pi * radius ** 2
    
    # 円周 = 2 × π × 半径
    circumference = 2 * math.pi * radius
    
    return area, circumference

# 半径5の円を計算
area, circum = circle_info(5)

print(f"半径5の円")
print(f"面積: {area:.2f}")
print(f"円周: {circum:.2f}")

実行結果

半径5の円
面積: 78.54
円周: 31.42

📝 実践例:三角形の面積(ヘロンの公式)

3辺の長さから三角形の面積を計算します。

📌 ヘロンの公式

s = (a + b + c) / 2(半周長)

面積 = √(s × (s-a) × (s-b) × (s-c))

完成コード:ヘロンの公式

※スマートフォンでは横スクロールできます

import math

def triangle_area(a, b, c):
    """3辺の長さから三角形の面積を計算(ヘロンの公式)"""
    # 半周長を計算
    s = (a + b + c) / 2
    
    # ヘロンの公式で面積を計算
    area = math.sqrt(s * (s - a) * (s - b) * (s - c))
    
    return area

# 3辺が 3, 4, 5 の三角形(直角三角形)
area = triangle_area(3, 4, 5)
print(f"3辺が3, 4, 5の三角形")
print(f"面積: {area:.2f}")

実行結果

3辺が3, 4, 5の三角形
面積: 6.00

🎲 4. randomモジュール – ランダム生成

randomモジュールを使うと、ランダムな数の生成やリストからのランダム選択ができます。ゲームやシミュレーションでよく使います。

📝 よく使う関数一覧

📌 randomモジュールの主な関数

関数 説明
randint(a, b) a以上b以下のランダムな整数 randint(1, 6) → 1〜6
random() 0.0以上1.0未満のランダムな小数 random() → 0.xxxxx
uniform(a, b) a以上b以下のランダムな小数 uniform(1.0, 10.0)
choice(リスト) リストから1つ選ぶ choice(["a","b"])
choices(リスト, k=n) リストからn個選ぶ(重複あり) choices(lst, k=3)
sample(リスト, k=n) リストからn個選ぶ(重複なし) sample(lst, k=3)
shuffle(リスト) リストをシャッフル(並び替え) shuffle(lst)

📝 ランダムな整数を生成(randint)

完成コード:サイコロを振る

※スマートフォンでは横スクロールできます

import random

# randint(a, b) - a以上b以下のランダムな整数を生成
# 1から6のランダムな整数 = サイコロ
dice = random.randint(1, 6)
print(f"サイコロの目: {dice}")

# 1から100のランダムな整数
score = random.randint(1, 100)
print(f"ランダムスコア: {score}")

# 何度か実行すると違う値が出る
print("--- 5回サイコロを振る ---")
for i in range(5):
    print(f"{i+1}回目: {random.randint(1, 6)}")

実行結果(例:毎回異なる)

サイコロの目: 4
ランダムスコア: 73
--- 5回サイコロを振る ---
1回目: 2
2回目: 6
3回目: 1
4回目: 4
5回目: 3

📝 ランダムな小数を生成(random、uniform)

完成コード:ランダムな小数

※スマートフォンでは横スクロールできます

import random

# random() - 0.0以上1.0未満のランダムな小数
num = random.random()
print(f"0〜1のランダム: {num:.4f}")

# uniform(a, b) - a以上b以下のランダムな小数
# 気温をシミュレート(20.0〜30.0度)
temp = random.uniform(20.0, 30.0)
print(f"ランダム気温: {temp:.1f}℃")

実行結果(例)

0〜1のランダム: 0.7234
ランダム気温: 25.3℃

📝 リストからランダムに選択(choice、choices、sample)

完成コード:リストからランダムに選ぶ

※スマートフォンでは横スクロールできます

import random

fruits = ["りんご", "バナナ", "オレンジ", "ぶどう", "いちご"]

# choice() - リストから1つだけ選ぶ
chosen = random.choice(fruits)
print(f"今日のフルーツ: {chosen}")

# choices(k=n) - リストからn個選ぶ(重複あり)
# 同じ要素が複数回選ばれることがある
samples_dup = random.choices(fruits, k=3)
print(f"3つ選択(重複あり): {samples_dup}")

# sample(k=n) - リストからn個選ぶ(重複なし)
# 同じ要素は1回しか選ばれない
samples_unique = random.sample(fruits, k=3)
print(f"3つ選択(重複なし): {samples_unique}")

実行結果(例)

今日のフルーツ: バナナ
3つ選択(重複あり): ['オレンジ', 'りんご', 'オレンジ']
3つ選択(重複なし): ['いちご', 'バナナ', 'ぶどう']

💡 choicesとsampleの違い

choices:重複あり(同じ要素が複数回選ばれる可能性)

sample:重複なし(同じ要素は1回だけ)

宝くじなら choices、トランプを配るなら sample を使う

📝 リストをシャッフル(shuffle)

完成コード:カードをシャッフル

※スマートフォンでは横スクロールできます

import random

cards = ["♠A", "♥K", "♦Q", "♣J", "♠10"]
print(f"元の順番: {cards}")

# shuffle() - リストの順番をランダムに入れ替える
# 注意:元のリスト自体が変更される(戻り値はNone)
random.shuffle(cards)
print(f"シャッフル後: {cards}")

実行結果(例)

元の順番: ['♠A', '♥K', '♦Q', '♣J', '♠10']
シャッフル後: ['♣J', '♠A', '♦Q', '♠10', '♥K']

⚠️ shuffle()の注意点

shuffle()は元のリスト自体を変更します(破壊的操作)。

元のリストを残したい場合は、コピーしてからシャッフルしましょう。

cards_copy = cards.copy()

random.shuffle(cards_copy)

📝 重み付きランダム選択(weights)

choices()には確率の重みを付けることができます。

完成コード:おみくじ(確率付き)

※スマートフォンでは横スクロールできます

import random

fortunes = ["大吉", "中吉", "小吉", "吉", "末吉", "凶"]

# weights - 各要素が選ばれる確率の重み
# 大吉5%, 中吉15%, 小吉20%, 吉30%, 末吉20%, 凶10%
weights = [5, 15, 20, 30, 20, 10]

# weights引数で確率を指定
result = random.choices(fortunes, weights=weights, k=1)[0]
print(f"今日の運勢: {result}")

# 10回引いてみる
print("--- 10回おみくじを引く ---")
results = random.choices(fortunes, weights=weights, k=10)
for i, r in enumerate(results, 1):
    print(f"{i}回目: {r}")

実行結果(例)

今日の運勢: 吉
--- 10回おみくじを引く ---
1回目: 小吉
2回目: 吉
3回目: 末吉
4回目: 吉
5回目: 中吉
6回目: 小吉
7回目: 吉
8回目: 末吉
9回目: 吉
10回目: 凶

💡 weightsの仕組み

weightsの値が大きいほど、その要素が選ばれやすくなります。

上の例では「吉」の重みが30で最も大きいので、一番選ばれやすくなっています。

📅 5. datetimeモジュール – 日付と時刻

datetimeモジュールを使うと、日付や時刻を扱えます。現在時刻の取得、日付の計算、フォーマット変換などができます。

📝 よく使うクラス・関数一覧

📌 datetimeモジュールの主な機能

機能 説明
datetime.now() 現在の日時を取得
datetime(年, 月, 日) 特定の日付を作成
strftime() 日付を文字列に変換(フォーマット指定)
timedelta() 日数の差を表す(日付の計算に使う)

📝 現在の日時を取得

完成コード:現在の日時

※スマートフォンでは横スクロールできます

# datetimeモジュールからdatetimeクラスをインポート
from datetime import datetime

# now() - 現在の日時を取得
now = datetime.now()
print(f"現在の日時: {now}")

# 年、月、日、時、分、秒を個別に取得
print(f"年: {now.year}")
print(f"月: {now.month}")
print(f"日: {now.day}")
print(f"時: {now.hour}")
print(f"分: {now.minute}")
print(f"秒: {now.second}")

実行結果(例)

現在の日時: 2024-11-08 14:30:45.123456
年: 2024
月: 11
日: 8
時: 14
分: 30
秒: 45

📝 日付のフォーマット(strftime)

strftime()を使うと、日付を好きな形式の文字列に変換できます。

📌 フォーマット記号

記号 意味
%Y 西暦4桁 2024
%m 月(2桁) 01〜12
%d 日(2桁) 01〜31
%H 時(24時間) 00〜23
%M 00〜59
%S 00〜59
%A 曜日(英語) Monday
%B 月名(英語) November

完成コード:日付のフォーマット

※スマートフォンでは横スクロールできます

from datetime import datetime

now = datetime.now()

# strftime() - 日付を指定した形式の文字列に変換
# 日本語形式
print(now.strftime("%Y年%m月%d日"))

# 日本語形式(時刻付き)
print(now.strftime("%Y年%m月%d日 %H時%M分%S秒"))

# スラッシュ区切り
print(now.strftime("%Y/%m/%d %H:%M:%S"))

# 英語形式
print(now.strftime("%A, %B %d, %Y"))

実行結果(例)

2024年11月08日
2024年11月08日 14時30分45秒
2024/11/08 14:30:45
Friday, November 08, 2024

📝 日付の計算(timedelta)

timedeltaを使うと、日付に対して「○日後」「○日前」などの計算ができます。

完成コード:日付の計算

※スマートフォンでは横スクロールできます

from datetime import datetime, timedelta

today = datetime.now()
print(f"今日: {today.strftime('%Y-%m-%d')}")

# timedelta(days=7) - 7日分の期間を表す
# 日付 + timedelta で未来の日付を計算
week_later = today + timedelta(days=7)
print(f"1週間後: {week_later.strftime('%Y-%m-%d')}")

# 日付 - timedelta で過去の日付を計算
month_ago = today - timedelta(days=30)
print(f"30日前: {month_ago.strftime('%Y-%m-%d')}")

# 時間の計算も可能
hours_later = today + timedelta(hours=3)
print(f"3時間後: {hours_later.strftime('%Y-%m-%d %H:%M')}")

実行結果(例)

今日: 2024-11-08
1週間後: 2024-11-15
30日前: 2024-10-09
3時間後: 2024-11-08 17:30

📝 日付の差を計算

2つの日付の差を計算することもできます。

完成コード:日付の差

※スマートフォンでは横スクロールできます

from datetime import datetime

# datetime(年, 月, 日) - 特定の日付を作成
birthday = datetime(2010, 5, 15)
today = datetime.now()

# 日付 - 日付 = timedelta(日数の差)
diff = today - birthday

print(f"誕生日: {birthday.strftime('%Y年%m月%d日')}")
print(f"今日: {today.strftime('%Y年%m月%d日')}")
print(f"生まれてから{diff.days}日経過しました")
print(f"約{diff.days // 365}年です")

実行結果(例)

誕生日: 2010年05月15日
今日: 2024年11月08日
生まれてから5291日経過しました
約14年です

📝 実践例:年齢計算関数

完成コード:正確な年齢を計算

※スマートフォンでは横スクロールできます

from datetime import datetime

def calculate_age(birth_year, birth_month, birth_day):
    """生年月日から現在の年齢を計算する関数"""
    birthday = datetime(birth_year, birth_month, birth_day)
    today = datetime.now()
    
    # 基本的な年齢(今年 - 生まれた年)
    age = today.year - birthday.year
    
    # 今年の誕生日がまだ来ていなければ1引く
    # (月, 日) のタプルで比較
    if (today.month, today.day) < (birthday.month, birthday.day):
        age -= 1
    
    return age

# 2010年5月15日生まれの人の年齢
age = calculate_age(2010, 5, 15)
print(f"2010年5月15日生まれの人は{age}歳です")

実行結果(例:2024年11月の場合)

2010年5月15日生まれの人は14歳です

📝 実践例:誕生日まであと何日?

完成コード:誕生日カウントダウン

※スマートフォンでは横スクロールできます

from datetime import datetime

def days_until_birthday(month, day):
    """次の誕生日まであと何日かを計算する関数"""
    today = datetime.now()
    
    # 今年の誕生日を作成
    this_year_birthday = datetime(today.year, month, day)
    
    # 今年の誕生日が過ぎていたら来年の誕生日を使う
    if this_year_birthday < today:
        next_birthday = datetime(today.year + 1, month, day)
    else:
        next_birthday = this_year_birthday
    
    # 日数の差を計算
    diff = next_birthday - today
    return diff.days

# 5月15日が誕生日の場合
days_left = days_until_birthday(5, 15)
print(f"誕生日まであと{days_left}日!")

実行結果(例)

誕生日まであと188日!

🛠️ 6. その他の便利な標準ライブラリ

ここまでmath、random、datetimeを学びました。他にも便利なモジュールがあるので、いくつか紹介します。

📝 time – 時間計測・一時停止

完成コード:処理時間の計測

※スマートフォンでは横スクロールできます

import time

print("処理開始...")

# time.time() - 現在時刻を秒数で取得(1970年からの経過秒数)
start = time.time()

# time.sleep(秒) - 指定した秒数だけ処理を停止
# ここでは2秒待つ
time.sleep(2)

end = time.time()

# 処理時間 = 終了時刻 - 開始時刻
print(f"処理時間: {end - start:.2f}秒")

実行結果

処理開始...
処理時間: 2.00秒

📝 string – 文字列定数

完成コード:文字列の定数

※スマートフォンでは横スクロールできます

import string

# アルファベット小文字
print(f"小文字: {string.ascii_lowercase}")

# アルファベット大文字
print(f"大文字: {string.ascii_uppercase}")

# 数字
print(f"数字: {string.digits}")

# 記号
print(f"記号: {string.punctuation}")

実行結果

小文字: abcdefghijklmnopqrstuvwxyz
大文字: ABCDEFGHIJKLMNOPQRSTUVWXYZ
数字: 0123456789
記号: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

📝 実践例:ランダムパスワード生成

stringモジュールとrandomモジュールを組み合わせて、パスワードを生成します。

完成コード:パスワード生成

※スマートフォンでは横スクロールできます

import random
import string

def generate_password(length=8):
    """ランダムなパスワードを生成する関数"""
    # 使用する文字の種類を定義
    # 小文字 + 大文字 + 数字
    characters = string.ascii_lowercase + string.ascii_uppercase + string.digits
    
    # random.choices() でランダムに選んで結合
    password = ''.join(random.choices(characters, k=length))
    
    return password

# 8文字のパスワードを3つ生成
print("=== ランダムパスワード生成 ===")
for i in range(3):
    print(f"パスワード{i+1}: {generate_password(8)}")

# 12文字のパスワードを生成
print(f"長いパスワード: {generate_password(12)}")

実行結果(例)

=== ランダムパスワード生成 ===
パスワード1: aB3dE7fG
パスワード2: Xy9Kp2Mn
パスワード3: 5qRt8LwZ
長いパスワード: Ab3Cd5Ef7Gh9

📝 os – OS情報の取得

完成コード:OS情報

※スマートフォンでは横スクロールできます

import os

# getcwd() - 現在のディレクトリ(作業フォルダ)を取得
print(f"現在のディレクトリ: {os.getcwd()}")

# name - OSの種類を取得
# 'posix'はLinux/Mac、'nt'はWindows
print(f"OS種類: {os.name}")

実行結果(例)

現在のディレクトリ: /home/user/python
OS種類: posix

📝 sys – Pythonシステム情報

完成コード:Python情報

※スマートフォンでは横スクロールできます

import sys

# version - Pythonのバージョン情報
print(f"Pythonバージョン: {sys.version}")

# platform - 実行環境
print(f"プラットフォーム: {sys.platform}")

実行結果(例)

Pythonバージョン: 3.11.0 (main, Oct 24 2022, 18:26:48)
プラットフォーム: darwin

📌 その他の便利なモジュール

モジュール 用途
json JSONデータの読み書き
csv CSVファイルの読み書き
re 正規表現(文字列のパターンマッチング)
collections 便利なデータ構造(Counter、defaultdict など)
itertools イテレータの便利な関数

📝 練習問題(10問)

ここまで学んだことを実際に手を動かして確認しましょう。

問題1:平方根の計算(初級)

📋 問題

mathモジュールを使って、100の平方根を計算しましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

import math

# sqrt() で平方根を計算
result = math.sqrt(100)
print(f"100の平方根: {result}")

実行結果

100の平方根: 10.0

問題2:サイコロを振る(初級)

📋 問題

randomモジュールを使って、1から6のランダムな整数(サイコロ)を生成しましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

import random

# randint(1, 6) で1〜6のランダムな整数
dice = random.randint(1, 6)
print(f"サイコロの目: {dice}")

実行結果(例)

サイコロの目: 4

問題3:現在の日付(初級)

📋 問題

datetimeモジュールを使って、現在の日付を「YYYY年MM月DD日」の形式で表示しましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

from datetime import datetime

now = datetime.now()
# strftime() でフォーマット指定
print(now.strftime("%Y年%m月%d日"))

実行結果(例)

2024年11月08日

問題4:円の面積(中級)

📋 問題

mathモジュールを使って、半径10の円の面積を計算しましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

import math

radius = 10
# 面積 = π × 半径²
area = math.pi * radius ** 2
print(f"半径{radius}の円の面積: {area:.2f}")

実行結果

半径10の円の面積: 314.16

問題5:ランダムな挨拶(中級)

📋 問題

リスト[“おはよう”, “こんにちは”, “こんばんは”]からランダムに1つ選んで表示しましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

import random

greetings = ["おはよう", "こんにちは", "こんばんは"]
# choice() でリストから1つ選ぶ
greeting = random.choice(greetings)
print(greeting)

実行結果(例)

こんにちは

問題6:明日の日付(中級)

📋 問題

datetimeモジュールを使って、明日の日付を「YYYY年MM月DD日」の形式で表示しましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

from datetime import datetime, timedelta

today = datetime.now()
# timedelta(days=1) で1日加算
tomorrow = today + timedelta(days=1)
print(tomorrow.strftime("%Y年%m月%d日"))

実行結果(例)

2024年11月09日

問題7:ランダムパスワード(中級)

📋 問題

アルファベット小文字からランダムに8文字選んでパスワードを生成しましょう。

解答を見る

コード

※スマートフォンでは横スクロールできます

import random
import string

# string.ascii_lowercase で小文字アルファベット
letters = string.ascii_lowercase
# choices() で8文字選んで結合
password = ''.join(random.choices(letters, k=8))
print(f"パスワード: {password}")

実行結果(例)

パスワード: abxkdmqr

問題8:くじ引きシミュレーター(上級)

📋 問題

1等、2等、3等、はずれの4種類のくじを、確率を設定してランダムに引くプログラムを作りましょう。

(1等:5%, 2等:10%, 3等:20%, はずれ:65%)

解答を見る

コード

※スマートフォンでは横スクロールできます

import random

prizes = ["1等", "2等", "3等", "はずれ"]
weights = [5, 10, 20, 65]

# weights引数で確率を指定
result = random.choices(prizes, weights=weights, k=1)[0]
print(f"結果: {result}")

実行結果(例)

結果: 3等

問題9:三角形の面積(上級)

📋 問題

ヘロンの公式を使って、3辺が5, 6, 7の三角形の面積を計算しましょう。

s = (a+b+c)/2, 面積 = √(s(s-a)(s-b)(s-c))

解答を見る

コード

※スマートフォンでは横スクロールできます

import math

a, b, c = 5, 6, 7

# 半周長
s = (a + b + c) / 2

# ヘロンの公式
area = math.sqrt(s * (s - a) * (s - b) * (s - c))

print(f"3辺が{a}, {b}, {c}の三角形")
print(f"面積: {area:.2f}")

実行結果

3辺が5, 6, 7の三角形
面積: 14.70

問題10:誕生日まであと何日?(上級)

📋 問題

次の誕生日(12月25日)まであと何日かを計算するプログラムを作りましょう。

今年の誕生日が過ぎていたら、来年の誕生日までの日数を表示します。

解答を見る

コード

※スマートフォンでは横スクロールできます

from datetime import datetime

month = 12
day = 25

today = datetime.now()
this_year_birthday = datetime(today.year, month, day)

# 今年の誕生日が過ぎていたら来年
if this_year_birthday < today:
    next_birthday = datetime(today.year + 1, month, day)
else:
    next_birthday = this_year_birthday

days_left = (next_birthday - today).days
print(f"12月25日まであと{days_left}日!")

実行結果(例)

12月25日まであと47日!

❓ よくある質問

Q1: importとfromはどう使い分ける?

・モジュール全体を使うならimport

・特定の関数だけ使うならfrom

どちらでも動作は同じなので、好みで選んでOKです。

ただし、チームで開発する場合はルールを統一しましょう。

Q2: 標準ライブラリって何?

Pythonに最初から付いてくるモジュールのことです。

追加インストール不要で、すぐに使えます。

math、random、datetime、os、sys などがあります。

Q3: どんなモジュールがあるか知るには?

Python公式ドキュメントの「標準ライブラリ」ページを見るのがおすすめです。

たくさんの便利なモジュールが紹介されています。

URL: https://docs.python.org/ja/3/library/

Q4: 外部ライブラリって何?

標準ライブラリ以外の、他の人が作ったモジュールです。

pipというツールでインストールして使います。

有名な外部ライブラリ:

numpy:数値計算

pandas:データ分析

requests:HTTP通信

matplotlib:グラフ作成

Q5: 自分でモジュールを作れる?

はい!Pythonファイル(.py)を作れば、それがモジュールになります。

他のファイルからimportして使えます。

例えば、my_utils.pyというファイルを作れば、

import my_utilsで読み込めます。

📌 インポートの使い分けまとめ

状況 おすすめの方法
モジュールの関数を複数使う import math
特定の関数だけ使う from math import sqrt
モジュール名が長い import datetime as dt
どのモジュールか明確にしたい import math(math.sqrt()で呼ぶ)

🎉 ステップ19のまとめ

✅ このステップで学んだこと

モジュール:関数や変数をまとめたファイル

import:モジュール全体を読み込む

from import:特定の関数だけ読み込む

math:平方根、三角関数、円周率などの数学関数

random:ランダムな数の生成、リストからランダム選択

datetime:日付・時刻の取得、計算、フォーマット

✓ 標準ライブラリを活用してコードを短く効率的に!

📌 このステップで学んだ主な関数

モジュール 主な関数・定数
math sqrt, pow, ceil, floor, pi, sin, cos
random randint, random, choice, choices, sample, shuffle
datetime now, strftime, timedelta
time time, sleep
string ascii_lowercase, digits, punctuation

💪 次のステップへ

モジュールとインポートをマスターしました!

これで、Pythonに標準で用意されている便利な機能を使えるようになりました。

次のステップでは、ファイルの読み書きを学びます。

テキストファイルやCSVファイルを扱えるようになりますよ!


📝

学習メモ

Pythonプログラミング基礎 - Step 19

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE