【HackerRankを解きつつ学ぶシリーズ】python 初心者のためのcapitalize() とsplit() と時々strip()
【HackerRank】とはプログラミング問題を解決することでプログラマーとしてのスキルをスコア化できる楽しいサイト(求人)である。
*求人サイトということを忘れてパズルを解くように楽しめるので個人的にオススメ。(問題は全て英語)
www.hackerrank.com
ちなみにここで紹介される解き方が最適解とは限らないのでご了承くださいませ!
今回扱う問題は。。。
タイトル
Capitalize!
capitalize() とsplit()
問題のタイトル通り、単純に考えるとcapitalize()使えばできそうな問題ですが、ただ単純に
def solve(s): s.capitalize() return s
としてしまうと、
返ってくるのは
Chris alan
alan!?
そこはAlanであって欲しかった!
なぜこうなってしまったかというと
split()は文字列を任意の文字で区切り、分割された文字列のリストを返す!
つまり今回の例では
chris alan
chrisとalanは' '(スペース)で区切られているので、
s.split(' ')のようにかっこの中に' '(スペース)をあてがいます。
(もし与えられている文字列がスペースでなく「chris,alan」のように','(コンマ)で区切られていた場合はsplit(',')となります)
そうすることでスペース部分でで区切った[chris, alan]というリストを作ることができました。
そしてfor ループで、chris, alanそれぞれをcapitalize()すればオッケー。
*解答例は最後の方にひっそりと残しておきます。
その他もろもろ
今回使ったcapitalize()の他にも
lower(): すべての文字を小文字に
str = "Python is the best" print(str.lower()) # python is the best
upper(): すべての文字を大文字に
str = "Python is the best" print(str.upper()) # PYTHON IS THE BEST
swapcase(): 大文字を小文字に、小文字を大文字に
str = "pYthon iS tHe BesT" print(str.swapcase()) # PyTHON Is ThE bESt
title(): 単語の先頭の一文字を大文字、他を小文字に (←んんっ!?)
str = "Python is the best" print(str.title()) # Python Is The Best
や、この問題title()で一発やん!?笑
ただなぜかHackerRankでは通りませんでした。。。なぜ(わかる方いらっしゃいましたら是非ご教授ください!)
では皆様の良きHacker Life を祈っております!
解答例
def solve(s): name = '' for i in s.split(' '): name += i.capitalize() + ' ' return name.strip(' ')
返ってくる文字列の最後のスペースを消すためにstrip(' ')使用。(もっといい方法ありそー!)