











条件分岐に使える Python の基本的な文字列のメソッド
文字列は自然な文章を入れたり、もちろん Python のようなプログラム(のソースコード)を格納したり、と PC で人間が扱うデータの中でも基本的なもののひとつであり、数値よりも複雑なデータです。
そのため、等しかったり、大小だったりとは異なる、色々な条件を判断する必要があります。その中には非常に高度かつ複雑なものもありますが、今回は比較的シンプルなものを紹介します。シンプルですが実用的なので、実際の用途をイメージしてみるのもいいでしょう。
特定の文字が含まれているか判定
s = 'I have a pen.'
t = 'You have a gum.'
if 'pen' in s: #順序に注意
print(s)
結果:
I have a pen.
文字列が含まれていたら、True, そうでなければ False を返します。後に紹介するメソッドと比較してシンプルな分、文字列が含まれているかそうでないかしか分かりません。また、 not 演算子も使えます。文字列の判定の場合、逆の演算子というものが難しかったりなかったりするので、使用頻度が上がります。
if not 'pen' in t:
print('You don\'t have a pen')
文字列が条件を満たすか判定するメソッド
特定の文字列で始まるか? startswith()
s = 'I have a pen.'
t = 'You have a gum.'
print(s.startswith('You'), type(s.startswith('You')))
print(t.startswith('You'), type(t.startswith('You')))
結果:
False <class 'bool'>
True <class 'bool'>
判定したい文字列 . (ドット)startswith(開始文字列)
ここまで扱ってきた関数と異なり、判定対象・処理対象の変数や定数の後に . ドットで繋げる形式を関数ではなくメソッドと呼びます。詳しくは省きますが、仕組みとしては関数とほぼ一緒ですが、基本的に . ドット の前にある変数や定数に関連した処理となる点が関数と異なります。
startswith メソッドでは、() の中の引数で、先行する文字列が始まるかを bool で返します。bool なので、当然 if 構造に使用できます。
if s.startswith('I'):
print('It\'s about me!')
このように、if と組み合わせて処理を分岐させるのが基本的な使い方となります。当然、 not 演算子も使用できます。
if not s.startswith('I'):
print('It\'s not about me!')
文字列が含まれていたら位置を返す find メソッド
s = 'I have a pen.'
t = 'You have a gum.'
print(s.find('have'))
print(t.find('have'))
print(s.find('You'))
print(t.find('You'))
結果:
2
4
-1
0
見つかったときは、見つかったときの文字数、見つからなかったときは -1 を返します。見つかったときの位置は、添え字によるアクセスと同じ法則が適用されます。
以下は、have が見つかったら、以降の内容を表示します。
if s.find(‘have’) > -1: #-より大きければ文字が見つかっている
print(s[s.find(‘have’):]) #have が見つかった位置以降全て
結果:
have a pen.
変数を文字列で整えて出力
print 文に限らず、 Python スクリプト中の変数を文字列と組み合わせ、整えた文字列としたい場合があります。そういうときには、 Python3 では f-strings を使う便利です。
tool = 'pen'
print(f'I have a {tool}.')
結果:
I have a pen.
このように、’シングルクォートや”ダブルクォートの前に f をつけ、文字列中に {変数名} と記載すると変数の内容が表示されます。
tool = 'pen'
s = f'I have a {tool}.' #このときは tool は pen
tool = 'gum' #toolがgum
print(s) #出力結果は…?
結果:
I have a pen.
変数の遅延評価は行われず、 f-string が記述された段階の変数の値が出力されます。
また、変数名の後に : コロンをつけて書式指定をすることで、様々な形に成形できます。
数値の桁合わせ・0埋め
i = 12345
print(f'0 padding: {i:08}') # 0埋め
print(f'padding: {i:8}') # スペース埋め
結果:
0 padding: 00012345
pading: 12345
コンマ区切り
i = 12345
print(f'comma: {i:,}')
結果:
12,345
小数の有効数字
f = 0.12345
print(f'digit: {f:.2f}
結果:
digit: 0.12
※ .数値f の . ドットを忘れないように
小数のパーセント表示
f = 0.12345
print(f’percent: {f:.3%}’) #小数点以下は3桁まで
結果:
percent: 12.345%











