1

我一直在尝试定义一个函数,它将每个其他字母大写,并在 accout 中使用空格,例如:

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

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

谢谢,奥利

4

5 回答 5

6
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'
于 2013-07-25T18:15:27.240 回答
4

我认为这是常规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'
于 2013-07-25T18:18:53.517 回答
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'
于 2013-07-25T18:21:03.883 回答
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)
于 2013-07-25T18:15:01.810 回答
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)
于 2013-07-25T19:04:55.867 回答