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
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 回答
1

另一个正则表达式解决方案,只是为了好玩:

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

这匹配单词开头的任何“单词字符”并将它们中的每一个都大写。

于 2013-03-21T21:36:40.077 回答