【ページ更新日:2020年10月27日】
毎日Pythonでは、簡単なPythonのプログラムコードを紹介していきます。
今日のプログラムはAtCorder2019の問題を使用しています。
競技用プログラミングの問題になります。
問題
問題は次のとおりです。
文字列Sが与えられる。これは、1つ以上の単語を (間に空白などを挟まずに) 連結したものである。
ここで、各単語は2文字以上であり、最初の文字と最後の文字のみが英大文字、それ以外の文字は全て英小文字である。これらの単語を辞書順に並べ (大文字小文字の違いは無視する)、同様に連結して出力するプログラムを作成せよ。
例えば、S=FisHDoGCaTAAAaAAbCACとする。これは FisH, DoG, CaT, AA, AaA, AbC, ACの7つの単語を連結したものである。これらを辞書順に並べると AA, AaA, AbC, AC, CaT, DoG, FisH となるため、AAAaAAbCACCaTDoGFisH と出力すればよい。
AtCorder 第一回アルゴリズム実技検定過去問2019年12月F問題
プログラムコード
問題の解答となるコードは次のとおりです。
※間違いの指摘やアドバイスなどあれば教えてください。
S1 = input("文字列を入力してください >>> ") S2 = [] checker = 0 for i in range(len(S1)): S2.append(S1[i]) if S1[i].isupper(): checker += 1 if checker%2==0: S2.append(',') S2 = "".join(S2) S2 = S2.split(',') del S2[-1] S2 = sorted(S2,key = str.lower) print(''.join(S2))
ポイント
今回のPythonコードのポイントは次の点です。
- リストの要素数を取得する:len
- 大文字判定をする:isupper
- リストの要素を連結する:join
- リストを区切る:split
- リストの最後の要素を削除する:del
- 辞書順にソートする:sorted
リストの要素数を取得する:len
len関数を使用することで、リストや文字列などの要素数や文字数を取得することができます。
たとえば、次のようにするとリストの要素数や文字列の文字数を取得することができます。
list = ['a','b','c','d','e'] print(len(list)) # => 5 Str = "Python" print(len(Str)) # => 6
今回のコードでは、len関数を次のように使用しました。
S1 = input("文字列を入力してください >>> ") ... for i in range(len(S1)):
上記の場合、len関数は「input関数で取得した文字列の文字数」を返します。
その文字数がfor文に使用されているため、取得した文字列の文字数分、繰り返し処理を行うことになります。
大文字判定をする:isupper
isupperメソッドはstrクラスが標準でもっているメソッドです。
すべての文字列型で使用することができます。
isupperメソッドは、文字列のすべてが大文字かどうか判定するメソッドです。
次のように、文字列のすべてが大文字の場合、Trueを返します。
Str1 = "PYTHON" print(Str1.isupper()) # => True
次のように、文字列のすべてが大文字ではない場合、Falseを返します。
Str2 = "Python" print(Str2.isupper()) # => False
今回の解答コードでは、isupperメソッドを次のように使用しました。
S1 = input("文字列を入力してください >>> ") ... for i in range(len(S1)): S2.append(S1[i]) if S1[i].isupper(): checker += 1
上記のコードでは、input関数で取得した文字列を先頭の文字から確認し、大文字を判定した場合は、変数checkの値を増やしています。
今回の問題では、文字列中に存在する複数の単語を区別するために、「単語の最初と最後が大文字」という条件を使用し、2回大文字を判定するごとに文字列を区切る必要がありました。そのために、このような処理をしています。