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

时间:2013-07-25 18:07:15

标签: python

我一直在尝试定义一个函数,它会将所有其他字母大写,并且还会占用空格,例如:

print function_name("Hello world")应该打印“HeLlO wOrLd”而不是“HeLlO WoRlD”

我希望这是有道理的。任何帮助表示赞赏。

谢谢,Oli

5 个答案:

答案 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)