条件分岐
if、elif、elseを用いることで、条件に応じた処理の分岐が可能になる。単一の条件にはif、二つの状況にはif-else、三つ以上の分岐にはif-elif-elseを使用する。また、条件式において空のデータ(None、空文字、空リスト、空辞書、0など)はFalseとして評価され、それ以外の非空データはTrueとして評価される。
反復処理
繰り返し処理にはfor文とwhile文を使用する。事前に繰り返し回数が明確な場合はfor文を、回数が不明で条件を満たすまで続けたい場合はwhile文を採用するのが基本である。
for文とrange関数
range関数を用いることで、指定した範囲でループ処理を行える。
# 0から2まで出力
for idx in range(3):
print(idx, end=' ')
# 出力: 0 1 2
# 1から4まで出力
for idx in range(1, 5):
print(idx, end=' ')
# 出力: 1 2 3 4
# 1から9まで2飛ばしで出力
for idx in range(1, 10, 2):
print(idx, end=' ')
# 出力: 1 3 5 7 9
ループの制御とelse節
breakはループ全体を即座に終了し、continueは現在の反復をスキップして次の反復へ進む。Pythonのループにはelse節を指定でき、breakによって中断されずにループが完遂された場合のみ実行される。
secret = 7
max_tries = 3
for attempt in range(max_tries):
guess = int(input("1から10の数字を推測してください: "))
if guess == secret:
print("正解です!")
break
else:
print("回数制限に達しました。")
# continueの動作例
for num in range(10):
if num < 5:
continue
print(num, end=' ')
# 出力: 5 6 7 8 9
ネストされたループ
2次元のデータ構造を処理する際や、複雑なパターンを出力する際にネスト(入れ子)を使用する。
matrix = [[1, 2, 3], [4, 5, 6]]
for row in matrix:
for val in row:
print(val, end=' ')
print()
# 出力:
# 1 2 3
# 4 5 6
図形の出力
# 直角三角形
size = 5
for i in range(1, size + 1):
print('*' * i)
# 出力:
# *
# **
# ***
# ****
# *****
文字列の変換と反転
入力された数値の各桁を計算し、反転させる処理の例である。
raw_input = input("4桁の数字を入力: ")
transformed = ""
for char in raw_input:
shifted = (int(char) + 5) % 10
transformed += str(shifted)
print("変換後:", transformed)
print("反転:", transformed[::-1])
# 入力: 1234
# 変換後: 6789
# 反転: 9876
while文の活用
while文でもelse節が利用でき、breakで脱出しなかった場合に実行される。
counter = 0
while counter <= 5:
print(counter)
counter += 1
break
else:
print("ループ完遂")
# 出力: 0
長方形と逆三角形
# 長方形の出力
rows = int(input("行数: "))
cols = int(input("列数: "))
line_count = rows
while line_count > 0:
print('#' * cols)
line_count -= 1
# 逆三角形
max_stars = int(input("最大星数: "))
current = max_stars
while current > 0:
print('*' * current)
current -= 1
九九表の出力
指定した段数までの九九表を出力する処理である。
limit = int(input("何段まで出力しますか: "))
for i in range(1, limit + 1):
for j in range(1, i + 1):
print(f"{j}x{i}={i*j}", end='\t')
print()
三重引用符と文字列
三重引用符('''または""")は、複数行にわたる文字列の出力や、シングルクォートとダブルクォートを混在させる際に便利である。
# 複数行の出力
print('''
複数行の
テキスト出力
''')
# クォートの混在
print("'シングルクォート'")
print('"ダブルクォート"')
print(''' "両方" '含む' ''')
無限ループと認証処理
while Trueを用いることで無限ループを作成できる。以下は、ユーザー認証をシミュレートした例である。
user_credentials = {'yamada': 1234, 'sato': 5678}
is_authenticated = False
remaining_attempts = 3
while not is_authenticated:
username = input('ユーザー名を入力: ')
if username in user_credentials:
while remaining_attempts > 0:
pwd = int(input('パスワードを入力: '))
if pwd == user_credentials[username]:
print('ログイン成功')
is_authenticated = True
break
else:
remaining_attempts -= 1
if remaining_attempts > 0:
print(f'パスワードが間違っています。残り{remaining_attempts}回')
else:
print('回数制限に達しました。プログラムを終了します。')
is_authenticated = True
break
else:
print('ユーザーが存在しません。')