我需要构建一个函数来仅转换第一个字符,来自任何单词,但是如果单词中的第一个字符不是以字符开头,则此函数需要解决问题,例如' _sun&# 39;,' -tree',' 2cat'这些话需要像_Sun,-Tree,2Cat。这是我到目前为止,它可以转换任何单词,但我不知道如何做第二部分,需要使用ASCII?获取第一个字符的值并查看该单词是否以字符开头?
def convert(capital):
return capital[0].upper() + capital[1:]
def main():
print(convert('sun'))
main()
答案 0 :(得分:3)
无论如何,您的函数会将第一个字符大写。
对于此任务,您必须以不同的方式找到第一个字符;你可以使用str.isalpha()
function:
def convert(capital):
index = 0
while index < len(capital) and not capital[index].isalpha():
index += 1
return capital[:index] + capital[index:].capitalize()
另一种方法是使用regular expression-based substitution;你必须使用一个函数来大写找到的字符:
import re
def convert(capital):
return re.sub(r'([a-z])(.*)$', lambda m: m.group(1).upper() + m.group(2),
capital, flags=re.I)
这在第一个字母上不区分大小写,并用大写版本替换它。
第三个想法是使用str.title()
,它对文本中的所有单词执行相同操作,但仅将其应用于第一个单词:
def convert(capital):
first, _, rest = capital.partition(' ')
return '{} {}'.format(first.title(), rest)
答案 1 :(得分:2)
一种选择是使用正则表达式并将其限制为1次替换,例如:
>>> import re
>>> re.sub('[a-zA-Z]', lambda m: m.group().upper(), '2cat', 1)
'2Cat'
>>> re.sub('[a-zA-Z]', lambda m: m.group().upper(), 'sun', 1)
'Sun'
答案 2 :(得分:0)
你似乎只有一个单词以字母开头或第二个字符是一个字母,所以你只有两种可能性:
print(s.capitalize() if s[0].isalpha() else s[0] + s[1:].capitalize())