s = 'the brown fox'
...在这里做点什么……
S应为:
'The Brown Fox'
最简单的方法是什么?
s = 'the brown fox'
...在这里做点什么……
S应为:
'The Brown Fox'
最简单的方法是什么?
当前回答
一个快速函数适用于python3
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> capitalizeFirtChar = lambda s: s[:1].upper() + s[1:]
>>> print(capitalizeFirtChar('помните своих Предковъ. Сражайся за Правду и Справедливость!'))
Помните своих Предковъ. Сражайся за Правду и Справедливость!
>>> print(capitalizeFirtChar('хай живе вільна Україна! Хай живе Любовь поміж нас.'))
Хай живе вільна Україна! Хай живе Любовь поміж нас.
>>> print(capitalizeFirtChar('faith and Labour make Dreams come true.'))
Faith and Labour make Dreams come true.
其他回答
.title()方法不能很好地工作,
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
试试string.capwords()方法,
import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"
来自Python capwords文档:
使用str.split()将参数拆分为单词,使用str.capitalize()将每个单词大写,并使用str.join()连接大写的单词。如果可选的第二个参数sep不存在或为None,则空白字符的运行将被单个空格替换,并且前导和尾部的空白将被删除,否则sep用于分隔和连接单词。
对你的问题最简单的解决方法,在我的情况下是有效的:
import string
def solve(s):
return string.capwords(s,' ')
s=input()
res=solve(s)
print(res)
如果你只想知道第一个字母:
>>> 'hello world'.capitalize()
'Hello world'
但是每个单词都要大写:
>>> 'hello world'.title()
'Hello World'
使用非均匀空格将字符串大写
我想补充一下@Amit Gupta关于非均匀空间的观点:
从最初的问题中,我们想要大写字符串s = 'the brown fox'中的每个单词。如果字符串s = 'the brown fox'有不均匀的空格。
def solve(s):
# If you want to maintain the spaces in the string, s = 'the brown fox'
# Use s.split(' ') instead of s.split().
# s.split() returns ['the', 'brown', 'fox']
# while s.split(' ') returns ['the', 'brown', '', '', '', '', '', 'fox']
capitalized_word_list = [word.capitalize() for word in s.split(' ')]
return ' '.join(capitalized_word_list)
这里总结了不同的方法,以及一些需要注意的陷阱
它们将适用于所有这些输入:
"" => ""
"a b c" => "A B C"
"foO baR" => "FoO BaR"
"foo bar" => "Foo Bar"
"foo's bar" => "Foo's Bar"
"foo's1bar" => "Foo's1bar"
"foo 1bar" => "Foo 1bar"
Splitting the sentence into words and capitalizing the first letter then join it back together: # Be careful with multiple spaces, and empty strings # for empty words w[0] would cause an index error, # but with w[:1] we get an empty string as desired def cap_sentence(s): return ' '.join(w[:1].upper() + w[1:] for w in s.split(' ')) Without splitting the string, checking blank spaces to find the start of a word def cap_sentence(s): return ''.join( (c.upper() if i == 0 or s[i-1] == ' ' else c) for i, c in enumerate(s) ) Or using generators: # Iterate through each of the characters in the string # and capitalize the first char and any char after a blank space from itertools import chain def cap_sentence(s): return ''.join( (c.upper() if prev == ' ' else c) for c, prev in zip(s, chain(' ', s)) ) Using regular expressions, from steveha's answer: # match the beginning of the string or a space, followed by a non-space import re def cap_sentence(s): return re.sub("(^|\s)(\S)", lambda m: m.group(1) + m.group(2).upper(), s)
现在,这些是其他一些被发布的答案,如果我们将一个单词定义为句子的开头或空格后的任何东西,输入就不会像预期的那样工作:
.title () 返回s.title () #不需要的输出: "foO baR" => "foO baR" "foo's bar" => "foo's bar" "foo's1bar" => "foo's1bar" "foo 1bar" => "foo 1bar"
.capitalize()或.capwords() 返回' '.join(w.r esize () for s.split()中的w) #或 进口的字符串 返回string.capwords(年代) #不需要的输出: "foO baR" => "foO baR" "foo bar" => "foo bar" 使用' '作为分割将修复第二个输出,但不能修复第一个输出 返回' '.join(w.r esize () for w in s.s split(' ')) #或 进口的字符串 返回字符串。大写字符(s, ' ') #不需要的输出: "foO baR" => "foO baR"
.upper () 注意使用多个空格,这可以通过使用' '进行分割来修复(如答案顶部所示) 返回' ' . join (w [0] .upper () + w (1:) w s.split ()) #不需要的输出: "foo bar" => "foo bar"