Python 中第一个字母要大写,但当数字排在第一位时则不需要大写

问题描述 投票:0回答:4

您需要确保护照上的名字和姓氏以 > 大写字母开头。例如,alison heck > 应正确大写为 Alison Heck注意 在一个单词中,只有第一个字符大写。示例 12abc 当大写时仍为 12abc。

一个测试用例失败,即 输入(标准输入)

1 w 2 r 3g

预期产出

1 W 2 R 3g

我的输出

1 W 2 R 3G

请改进此代码

import math
import os
import random
import re
import sys


def solve(s):
    
    
    x = re.sub("[^A-Za-z0-9]", " ", s)
    a = x.title()
    return a

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    s = input()

    result = solve(s)

    fptr.write(result + '\n')

    fptr.close()
python python-3.x string python-re capitalize
4个回答
1
投票

您可以在空格上输入

split
,然后使用
capitalize
,这会将每个字符串的第一个字符转换为标题大小写。然后你可以再次
join
将这些单词组合在一起。例如:

inp = '1 w 2 r 3g'
res = ' '.join(s.capitalize() for s in inp.split())

输出:

1 W 2 R 3g

0
投票

尝试一个简单的循环,如果前面有空格,则将字符大写。

x = re.sub("[^A-Za-z0-9]", " ", s)
a = x[0]
for i in range(1, len(x)):
    if x[i - 1] == " ":
        a = a + x[i].title()
    else:
        a = a + x[i]
return a

输出是:

1 W 2 R 3g

0
投票

你就不能

str.title()
这个吗?不存在大写数字这样的东西,所以
”123abc”.title()
仍然应该产生您想要的结果。


0
投票

另一个有效的答案,尽管单词之间有多个空格:

# Complete the solve function below.
def solve(s):

    c = ""
    s = s.capitalize()

    for idx, t in enumerate(s):
      x = re.search("^[a-z,A-Z]", t)
    
      if s[idx-1] == ' ' and x:
        c = c + t.capitalize()
      else:
        c = c + t

    return c
© www.soinside.com 2019 - 2024. All rights reserved.