我一直在試圖定義將利用其他字母,並採取空間到戶頭例如功能:Python中的字符串中的每一個字母大寫?
print function_name("Hello world")
應打印的「Hello World」而非的「Hello World」
我希望這是有道理的。任何幫助表示讚賞。
感謝,奧利
我一直在試圖定義將利用其他字母,並採取空間到戶頭例如功能:Python中的字符串中的每一個字母大寫?
print function_name("Hello world")
應打印的「Hello World」而非的「Hello World」
我希望這是有道理的。任何幫助表示讚賞。
感謝,奧利
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'
謝謝!這很好。感謝其他人的幫助。 – Perceptic
這應該做的伎倆:
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
-loop是最好的辦法之一:
>>> 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'
請不要通過重複添加一個字符('+ =')來創建字符串。表現糟糕。例如,嘗試將其應用於[戰爭與和平](http://www.gutenberg.org/files/2600/2600.txt)。 –
@StevenRumbalski你誤解了我答案的目的;它只是爲了顯示OP所要求的一般方式。如果OP使用的代碼性能敏感,以至於這樣的字符串連接不存在問題(確實是非常罕見的情況),那麼他可以查看類似可變字符串的內容。但是,上述方法將保持不變。 – arshajii
以下是使用正則表達式的版本:
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'
爲什麼'cap'是一個列表? – arshajii
我想這是一個避免'global'或'nonlocal'的列表。 –
如果代碼在Python 3.x上,我會用'nonlocal'代替。它必須是一個列表,因爲'repl()'函數中的'cap = not cap'就會給你一個「在賦值之前引用的局部變量」錯誤,除非首先使用'nonlocal cap'或'global cap'。我不喜歡使用'global',並且'nonlocal'在Python 2.x上不可用。請參閱http://stackoverflow.com/a/8934902/505154 –
A(希望優雅)遞歸方法:
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)
請告訴我你的例子之間的差異? –
對不起,我輸入了錯誤。我現在編輯它。謝謝 – Perceptic
向我們顯示您的代碼 – Stephan