0

私の演習は、関数と同じようにstr.title()機能する関数を作成することです。これが私のこれまでの貧弱な解決策です

def my_title(s):
  list = []

  for char in s:        
      if char.isalpha():
         char = char.lower()
      list.append(char)

  for n in range(0,len(list)):
      if list[n].isalpha():
          list[n]=list[n].upper()
          break

  return ''.join(list)

これを1ループにリファクタリングできますか?

4

3 に答える 3

2

これより簡単にできますか?

def my_title(s):
    l = ''
    for n in range(0,len(s)):
        l += s[n].lower() if n and s[n-1].isalpha() else s[n].upper()
    return l
于 2013-03-21T20:23:37.370 に答える
1

楽しみのための別の正規表現ソリューション:

re.sub(r'\b\w', lambda m: m.group(0).upper(), s.lower())

これは、単語の先頭にある任意の「単語文字」と一致し、それぞれを大文字にします。

于 2013-03-21T21:36:40.077 に答える
1
s = list("1 33333ddedeEEEEE34343")
caps_flag = True
for i,c in enumerate(s):
    if c.isalpha():
        if caps_flag:
            caps_flag = False
            s[i] = c.upper()
        else:
            s[i] = c.lower()

print ''.join(s)

FatalError のコメントに基づくより良いバージョン

s = list("1 33333ddedeEEEEE34343".lower())
for i,c in enumerate(s):
    if c.isalpha():
        s[i] = c.upper()
        break


print ''.join(s)
于 2013-03-21T20:04:49.720 に答える