「アウトプットと言う名の備忘録@Texas」

日本じゃない何処かの脳筋パイソニスタによる何かしらの走り書き

【HackerRankを解きつつ学ぶシリーズ】python 初心者のためのcapitalize() とsplit() と時々strip()

【HackerRank】とはプログラミング問題を解決することでプログラマーとしてのスキルをスコア化できる楽しいサイト(求人)である。
*求人サイトということを忘れてパズルを解くように楽しめるので個人的にオススメ。(問題は全て英語)
www.hackerrank.com

ちなみにここで紹介される解き方が最適解とは限らないのでご了承くださいませ!

今回扱う問題は。。。

タイトル

Capitalize!

概要

与えられた氏名それぞれの頭文字を大文字にしなさいという問題。
例えば
alison heck」という氏名が与えられた場合

Alison Heck」と返ってくるようにしてね!
という問題。

基本情報

インプットフォーマット

  • フルネームを一つの文字列で 。

制限

  • インプットされるフルネームはアルファベットで且つスペースも含む。
  • 大文字になるのは単語それぞれの頭文字だけ。


アウトプットフォーマット

  • 大文字化された文字列をprintで表示

インプット例

アウトプット例

capitalize() とsplit()

問題のタイトル通り、単純に考えるとcapitalize()使えばできそうな問題ですが、ただ単純に

def solve(s):
    s.capitalize()
    return s

としてしまうと、
返ってくるのは

Chris alan

alan!?

そこはAlanであって欲しかった!
なぜこうなってしまったかというと

capitalize()は先頭の一文字を大文字にした上で他の文字を小文字にする !

からで
つまり「chris alan」を二つの文字列に分けなければならない。

そこで
split()を使用します。

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(' ')使用。(もっといい方法ありそー!)