ひとり勉強ログ

ITエンジニアの勉強したことメモ

6章 文字列操作【退屈なことはPythonにやらせよう】

# エスケープ文字
spam = 'Say hi to Bob\'s mother.'
print(spam)
# Say hi to Bob's mother.

print("Hello there!\nHow are you?\nI\'m doing fine.")
# Hello there!
# How are you?
# I'm doing fine.

# 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 extortion.

Sincerely,
Bob''')
# Dear Alice

# Eve's cat has been arrested for catnapping, cat burglary, and extortion.

# Sincerely,
# Bob
# 文字列のインデックスとスライス
spam = 'Hello world!'
print(spam[0])
# H
print(spam[4])
# o
print(spam[-1])
# !
print(spam[0:5])
# Hello
print(spam[6:])
# world!

# ひとつの変数からスライスを取得して別の変数に格納しておく
spam = 'Hello world!'
fizz = spam[0:5]
print(fizz)
# Hello
print(spam)
# Hello world!
# 文字列に対するinとnot in演算子
print('Hello' in 'Hello World!')
# True
print('Hello' in 'Hello')
# True
print('HELLO' in 'Hello World!')
# False
print('cats' not in 'cats and dogs')
# False
# 便利な文字列メソッド
# upper(),lower(),isupper(),islower()
spam = 'Hello World!'
spam = spam.upper()
print(spam)
# HELLO WORLD!
spam = spam.lower()
print(spam)
# hello world!

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.')

# greatの揺らぎとしてGReatと入力しても、I feel great too.と表示される。
# 大文字と小文字の不統一のような、ユーザー入力の揺らぎや間違いを適切に扱うコードを補うことによって、プログラムが使いやすくなり失敗も減る。

spam = 'Hello world!'
print(spam.islower())
# False
print(spam.isupper())
# False
print('Hello'.isupper())
# True
print('abc12345'.islower())
# True
print('12345'.islower())
# False
print('12345'.isupper())
# False
# upper()とlower()は文字列を返す
print('Hello'.upper())
# HELLO
print('Hello'.upper().lower())
# hello
print('Hello'.upper().lower().upper())
# HELLO
print('HELLO'.lower())
# hello
print('HELLO'.lower().islower())
# True
# isXというメソッド

# 1文字以上の英文字だけから文字列が構成されている場合にTrueを返す
print('hello'.isalpha())
# True
print('hello123'.isalpha())
# False

# 1文字以上の英文字化数字から構成されている場合にTrueを返す
print('hello123'.isalnum())
# True
print('hello'.isalnum())
# True

# 1文字以上の英数字か数字から構成されている場合にTrueを返す
print('123'.isdecimal())
# True

# 文字列がスペースかタブか改行だけで構成されている場合にTrueを返す
print(' '.isspace())
# True

# 大文字から始まり残りがすべて小文字の英単語から構成されている場合にTrueを返す
print('This Is Title Case'.istitle)
# True
print('This Is Title Case 123'.istitle)
# True
print('This Is not Title Case'.istitle)
# False
print('This Is NOT Title Case Either'.istitle)
# False
# isX系の文字列メソッドは、ユーザー入力を検証する場合に便利である。
# 例えば、次のプログラムは、正しい入力が得られるまで繰り返しユーザーに年齢とパスワードを入力してもらうものである。
while True:
  print('年齢を入力してください')
  age = input()
  if age.isdecimal():
    break
  print('年齢は数字で入力してください')

while True:
  print('新しいパスワードを入力してください')
  password = input()
  if password.isalnum():
    break
  print('パスワードは英数字で入力してください')
# startswith()メソッドとendswith()メソッド
# 対象の文字列がメソッドに渡された文字列から始まるか、または終わる場合にTrueを返し、そうでなければFalseを返す。
print('Hello world!'.startswith('Hello'))
# True
print('Hello world!'.endswith('world!'))
# True
print('abc123'.startswith('abcdef'))
# False
print('abc123'.endswith('12'))
# False
print('Hello world!'.startswith('Hello world!'))
# True
print('Hello world!'.endswith('Hello world!'))
# True
# join()とsplit()メソッド
print(', '.join(['cats', 'rats', 'bats']))
# cats, rats, bats
print(' '.join(['My', 'name', 'is', 'Simon']))
# My name is Simon
print('ABC'.join(['My', 'name', 'is', 'Simon']))
# MyABCnameABCisABCSimon

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

spam = '''Dear Alice,
How are you been? I am fine.
There is a container in the fridge
that is labeled "Milk Experiment".
Please do not drink it.
Sincerely,
Bob'''
print(spam.split('\n'))
# ['Dear Alice,', 'How are you been? I am fine.', 'There is a container in the fridge', 'that is labeled "Milk Experiment".', 'Please do not drink it.', 'Sincerely,', 'Bob']
# rjust(),ljust(),center()メソッドを用いてテキストを揃える
from turtle import left


print('Hello'.rjust(10))
#      Hello
print('Hello'.rjust(20))
#                Hello
print('Hello World!'.rjust(20))
#         Hello World!
print('Hello'.ljust(10))
# Hello

print('Hello'.rjust(20, '*'))
# ***************Hello
print('Hello'.ljust(20, '-'))
# Hello---------------
print('Hello'.center(20, '='))
# =======Hello========
def print_picnic(items_dict, left_width, right_width):
  print('PICNIC ITEMS'.center(left_width + right_width, '-'))
  for k, v in items_dict.items():
    print(k.ljust(left_width, '.') + str(v).rjust(right_width))

picnic_items={'sandwiches': 4, 'apples': 12, 'cups': 4, 'cookies': 8000}
print_picnic(picnic_items, 12, 5)
print_picnic(picnic_items, 20, 6)

# ---PICNIC ITEMS--
# sandwiches..    4
# apples......   12
# cups........    4
# cookies..... 8000
# -------PICNIC ITEMS-------
# sandwiches..........     4
# apples..............    12
# cups................     4
# cookies.............  8000
# strir(),rstrip(),lstrip()メソッドを用いて空白文字を除去する
spam='        Hello World        '
print(spam.strip())
# 'Hello World'
print(spam.lstrip())
# 'Hello World        '
print(spam.rstrip())
# '        Hello World'
# 除去すべき文字を文字列の引数として渡すことができる。
spam='SpamSpamBaconSpamEggsSpamSpam'
print(spam.strip('ampS'))
# BaconSpamEggs
# strip()に'ampS'という引数を渡すと、a,m,p,大文字のSを、文字列の両端から除去する。
# pyperclipモジュールを用いて文字列をコピー&ペーストする
# コンピュータのクリップボードとテキストを授受することができる。
import pyperclip
pyperclip.copy('Hello world!')
pyperclip.paste()
# Hello world!
# ModuleNotFoundError: No module named 'pyperclip'と表示されたらpyperclipをインストールする。
# pip install pyperclip