acokikoy's notes

最近気になる=[NoCode, Shopify], I am..=[Python, ウクレレ, マニュアル車, CMS] LoveなWebディレクター

毎朝Codewars@2019.06.18(火): Holiday VII - Local Talk

毎朝ちびちびCodewars。

Holiday VII - Local Talk [7級] www.codewars.com

今日のお題:

"""
与えられた文章の単語間に "pak" という言葉を挟んで返す一種の「はさみ言葉」遊び。

例えば
pak("Man I need a taxi up to Ubud"))  ならこうなる
=>  "Man pak I pak need pak a pak taxi pak up pak to pak Ubud"  

ただし、
- 文頭と文末には Pak をつけないこと
- 空白だけの文字列の時は ''(an empty string)を返すこと

def pak(s):
Args:  
    s (str): なんらか文章
Returns:  
    "pak"を追加した文章
"""

コード

さすが7級、瞬殺 ^^;;

def pak(s):
  return ' pak '.join(s.split())
  • splitのセパレータにあえて ' ' を与えないのがポイント。

文法、関数・メソッドnote

str.split(sep=None, maxsplit=-1)

組み込み型 — Python 3.7.3 ドキュメント > 文字列メソッド

  • セパレータなしあるいはNoneの時は、空白文字で分割される。
    でも s.split() と s.split(' ') は振る舞いが違う。
# sの先頭と末尾には空白1個ずつ。
# AとBの間には空白2個、BとCの間には空白1個挟まっている。
s = ' AAAAAA  BBBBB CCCCC DDDDD '

s.split() 
# 結果 ['AAAAAA', 'BBBBB', 'CCCCC', 'DDDDD']
# セパレータ無指定なら、sの先頭/末尾の空白は無視されるし、連続した空白はデリミタ一つ分の扱いになる。

s.split(' ') 
# 結果 ['', 'AAAAAA', '', 'BBBBB', 'CCCCC', 'DDDDD', '']
# 明示的に空白1個をセパレータに指定すると、先頭/末尾の空白もカウントされる。<br>
# また空白2個のところは空の文字列を区切ったような扱いになる

  • セパレータには複数文字列も使える。
s = ' AAAAAAxyzBBBBBz y zCCCCCxDDDDD '

s.split('xyz')

# 結果 [' AAAAAA', 'BBBBBz y zCCCCCxDDDDD ']
# 文字列'xyz'で分割する。各文字の or じゃないよ(注意)。