毎朝ちびちびCodewars。
String incrementer [5級] www.codewars.com
今日のお題:
""" increment_string(strng) Args: strng (str): Returns: 加工後のstrng (str): - 文字列の末尾が数字なら、数字部分を 数値に1を足した文字列に変換する。 ただし、数字部分の桁数は維持する。 - 末尾が数字以外なら末尾に「1」を追加する """
コード
me
自分のコード
def increment_string(strng): if not strng: # 空かNone return '1' elif strng.isdecimal(): # 全部数字 return str(int(strng)+1).zfill(len(strng)) for i, s in enumerate(reversed(strng)): # 右から一文字ずつ拾って数字以外に当たるまで繰り返す if s.isdecimal(): # 数字だったら次の一文字へ。 continue elif i == 0: # 全部数字以外の文字 return strng + '1' else: # sは数字以外の文字 str_f = strng[0:(len(strng)-1-i)] str_e = str(int(strng[len(strng)-i:])+1).zfill(i) return str_f + s + str_e
awesome
他ユーザーのエレガントな解法。
def increment_string(strng): head = strng.rstrip('0123456789') tail = strng[len(head):] if tail == "": return strng+"1" return head + str(int(tail) + 1).zfill(len(tail))
コードも変数の命名もスマートで、軽く嫉妬した。^^;
文法、メソッドnote
変数名の英語
- head - tail: 先頭 - 末尾文字列
利用メソッド
標準ライブラリ > 組み込み型 > 文字列メソッド
https://docs.python.org/ja/3/library/stdtypes.html#string-methods
str.rstrip(chars)
- strの末尾から、charsに含まれる文字を除去した文字列を返す。
- chrs無指定(or None)なら空白文字を除去する。
str.zfill(width)
- width桁でゼロパディング(ゼロ埋め)した文字列を返す。対象(str)は
- 数値でなく文字列。先頭が符号接頭辞 ('+'/'-') なら、 '0' は符号の後ろ に挿入される。width が len(s) 以下なら元の文字列を返す。