Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python入門】文字列の先頭の英字を大文字に変換する方法

Pythonには文字列を操作するためのメソッドが数多く用意されています。コーディング試験などで「文字列の最初の文字を大文字にせよ」という課題が出されたら、あなたはどのように実装しますか?この記事では、その目的を達成するための文字列操作のアプローチを一つ紹介します。

課題の内容

Pythonの文字列が与えられたとき、その中で最初に出てくる英字を大文字にして返す関数を書いてください。

まずは質問して要件を明確にする

このような課題は、就職面接で出題されることもあります。その場合は、問題を正しく理解できているかを確認するために、遠慮なく面接官に質問して要件を明確にしましょう。

この問題に取り組む前に、考えておきたい質問の例をいくつか挙げます。

  • 質問:文字列は必ず存在しますか?nullや空文字列を扱うことはありませんか?
  • 回答文字列が存在しない場合もあります。エッジケースには十分注意してください!
  • 質問:「最初の文字」とは、文字列全体の最初の1文字のことですか?それとも各単語の頭文字のことですか?
  • 回答文字列自体の最初の文字を指します。
  • 質問:最初の文字は必ず英字ですか?先頭が数字や記号の場合も考慮する必要がありますか?
  • 回答良い指摘です。最初の文字が英字とは限りません。文字列の中で最初に出てくる英字を大文字にしてください。

アプローチの考え方

この問題へのアプローチは複数ありますし、正解も一つではありません。もし別の解法を思いついたなら、それも素晴らしいことです。

求められたら、まずエッジケースから処理する

ここでは、文字列がNoneである場合、空文字列である場合、そして最初の文字が英字ではない場合への対応を実装していきます。まずはコードを見てみましょう。

def capitalize_str(str):
 if str == None: # str が None の場合
   return "NoneType is not a string"
 elif len(str) > 0: # str が存在する場合
   # 最初の文字は何か?数字なら次の文字へ、英字なら大文字にする
   return str # これは仮の実装 -- 次のステップで変更する
 else: # str が空の場合
   return "undefined string"
 
capitalize_str("hello")

この段階では、文字列がNoneの場合や長さ0(空文字列)の場合といったエッジケースに対応しました。ただし、まだ大文字化のためのロジックは実装していません。まず文字列が存在することを確認してから、次のステップへ進みます。

続いて、文字列の先頭の文字が英字かどうかを判定する方法を見ていきましょう。数字や記号だった場合は、英字が見つかるまで次の文字へ進みます。英字が見つかったら、それを大文字にして文字列を返します。文字列の最後まで英字が見つからなかった場合は、その旨を返します。

def capitalize_str(str):
 if str == None: # str が None の場合
   return "NoneType is not a string"
 elif len(str) > 0: # str が存在する場合
   # 最初の文字は何か?数字なら次の文字へ、英字なら大文字にする
   i = 0
 
   while i < len(str):
     if str[i].isalpha():
       return str[0:i] + str[i].upper() + str[i + 1:]
     else:
       i += 1
   return "string does not have letters"
 else: # str が空の場合
   return "undefined string"
 
print(capitalize_str("christina"))

Pythonにはisalpha()という便利な文字列メソッドがあります。これは、対象の文字がアルファベットの一部であるかどうかを判定するものです。英字でなければ、次の文字へ進みます。そして最初の英字に到達した時点で、「英字より前の部分+大文字にした英字+残りの部分」を連結した文字列を返します。

実はPythonにはcapitalize()という関数もあり、これを使えば先頭の文字を大文字に変換できます。ただしこの関数では、「先頭の文字が英字ではない」というエッジケースに対応できません。そこで今回は、whileループで文字を順番に調べ、最初に英字が見つかった時点で意図的にループを抜けるという実装を採用しています。

まとめ

ここで紹介したのは、このコーディング課題を解くための一つの方法にすぎません。他にも同じくらい優れた(あるいはそれ以上の)解法が数多くあるはずです。本当に大切なのは、課題の内容が不明確なときには質問して確認すること、そしてエッジケースを常に意識することです。この二つができれば、コーディング試験でもほとんど問題なく合格できるようになるでしょう。健闘を祈ります!

  1. Pythonで文字列内の文字がアルファベットかどうかを判定する方法

    Pythonでは、文字列クラス(str)が持つ isalpha() メソッドを使うことで、文字列がアルファベットのみで構成されているかどうかを簡単に確認できます。このメソッドは、単一の文字がアルファベットかどうかの判定にも利用できます。 特定の位置の文字がアルファベットかどうかを確認する たとえば、文字列の5番目の文字(インデックス4)がアルファベットかどうかを調べたい場合は、次のように記述します。 >>> s = Hello people >>> s[4].isalpha() True 文字列全体がアルファベットのみかどうかを確認する isalpha()

  2. Pythonで文字列を大文字に変換する方法をわかりやすく解説

    Pythonでは、文字列の大文字・小文字を操作するための便利なメソッドがいくつか用意されています。目的に応じて使い分けることで、効率的に文字列を加工できます。 先頭の1文字だけを大文字にする:capitalize()メソッド 文字列の最初の単語の先頭文字だけを大文字にしたい場合は、文字列クラスの capitalize() メソッドを使用します。このメソッドは、先頭以外の文字はすべて小文字に変換される点にも注意してください。 使用例 >>> s = my name >>> s.capitalize() My name スライスを使って手動で大文字にする方法 メ