毎日ちょっとPython ~ 10日目 ~

どーも。どうやら勉強に使用している書籍も1/3くらいまでいきました。積み上げるって大変だけど、実感がわいていいですね。

文字列操作

''(シングルクォート)、""(ダブルクォート)どちらも使えます。まぁ入れ子にしたい場合に使い分ける感じですかね。

エスケープ文字は \(バックスラッシュ)です。

\t - タブ
\n - 改行
\\ - バックスラッシュ

※たしか、プログラムを改行して可読性を高めたいときもバックスラッシュつかうよね...

raw文字列

クォート文字の前に r をつけると raw(ロー)文字列を表します。
「生の」文字列を意味します。文字列内のバックスラッシュもバックスラッシュとして扱う。

>>> print(r'That is Carol\'s cat.')
That is Carol\'s cat.

こんな感じ。正規表現とかのバックスラッシュたくさん書くときに便利らしい。

三連クォートによる複数行文字列

シングルクォート、ダブルクォートをそれぞれ三つずつでくくると文字列内にも改行をさくっといれられるのでそっち使おうねって感じらしい

print('''Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extorition.
Sincerely,
''')

こんな感じのもので実行してもエラーにならず正しく表示されます。

Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extorition.
Sincerely,

複数行コメント

一行コメントはシャープ記号。
複数行文字列は、複数行のコメントにも使える(ややこしー慣れだな慣れ)

'''これはテスト用のPythonプログラムです!
作者:すけさん
'''

def spam():
   """これはspam()関数の働きを説明するための、
   複数行コメントです"""
   print('hello!')

どっちでもいいらしい。なんかあるのかなレギュレーション

文字列のインデックスとスライス

文字列もリストみたいになっているそうで、インデックスで何番目の文字列とか、スライス(0:5)で文字取れます。ただ、参照とかではないので元の文字列に影響はないです。

>>> spam = 'Hello world!'
>>> fizz = spam[0:5]
>>> fizz
'Hello'
>>> spam
'Hello world!'

こんな感じで部分の文字列を変数に一時的に入れれば、良いやん。

文字列に対する in と not in

使えます。

>>> 'Hello' in 'Hello world!'
True
>>> 'Hello' in 'Hello'
True
>>> 'HELLO' in 'Hello World!'
False
>>> '' in 'spam'
True
>>> 'cats' not in 'cats and dogs'
False

文字列メソッド便利よ

upper(), lower()

それぞれ、大文字小文字にする。ただ、中身自体の値は変更されないので、代入するの忘れずにね。

>>> spam = 'Hello world!'
>>> spam.upper()
'HELLO WORLD!'
>>> spam.lower()
'hello world!'
>>> spam
'Hello world!'

表記ゆれとかをなくす際に使えたりする(Alphabetなら使えるけど、日本語は便利なものがあったりしますかね。教えてほしい)

こんな感じにすれば、「Great」「GREAT」「GreAT」でもOKになる。

print('How are you?')
feeling = input()
if feeling.lower() == 'great':
   print('I feel great too.')
else:
   print('I hope the rest of your day is good')

isupper() , islower()

一文字以上のすべての英文字が大文字 or 小文字ならTrue 、そうじゃなければfalse。(全部の文字が大文字 or 小文字だったら)

>>> spam = 'Hello world!'
>>> spam.islower()
False
>>> spam.isupper()
False
>>> 'HELLO'.isupper()
True
>>> 'abc12345'.islower()
True
>>> '12345'.islower()
False
>>> '12345'.isupper()
False

重ねがけもできます

>>> 'hello'.upper().isupper()
True
>>> 'hello'.upper().lower()
'hello'

isXという文字列メソッド

isalpha() - 1文字以上の英文字だけで構成されている場合にTrueを返す
isalnum() - 1文字以上の英文字、数字で構成されている場合にTrueを返す
isdecimal() - 1文字以上の数字だけから構成されている場合にTrueを返す
isspace() - 文字列がスペース、タブ、改行で構成されている場合にTrueを返す
istitle() - 大文字から始まり残りが小文字の英単語から構成されている場合にTrueを返す

結構いろいろあるな。入力のチェックが楽そう。

while True:
   print('年齢を入力してください')
   age = input()
   if age.isdecimal():
       break
   print('年齢は数字で入力してください')

while True:
   print('パスワードを入力してください')
   password = input()
   if age.isalnum():
       break
   print('パスワードは英数字で入力してください')

startswith(), endswith()

それぞれ、対象の文字列がメソッドに渡された文字列から始まる or 終わる場合にTrue、違う場合はfalseになります。

>>> 'Hello world!'.startswith('Hello')
True
>>> 'Hello world!'.endswith('world!')
True
>>> 'abc123'.startswith('abcdef')
False
>>> 'abc123'.endswith('12')
False

join(),split()

join() - 文字列のリストを一つの文字列に連結するメソッド

>>> ', '.join(['cats', 'rats', 'bats'])
'cats, rats, bats'
>>> ' '.join(['My', 'name', 'is', 'Simon'])
'My name is Simon'
>>> 'ABC'.join(['My', 'name', 'is', 'Simon'])
'MyABCnameABCisABCSimon'

これ間違えそう。JSは逆よ。逆。

split() - 文字列に対して呼び出すと、リストとして格納していく

>>> 'My name is Simon'.split()
['My', 'name', 'is', 'Simon']
>>> 'MyABCnameABCisABCSimon'.split('ABC')
['My', 'name', 'is', 'Simon']
>>> 'My name is Simon'.split('m')
['My na', 'e is Si', 'on']

何も値を渡さないと、スペースで区切り、値を渡すとその文字列で区切る。
複数行を改行ごとに取り出すときに使うといいらしい。

>>> spam = '''Dear Alice,
How have you been? I am fine.
There is a container in the fridge
that is labeled "Milk Experiment"
Please do not drink it.
Sincerely,
Bob'''
>>> spam.split('\n')
['Dear Alice,', 'How have you been? I am fine.', 'There is a container in the fridge', 'that is labeled "Milk Experiment"', 'Please do not drink it.', 'Sincerely,', 'Bob']

最後に

やっぱり文字列処理っしょ。っておもった。

この記事が気に入ったらサポートをしてみませんか?