開発環境のセットアップ
Pythonはインフラエンジニアの自動化スキル向上において重要な役割を果たしています。インタプリタは公式サイトから、統合開発環境(IDE)としてはPyCharmなどの導入が推奨されます。
スクリプトの宣言
Pythonスクリプトの先頭には、使用するインタプリタのパスと文字エンコーディングを明記するのが一般的です。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
パッケージマネージャの設定
Linux環境においてpipのダウンロード元を国内ミラーに変更する場合、~/.pip/pip.confを作成または編集します。
[global]
timeout = 6000
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
基礎的な概念と文字コード
Pythonファイルの拡張子は任意の文字列が使用可能ですが、一般的に.pyが用いられます。
データ単位と文字コードの関係
- ビットとバイト: 1バイトは8ビットに相当します。コンピュータはバイト単位で処理を行います。
- 文字コードの変遷: 最初にASCII(8ビット)が登場し、多言語対応のためにUnicode(16ビット以上)が生まれました。しかしASCII文字も16ビットで表現すると無駄が生じるため、可変長のUTF-8が考案されました。
- 日本語のバイト数: 「山田」という2文字の場合、UTF-8では1文字3バイト(計6バイト)、GBKでは1文字2バイト(計4バイト)を占有します。
変数とデータ型
コメントの記述
1行コメントは#、複数行コメントは"""で囲んで記述します。
変数の定義と命名規則
変数は値を格納する箱です。命名には以下のルールがあります。
- アルファベット、数字、アンダースコアが使用可能。
- 数字から始めることはできない。
- 予約語(if, for, whileなど)は使用不可。
- 意味のある名前を付け、長すぎないこと。大文字小文字は区別される。
- キャメルケース(camelCase)またはスネークケース(snake_case)が推奨される。
user_name = 'taro' # 変数の宣言
print(user_name) # 変数の参照と出力
データ型
- 数値型: 整数、浮動小数点数(3.14や5.2E-2など)、複素数(2+3jなど)。
- ブール型: 真または偽。1または0。
- 文字列型: 引用符で囲まれたテキストデータ。
入出力と制御構文
入力とパスワードの隠蔽
input()関数でユーザーからの入力を受け付けます。パスワード入力時など画面に表示させたくない場合はgetpassモジュールを使用します。
import getpass
login_id = input('ユーザー名: ')
secret_key = getpass.getpass('パスワード: ')
print(login_id, secret_key)
条件分岐(if文)
条件に応じて処理を分岐させます。インデントによってブロックを定義します。
score = 75
if score >= 80:
print('優')
elif score >= 60:
print('良')
else:
print('不可')
# 真偽値の省略記法(xが空や0でなければTrue)
if score:
print('スコアあり')
繰り返し処理(ループ)
for文はシーケンスの要素を反復処理し、while文は条件が真の間ループし続けます。
# for文の基本
for idx in range(5):
print(idx)
# while文の基本
counter = 0
while counter < 5:
print(counter)
counter += 1
ループの制御(breakとcontinue)
break: 現在のループ全体を途中で終了させる。continue: 現在の周回の残りの処理をスキップし、次の周回へ進む。
# continueの例:偶数をスキップ
for num in range(10):
if num % 2 == 0:
continue
print(num)
# breakの例:特定値で終了
for val in range(100):
if val > 5:
break
print(val)
実践演習
1. 1から10まで出力(7を除く)
idx = 1
while idx < 11:
if idx == 7:
idx += 1
continue
print(idx)
idx += 1
2. 1から100までの合計値
total = 0
num = 1
while num < 101:
total += num
num += 1
print(total)
3. 1から100までの偶数抽出
for num in range(1, 101):
if num % 2 == 0:
print(num)
4. 1-2+3-4...+99の計算
result = 0
num = 1
while num < 100:
if num % 2 == 0:
result -= num
else:
result += num
num += 1
print(result)
5. ログイン認証(3回までリトライ可能)
import getpass
valid_user = "admin"
valid_pwd = "secure123"
attempts = 0
while attempts < 3:
input_user = input("ユーザー名: ")
input_pwd = getpass.getpass("パスワード: ")
if input_user == valid_user and input_pwd == valid_pwd:
print("ログインに成功しました")
break
else:
print("認証に失敗しました")
attempts += 1
6. 百銭百鶏問題
雄鶏5銭、雌鶏3銭、雛3羽1銭の時、100銭で100羽を買う組み合わせを求めます。
for rooster in range(1, 20):
for hen in range(1, 33):
chick = 100 - rooster - hen
if chick % 3 == 0 and (rooster * 5 + hen * 3 + chick / 3 == 100):
print(f"雄鶏: {rooster}羽, 雌鶏: {hen}羽, 雛: {chick}羽")