Pythonの基本文法¶
Pythonは読みやすく、書きやすいプログラミング言語です。ここではPythonの基本的な文法について解説します。
はじめに:print文とコメント¶
print文の基本¶
プログラミングの基本として、まず画面に文字を表示するprint文から始めましょう。
# 基本的な文字列の出力
print("Hello, World!")
print('こんにちは、世界!')
# 複数の値を出力
print("私の名前は", "太郎", "です")
print("私の年齢は", 25, "歳です")
# 改行なしで出力
print("Hello", end=" ")
print("World") # "Hello World"と表示される
# 区切り文字を変更
print("apple", "banana", "orange", sep="-") # apple-banana-orange
コメントの書き方¶
# これは一行コメントです
print("Hello") # 行末にもコメントを書けます
"""
これは複数行コメント(docstring)です。
関数やクラスの説明によく使われます。
"""
'''
シングルクォート3つでも
複数行コメントが書けます。
'''
変数と基本データ型¶
変数の宣言と代入¶
Pythonでは変数の型を明示的に宣言する必要がありません。
# 文字列
name = "太郎"
message = 'こんにちは'
# 数値
age = 25
height = 175.5
# 真偽値
is_student = True
has_license = False
基本データ型¶
# 整数 (int)
number = 42
print(type(number)) # <class 'int'>
# 浮動小数点数 (float)
pi = 3.14159
print(type(pi)) # <class 'float'>
# 文字列 (str)
greeting = "Hello, World!"
print(type(greeting)) # <class 'str'>
# 真偽値 (bool)
is_true = True
print(type(is_true)) # <class 'bool'>
文字列操作¶
文字列の結合と書式設定¶
# 文字列の結合
first_name = "山田"
last_name = "太郎"
full_name = first_name + " " + last_name
print(full_name) # 山田 太郎
# f-string(推奨)
age = 25
message = f"私の名前は{full_name}で、年齢は{age}歳です。"
print(message)
# format()メソッド
message2 = "私の名前は{}で、年齢は{}歳です。".format(full_name, age)
print(message2)
文字列メソッド¶
text = " Hello, Python! "
# 文字列の長さ
print(len(text)) # 18
# 大文字・小文字変換
print(text.upper()) # " HELLO, PYTHON! "
print(text.lower()) # " hello, python! "
# 空白の除去
print(text.strip()) # "Hello, Python!"
# 文字列の置換
print(text.replace("Python", "World")) # " Hello, World! "
# 文字列の分割
words = "apple,banana,orange".split(",")
print(words) # ['apple', 'banana', 'orange']
リスト(配列)¶
リストの作成と操作¶
# リストの作成
fruits = ["りんご", "バナナ", "オレンジ"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", True, 3.14]
# 要素へのアクセス
print(fruits[0]) # りんご
print(fruits[-1]) # オレンジ(最後の要素)
# 要素の追加
fruits.append("ぶどう")
print(fruits) # ['りんご', 'バナナ', 'オレンジ', 'ぶどう']
# 要素の挿入
fruits.insert(1, "いちご")
print(fruits) # ['りんご', 'いちご', 'バナナ', 'オレンジ', 'ぶどう']
# 要素の削除
fruits.remove("バナナ")
print(fruits) # ['りんご', 'いちご', 'オレンジ', 'ぶどう']
# リストの長さ
print(len(fruits)) # 4
リストのスライス¶
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# スライス操作
print(numbers[2:5]) # [2, 3, 4]
print(numbers[:3]) # [0, 1, 2]
print(numbers[7:]) # [7, 8, 9]
print(numbers[::2]) # [0, 2, 4, 6, 8](2つおき)
print(numbers[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0](逆順)
辞書(Dictionary)¶
辞書の作成と操作¶
# 辞書の作成
person = {
"name": "田中太郎",
"age": 30,
"city": "東京"
}
# 値へのアクセス
print(person["name"]) # 田中太郎
print(person.get("age")) # 30
# 新しいキーと値の追加
person["job"] = "エンジニア"
print(person)
# 値の更新
person["age"] = 31
# キーの削除
del person["city"]
print(person)
# すべてのキーと値を取得
print(person.keys()) # dict_keys(['name', 'age', 'job'])
print(person.values()) # dict_values(['田中太郎', 31, 'エンジニア'])
print(person.items()) # dict_items([('name', '田中太郎'), ('age', 31), ('job', 'エンジニア')])
条件分岐(if文)¶
基本的なif文¶
age = 18
if age >= 20:
print("成人です")
elif age >= 18:
print("18歳以上です")
else:
print("未成年です")
# 複数条件
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "D"
print(f"成績: {grade}")
論理演算子¶
age = 25
has_license = True
# and演算子
if age >= 18 and has_license:
print("運転できます")
# or演算子
weather = "雨"
if weather == "雨" or weather == "雪":
print("傘が必要です")
# not演算子
is_weekend = False
if not is_weekend:
print("平日です")
# in演算子
fruits = ["りんご", "バナナ", "オレンジ"]
if "りんご" in fruits:
print("りんごがあります")
ループ処理¶
forループ¶
# リストの反復
fruits = ["りんご", "バナナ", "オレンジ"]
for fruit in fruits:
print(f"フルーツ: {fruit}")
# range()を使った数値の反復
for i in range(5):
print(f"数値: {i}") # 0から4まで
for i in range(1, 6):
print(f"数値: {i}") # 1から5まで
for i in range(0, 10, 2):
print(f"偶数: {i}") # 0, 2, 4, 6, 8
# 辞書の反復
person = {"name": "太郎", "age": 25, "city": "東京"}
for key, value in person.items():
print(f"{key}: {value}")
# enumerateを使ったインデックス付きループ
fruits = ["りんご", "バナナ", "オレンジ"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
whileループ¶
# 基本的なwhileループ
count = 0
while count < 5:
print(f"カウント: {count}")
count += 1
# ユーザー入力を使った例
password = ""
while password != "secret":
password = input("パスワードを入力してください: ")
if password != "secret":
print("パスワードが違います")
print("ログイン成功!")
ループ制御(break, continue)¶
# break文
for i in range(10):
if i == 5:
break
print(i) # 0, 1, 2, 3, 4
# continue文
for i in range(10):
if i % 2 == 0: # 偶数をスキップ
continue
print(i) # 1, 3, 5, 7, 9
関数¶
関数とは¶
関数は、特定の処理をまとめて名前を付けたものです。同じ処理を何度も書く代わりに、関数として定義しておくことで再利用できます。
基本的な関数の定義と呼び出し¶
# 最もシンプルな関数
def say_hello():
print("こんにちは!")
# 関数の呼び出し
say_hello() # "こんにちは!"が表示される
# 引数を持つ関数
def greet_person(name):
print(f"こんにちは、{name}さん!")
greet_person("太郎") # "こんにちは、太郎さん!"
# 複数の引数を持つ関数
def introduce(name, age):
print(f"私の名前は{name}で、{age}歳です。")
introduce("花子", 22)
戻り値を持つ関数¶
# 戻り値を持つ関数
def add(a, b):
result = a + b
return result # 計算結果を返す
# 関数の戻り値を変数に代入
sum_result = add(5, 3)
print(sum_result) # 8
# 直接print文で使用
print(add(10, 20)) # 30
# 複雑な計算をする関数
def calculate_area(width, height):
area = width * height
return area
room_area = calculate_area(5, 4)
print(f"部屋の面積は{room_area}平方メートルです")
デフォルト引数とキーワード引数¶
# デフォルト引数を持つ関数
def greet_with_title(name, title="さん"):
return f"こんにちは、{name}{title}!"
print(greet_with_title("田中")) # こんにちは、田中さん!
print(greet_with_title("田中", "先生")) # こんにちは、田中先生!
# キーワード引数を使った呼び出し
def create_profile(name, age, city="未設定"):
return f"名前: {name}, 年齢: {age}, 住所: {city}"
# 通常の呼び出し
print(create_profile("太郎", 25))
# キーワードを指定した呼び出し
print(create_profile(age=30, name="花子", city="大阪"))
複数の戻り値¶
def calculate_all(a, b):
addition = a + b
subtraction = a - b
multiplication = a * b
division = a / b if b != 0 else 0
return addition, subtraction, multiplication, division
# 複数の戻り値を受け取る
add_result, sub_result, mul_result, div_result = calculate_all(10, 2)
print(f"足し算: {add_result}")
print(f"引き算: {sub_result}")
print(f"掛け算: {mul_result}")
print(f"割り算: {div_result}")
# タプルとして受け取ることも可能
results = calculate_all(15, 3)
print(results) # (18, 12, 45, 5.0)
関数内関数とラムダ関数¶
# 関数の中に関数を定義
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
add_five = outer_function(5)
print(add_five(3)) # 8
# ラムダ関数(無名関数)
square = lambda x: x ** 2
print(square(4)) # 16
# リストと組み合わせて使用
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # [1, 4, 9, 16, 25]
クラスとオブジェクト指向プログラミング¶
クラスとは¶
クラスは、関連するデータ(属性)と処理(メソッド)をまとめたものです。オブジェクト指向プログラミングの基本概念です。
基本的なクラスの定義¶
# シンプルなクラスの定義
class Person:
def __init__(self, name, age):
"""コンストラクタ:オブジェクトが作られるときに呼ばれる"""
self.name = name # インスタンス変数
self.age = age
def greet(self):
"""メソッド:クラス内で定義された関数"""
print(f"こんにちは、私は{self.name}です。")
def celebrate_birthday(self):
"""誕生日を祝うメソッド"""
self.age += 1
print(f"誕生日おめでとう!{self.age}歳になりました。")
# クラスからオブジェクト(インスタンス)を作成
person1 = Person("太郎", 25)
person2 = Person("花子", 22)
# メソッドの呼び出し
person1.greet() # こんにちは、私は太郎です。
person2.greet() # こんにちは、私は花子です。
# 属性にアクセス
print(f"{person1.name}は{person1.age}歳です")
# メソッドでデータを変更
person1.celebrate_birthday() # 誕生日おめでとう!26歳になりました。
より実用的なクラスの例¶
class BankAccount:
"""銀行口座を表すクラス"""
def __init__(self, owner, initial_balance=0):
self.owner = owner
self.balance = initial_balance
self.transaction_history = []
def deposit(self, amount):
"""入金"""
if amount > 0:
self.balance += amount
self.transaction_history.append(f"入金: +{amount}円")
print(f"{amount}円を入金しました。残高: {self.balance}円")
else:
print("入金額は0円より大きくする必要があります。")
def withdraw(self, amount):
"""出金"""
if amount > 0 and amount <= self.balance:
self.balance -= amount
self.transaction_history.append(f"出金: -{amount}円")
print(f"{amount}円を出金しました。残高: {self.balance}円")
else:
print("出金できません。残高不足または無効な金額です。")
def get_balance(self):
"""残高照会"""
return self.balance
def show_history(self):
"""取引履歴表示"""
print(f"\n{self.owner}さんの取引履歴:")
for transaction in self.transaction_history:
print(f" {transaction}")
print(f"現在の残高: {self.balance}円\n")
# 銀行口座オブジェクトの作成と使用
account = BankAccount("田中太郎", 1000)
account.deposit(500) # 500円を入金
account.withdraw(200) # 200円を出金
account.deposit(1000) # 1000円を入金
print(f"現在の残高: {account.get_balance()}円")
account.show_history()
クラス変数とインスタンス変数¶
class Student:
# クラス変数:すべてのインスタンスで共有される
school_name = "〇〇高等学校"
student_count = 0
def __init__(self, name, grade):
# インスタンス変数:各インスタンス固有のデータ
self.name = name
self.grade = grade
Student.student_count += 1 # 生徒数をカウント
def introduce(self):
print(f"私は{Student.school_name}の{self.grade}年生、{self.name}です。")
@classmethod
def get_student_count(cls):
"""クラスメソッド:クラス全体に関する情報を扱う"""
return cls.student_count
# 生徒オブジェクトの作成
student1 = Student("太郎", 2)
student2 = Student("花子", 3)
student1.introduce()
student2.introduce()
print(f"全生徒数: {Student.get_student_count()}人")
継承¶
# 基底クラス(親クラス)
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name}が鳴いています。")
def move(self):
print(f"{self.name}が移動しています。")
# 派生クラス(子クラス)
class Dog(Animal):
def speak(self):
"""メソッドのオーバーライド"""
print(f"{self.name}がワンワン鳴いています。")
def fetch(self):
"""犬特有のメソッド"""
print(f"{self.name}がボールを取ってきました。")
class Cat(Animal):
def speak(self):
print(f"{self.name}がニャーニャー鳴いています。")
def climb(self):
print(f"{self.name}が木に登りました。")
# 継承を使ったオブジェクトの作成
dog = Dog("ポチ")
cat = Cat("タマ")
dog.speak() # ポチがワンワン鳴いています。
dog.move() # ポチが移動しています。(親クラスのメソッド)
dog.fetch() # ポチがボールを取ってきました。
cat.speak() # タマがニャーニャー鳴いています。
cat.climb() # タマが木に登りました。
エラーハンドリング¶
try-except文¶
# 基本的なエラーハンドリング
try:
number = int(input("数値を入力してください: "))
result = 10 / number
print(f"結果: {result}")
except ValueError:
print("数値を入力してください")
except ZeroDivisionError:
print("0で割ることはできません")
except Exception as e:
print(f"予期しないエラーが発生しました: {e}")
else:
print("エラーは発生しませんでした")
finally:
print("処理が完了しました")
ファイル操作でのエラーハンドリング¶
try:
with open("sample.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("ファイルが見つかりません")
except PermissionError:
print("ファイルの読み取り権限がありません")
まとめ¶
この章では、Pythonの基本的な文法について学習しました:
print文とコメント: プログラムの基本的な出力とコードの説明方法
変数とデータ型: 文字列、数値、真偽値の扱い方
文字列操作: 結合、書式設定、メソッドの活用
リスト: 配列の作成、操作、スライス
辞書: キーと値のペアでデータを管理
条件分岐: if文と論理演算子
ループ処理: forループとwhileループ
関数: 再利用可能なコードブロックの作成と詳細な使い方
クラスとオブジェクト指向: データと処理をまとめて管理する方法
エラーハンドリング: 例外処理でプログラムの安定性を向上
これらの基本的な概念を理解することで、より複雑なPythonプログラムを書くための土台が身につきます。特に関数とクラスは、大きなプログラムを書く際に重要な概念となりますので、しっかりと理解しておきましょう。
練習問題¶
学習内容を定着させるために、以下の練習問題にチャレンジしてみてください:
基本的な関数: 2つの数値を引数として受け取り、より大きい数値を返す関数を作成してください。
クラスの作成: 図書館の本を管理するBookクラスを作成してください。タイトル、著者、出版年を属性として持ち、本の情報を表示するメソッドを実装してください。
リストと関数の組み合わせ: 数値のリストを受け取り、その平均値を計算して返す関数を作成してください。
これらの練習を通じて、Pythonの基本的な概念をより深く理解することができます。