print と 型
# 文字列
print("こんにちは")
# 数字(整数・小数)
print(10)
print(3.14)
# ブール値
print(True, False)
# 型の確認
print(type("abc"), type(10), type(3.14), type(True))
詳しい行単位解説(クリックで展開)
行ごとの解説
print("こんにちは"):画面に文字列("こんにちは")を表示します。文字列はシングルかダブルクオートで囲みます。print(10):整数 10 を表示します。数値はクォートで囲みません。print(3.14):浮動小数点数(小数)を表示します。print(True, False):複数の値をカンマで区切って渡すとスペースで区切って表示されます。ここではブール値を表示。print(type(...)):type()はオブジェクトの型を返し、デバッグや確認に使います。
よくある間違い: 文字列と数値を混ぜて演算しようとするとエラーになります(例: "10" + 5)。数値に変換するには int("10") を使います。
変数と代入
# 代入 x = 10 name = "Toma" pi = 3.14159 flag = True print(x, name, pi, flag) # 複数代入 a, b = 1, 2 print(a, b) # 値の更新 x = x + 5 # 古典的 x += 5 # 便利な短縮形 print(x)
詳しい行単位解説(クリックで展開)
行ごとの解説
x = 10:変数xに整数 10 を代入。左が変数名、右が値です。name = "Toma":文字列を代入。pi = 3.14159:浮動小数点を代入。flag = True:ブール値を代入。print(x, name, ...):複数の変数を一度に表示(カンマで区切ると自動でスペースが入る)。a, b = 1, 2:複数代入。右側の値が左側の変数へ順に代入されます。x = x + 5:現在のxに 5 を足して再代入。x += 5:上の操作の省略形(インプレース演算子)。
ポイント: 変数名は意味が分かるものにしましょう。数字で始めない、予約語を避ける、といった基本ルールを守ると読みやすくなります。
入力と出力
name = input("名前を入力してください: ")
age_str = input("年齢を入力してください: ")
# 入力は常に文字列なので数値に変換する
age = int(age_str)
print(f"こんにちは、{name} さん。{age}歳ですね。")
詳しい行単位解説(クリックで展開)
行ごとの解説
name = input("..."):プロンプトを出してユーザーの入力を受け取り、文字列としてnameに保存します。age_str = input("..."):同様に入力を文字列として受け取ります。注意:input()は常に文字列を返します。age = int(age_str):文字列を整数に変換します。ユーザーが数値以外を入力すると例外(ValueError)が発生するので通常は try/except で保護します。print(f"..."):f-string を使って変数を文字列内に埋め込み、整形して表示します。
実務上の注意:ユーザー入力は信頼できないデータです。必ず検証とエラーハンドリングを行ってください。
演算・比較・論理
# 四則演算 print(5 + 3, 5 - 3, 5 * 3, 5 / 2, 5 // 2, 5 % 2, 2 ** 3) # 比較 print(5 > 3, 5 == 4, 5 != 4) # 論理演算 print(True and False, True or False, not True)
詳しい行単位解説(クリックで展開)
行ごとの解説
+,-,*:加算・減算・乗算。/:除算。結果は常に浮動小数点(2/1 -> 2.0)。//:整数除算(切り捨て)。%:剰余(余り)。**:べき乗。- 比較演算(
==など)は真偽値を返し、論理演算(and,or,not)で複合条件を扱います。
条件分岐とループ
# if / elif / else
x = 10
if x > 0:
print("正の数")
elif x == 0:
print("ゼロ")
else:
print("負の数")
詳しい行単位解説(クリックで展開)
行ごとの解説
x = 10:変数に値を代入。if x > 0::条件が True のときに次のインデント行を実行します。条件にはコロンが必要です。- Python ではインデント(スペース)でブロックを表します。一般にスペース4つを推奨します。
elifは "それ以外でさらに条件"、elseはどれにも当てはまらない場合に実行されます。
# for ループ
for i in range(5):
print(i) # 0 1 2 3 4
# while ループ
n = 5
while n > 0:
print(n)
n -= 1
詳しい行単位解説(クリックで展開)
for i in range(5)::0 から 4 まで順に i に代入してループします。while n > 0::条件が True の間ループが続きます。条件を変化させないと無限ループになります。n -= 1:n = n - 1の短縮形。ループを終わらせるために使います。
関数(詳細)
def greet(name):
"""引数 name を受け取り挨拶文を返す関数"""
return f"こんにちは、{name}さん!"
print(greet("Toma"))
# デフォルト引数、キーワード引数
def add(a, b=10):
return a + b
print(add(5), add(5, b=2))
詳しい行単位解説(クリックで展開)
行ごとの解説
def greet(name)::関数の定義を開始します。defの後に関数名と引数を記述し、最後にコロンを置きます。"""...""":docstring(説明文)。関数の目的や引数、戻り値を記述しておくと後で便利です。return ...:呼び出し元に値を返します。ここでは文字列を返しています。print(greet("Toma")):関数を呼び出し、返り値を表示します。def add(a, b=10)::引数bにデフォルト値を与えた例。呼び出し時に省略可能です。- キーワード引数(
add(5, b=2))で引数名を指定して渡すと可読性が上がります。
注意: 関数内でグローバル変数を直接書き換えると副作用が発生しやすく、バグの原因になります。可能な限り引数と戻り値でデータを受け渡しましょう。
リスト・タプル・辞書・集合
# リスト: 変更可 (mutable)
fruits = ["apple", "banana", "cherry"]
fruits.append("orange")
print(fruits)
# タプル: 変更不可 (immutable)
coords = (10, 20)
print(coords)
# 辞書: key -> value
person = {"name":"Toma", "age":18}
print(person["name"]) # Toma
# 集合: 重複を排除
s = {1,2,2,3}
print(s)
詳しい行単位解説(クリックで展開)
行ごとの解説
fruits = [...]:角括弧でリストを作成します。要素の追加・削除ができます。fruits.append(...):リストの末尾に要素を追加します。coords = (10,20):丸括弧でタプルを作成。変更不可なので不変データに向いています。person = {...}:辞書はキーと値の対応。キーで高速に値を取り出せます。s = {1,2,2,3}:集合は重複を自動で排除します。
モジュールと標準ライブラリ
import math print(math.pi) print(math.sqrt(16)) import random print(random.randint(1, 10))
詳しい行単位解説(クリックで展開)
import math:math モジュールを読み込みます。モジュール名をプレフィックスにして中の要素にアクセスします。math.pi:円周率の定数。math.sqrt(16):平方根を計算。import random:乱数モジュールの読み込み。random.randint(1,10):1〜10 のランダム整数を返します。
補足: from math import sqrt のようにすると関数を直接呼び出せますが、名前衝突に注意してください。
ファイル入出力
# 書き込み
with open('sample.txt', 'w', encoding='utf-8') as f:
f.write('こんにちは
')
# 読み込み
with open('sample.txt', 'r', encoding='utf-8') as f:
text = f.read()
print(text)
詳しい行単位解説(クリックで展開)
with open(..., 'w') as f::ファイルを開いてfにファイルオブジェクトを割り当て、ブロック終了時に自動で閉じます。f.write(...):ファイルに文字列を書き込みます(改行は自分で入れる)。with open(..., 'r') as f::読み込みモードで開きます。text = f.read():ファイルの全内容を文字列として読み込みます。大きなファイルは逐次処理を検討してください。
オブジェクト指向(徹底解説)
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
return f"{self.name}: ワン!"
# インスタンス化
pochi = Dog('Pochi', 3)
print(pochi.bark())
print(pochi.age)
詳しい行単位解説(クリックで展開)
概念(ざっくり)
クラスは《設計図》、インスタンスは《その設計図から作られた具体物》です。属性はインスタンスごとのデータ、メソッドはそれに対する操作です。
行ごとの解説class Dog::Dog という名前のクラスを定義します。クラス名は慣習的に先頭大文字。def __init__(self, name, age)::コンストラクタ。インスタンス生成時に実行され、初期値を受け取ります。selfはそのインスタンス自身を指します。self.name = name:インスタンスの属性nameに引数の値を保存します。異なるインスタンスがそれぞれ異なる属性値を持てます。def bark(self)::インスタンスメソッド。メソッドの第1引数は常にself(暗黙的にインスタンスが渡る)。pochi = Dog('Pochi', 3):クラスからインスタンスを作る(インスタンス化)。この時点で__init__が実行され属性が設定されます。pochi.bark():インスタンスのメソッドを呼び出します。内部でselfはpochiを指します。
Q&A: __init__ と self は何をしたいの?
- __init__ は「そのインスタンスがどういうデータを持つべきか」を定義して初期化するための関数です。
- self は「このメソッドを呼んでいるそのインスタンス」を表すための名前で、インスタンスごとの値(属性)を参照・更新するために必要です。
ミニプロジェクト — 単語カウントツール
def word_count(text):
words = text.split()
counts = {}
for w in words:
w = w.strip().lower()
counts[w] = counts.get(w, 0) + 1
return counts
if __name__ == '__main__':
sample = 'Python is great. Python is easy.'
print(word_count(sample))
詳しい行単位解説(クリックで展開)
行ごとの解説
def word_count(text)::関数定義。テキストを渡して解析結果を返します。words = text.split():空白で分割して単語リストを作る。句読点は残るので必要なら前処理が必要。counts = {}:単語と出現回数を保存する辞書を作る。for w in words::各単語を順に処理。w = w.strip().lower():空白を取り、すべて小文字にして同一視しやすくする。counts[w] = counts.get(w, 0) + 1:現在の値(無ければ 0)を取得して +1 する。get の便利さが分かります。if __name__ == '__main__'::このファイルが直接実行されたときだけテストコードを実行するための慣習です。