📦 ステップ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