在Python中,字符串中每隔一个字母大写一次?
我一直在尝试定义一个函数,该函数将大写每一个字母,并考虑空格,例如:在Python中,字符串中每隔一个字母大写一次?,python,Python,我一直在尝试定义一个函数,该函数将大写每一个字母,并考虑空格,例如: print function\u name(“Hello world”)应该打印“Hello world”而不是“Hello world” 我希望这是有道理的。感谢您的帮助 谢谢你,奥利这应该可以做到: def function_name(input_string): should_capitalize = True chars = [] for single_char in input_string:
print function\u name(“Hello world”)
应该打印“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 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)
我认为这是其中一种情况,常规的
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'
我认为这是其中一种情况,常规的
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'
下面是一个使用正则表达式的版本:
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'
下面是一个使用正则表达式的版本:
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 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)
(希望是优雅的)递归方法:
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)
你的例子有什么不同?对不起,我打错了。我现在已经编辑过了。谢谢你详细解释“使用空格”?@JonClements我想他的意思是,在小写和大写之间交替时,空格不应该算数。你能告诉我们你到目前为止都尝试了什么吗?你的例子之间有什么区别?对不起,我打错了。我现在已经编辑过了。谢谢你详细解释“使用空格”?@JonClements我想他的意思是,在小写和大写之间交替时,空格不应该算数。你能告诉我们你到目前为止尝试了什么吗?请不要重复添加一个字符(
+=
)来创建字符串。演出糟透了。例如,试着将此应用于。@StevenRumbalski您误解了我回答的目的;这只是为了说明OP要求的实现的一般方式。如果OP使用的代码对性能非常敏感,以至于这种字符串串联是不可能的(确实是一种非常罕见的情况),那么他可以研究可变字符串之类的东西。但是,上述方法将保持不变。请不要通过重复添加一个字符(+=
)来创建字符串。演出糟透了。例如,试着将此应用于。@StevenRumbalski您误解了我回答的目的;这只是为了说明OP要求的实现的一般方式。如果OP使用的代码对性能非常敏感,以至于这种字符串串联是不可能的(确实是一种非常罕见的情况),那么他可以研究可变字符串之类的东西。但是,上面概述的方法将保持不变。我认为这是一个避免全局
或非局部
的列表。如果代码在Python3.x上,我将使用非局部
。这里必须是一个列表,因为repl()
函数中的cap=not cap
会给您一个“赋值前引用的局部变量”错误,除非首先使用非局部cap
或全局cap
。我不喜欢使用global
和nonlocal
在Python2.x上不可用。请参见,您也可以在这里使用函数属性,在repl
定义和返回re.sub(…)
之间,您可以放置repl.cap=False
,然后更改每个cap[0]
在repl
中引用repl.cap
。我想这是一个避免global
或nonlocal
的列表。如果代码在Python 3.x上,我会选择nonlocal
。这里必须是一个列表,因为repl()
函数中的cap=not cap
会给您一个“赋值前引用的局部变量”错误,除非首先使用非局部cap
或全局cap
。我不喜欢使用global
和nonlocal
在Python2.x上不可用。请看,您也可以在这里使用函数属性,在repl
定义和返回re.sub(…)
之间,您可以将repl.cap=False
,然后将repl
中的每个cap[0]
引用更改为repl.cap
。谢谢!这很有效。谢谢大家的帮助。“i=True”指的是什么?什么是“我”?谢谢!这很有效。谢谢大家的帮助。“i=True”指的是什么?什么是“我”?