大写连字符名称

Capitalizing hyphenated name

我有一个如下所示的脚本:

firstn = input('Please enter your first name: ') 
lastn = input('Please enter Your last name: ') 
print('Good day, ' + str.capitalize(firstn) + ' ' + str.capitalize(lastn)+ '!')

它可以很好地处理像 jack black 或 morgan meeman 这样的简单名字,但是当我输入像 jordan-bellfort image 这样的带连字符的名字时,我期望 "Jordan-Bellfort Image" 但我收到 "Jordan-bellfort Image"

如何让 python 将连字符后的字符大写?

您可以使用 title():

print('Good day,', firstn.title(), lastn.title(), '!')

来自控制台的示例:

>>> 'jordan-bellfort image'.title()
'Jordan-Bellfort Image'

改用string.capwords()

Split the argument into words using str.split(), capitalize each word using str.capitalize(), and join the capitalized words using str.join()

import string
string.capwords(firstn, "-")

我建议只使用 str.title,这是一个比较您的版本和使用 str.title 方法的工作示例:

import string

tests = [
    ["jack", "black"],
    ["morgan", "meeman"],
    ["jordan-bellfort", "image"]
]

for t in tests:
    firstn, lastn = t
    print('Good day, ' + str.capitalize(firstn) +
          ' ' + str.capitalize(lastn) + '!')
    print('Good day, ' + firstn.title() + ' ' + lastn.title() + '!')
    print('-'*80)

结果为:

Good day, Jack Black!
Good day, Jack Black!
--------------------------------------------------------------------------------
Good day, Morgan Meeman!
Good day, Morgan Meeman!
--------------------------------------------------------------------------------
Good day, Jordan-bellfort Image!
Good day, Jordan-Bellfort Image!
--------------------------------------------------------------------------------

这是一个真正的问题!用 .title() 之类的似乎很容易解决,但这些建议并没有解决处理任何人名的实际问题。如 McCormackO'Briende Araugo.

幸运的是,这个问题已经解决了。参见 nameparser

>>> from nameparser import HumanName
>>> name = HumanName('Shirley Maclaine') # Don't change mixed case names
>>> name.capitalize(force=True)
>>> str(name)
'Shirley MacLaine'