我一直在尝试定义一个函数,它会将所有其他字母大写,并且还会占用空格,例如:
print function_name("Hello world")
应该打印“HeLlO wOrLd”而不是“HeLlO WoRlD”
我希望这是有道理的。任何帮助表示赞赏。
谢谢,Oli
答案 0 :(得分:5)
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'
答案 1 :(得分:3)
我认为这是常规for
循环是最好的想法之一:
>>> 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'
答案 2 :(得分:3)
这是一个使用正则表达式的版本:
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'
答案 3 :(得分:0)
这应该可以解决问题:
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)
答案 4 :(得分:0)
一种(希望是优雅的)递归方法:
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)