学習コードテスト5


ラーニングコーディングテスト


Programmers - level1


新しいIDの推奨


python 3


Problem:






My Solution:

import string
import re

def solution(new_id):
    answer = ''
    answer = new_id.lower()
    
    symbols = string.punctuation.replace("-", "").replace("_","").replace(".","")
    for symbol in symbols:
        answer = answer.replace(symbol, "")
    
    # answer.replace("..", ".")
    answer = re.sub("[.]+",".", answer)
    
    if answer[0] == ".":
        answer = answer[1:]
    # if answer[-1] == ".":
    if len(answer) > 0 and answer[-1] == ".":
        answer = answer[:-1]
    
    if answer == "":
        answer = "a"
    
    if len(answer) >= 16:
        answer = answer[:15]
    # if answer[-1] == ".":
    if len(answer) > 0 and answer[-1] == ".":
        answer = answer[:-1]
    
    if len(answer) <= 2:
        while len(answer) != 3:
            answer += answer[-1]
    
    return answer
問題を読むときは正規表現を使うべきだと思います.
しかし、正規表現の使い方を覚えていないため、長い間悩んでいました.
これを探してString句読点がわかった
正規表現がなくても特殊文字をフィルタできます.
連続」.削除されたコードは次のとおりです.
answer.replace("..", “.”この繰り返しはフィルタリングできないと思うので、正規表現を使いました.
でもwhile loopで解決した人もいました...
そして最後.削除したコードはresponse[1]を使用しており、文字列の長さが0の場合はエラーが発生するため、文字列の長さを一緒に選択に変更します.

Better Solution

import re

def solution(new_id):
    st = new_id
    st = st.lower()
    st = re.sub('[^a-z0-9\-_.]', '', st)
    st = re.sub('\.+', '.', st)
    st = re.sub('^[.]|[.]$', '', st)
    st = 'a' if len(st) == 0 else st[:15]
    st = re.sub('^[.]|[.]$', '', st)
    st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))])
    return st
こんな簡単に終わる人もいますが….
正規表現の達人ですか...
for c in new_id:
        if c.isalpha() or c.isdigit() or c in ['-', '_', '.']:
            answer += c
ライブラリを追加しないで、このように特殊文字をフィルタする人もいます.
いつか他のソリューションとして記録され、より良いソリューションではないことを望んでいます.
がんばってください.