Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,字符串中每隔一个字母大写一次?_Python - Fatal编程技术网

在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”指的是什么?什么是“我”?