- 在Python中用字符串中的每个其他字母大写?

  显示原文与译文双语对照的内容

我一直在试图定义一个函数,它将每个它的他字母的大小写成一个空格,例如:

print function_name("Hello world") 应该打印英镑的"Hello World",而不是英镑的"Hello World"

我希望这有意义。 感谢你的帮助。

时间:


def foo(s):


 ret =""


 i = True # capitalize


 for char in s:


 if i:


 ret += char.upper()


 else:


 ret += char.lower()


 if char!= ' ':


 i = not i


 return ret



>>> print foo("hello world")


HeLlO wOrLd'



我认为这是其中一个常规for -loop是最好的想法:


>>> def f(s):


... r = ''


... b = True


... for c in s:


... r += c.upper() if b else c.lower()


... if c.isalpha():


... b = not b


... return r


...


>>> f('Hello world')


'HeLlO wOrLd'



以下是使用 正规表达式的版本:


import re



def alternate_case(s):


 cap = [False]


 def repl(m):


 cap[0] = not cap[0]


 return m.group(0).upper() if cap[0] else m.group(0).lower()


 return re.sub(r'[A-Za-z]', repl, s)



例如:


>>> alternate_case('Hello world')


'HeLlO wOrLd'



这应该有窍门:


def function_name(input_string):


 should_capitalize = True


 chars = []


 for single_char in input_string:


 if not single_char.isalpha():


 chars.append(single_char)


 continue



 if should_capitalize:


 chars.append(single_char.upper())


 else:


 chars.append(single_char.lower())



 should_capitalize = not should_capitalize



 return ''.join(chars)



( 希望优雅) 递归方法:


def funky_cap(s, use_lower=False):


 if s == '':


 return s


 elif not s[0].isalpha():


 return s[0] + funky_cap(s[1:], use_lower)


 elif use_lower:


 return s[0].lower() + funky_cap(s[1:], not use_lower)


 else: # when we need an uppercase letter


 return s[0].upper() + funky_cap(s[1:], not use_lower)



...