4

我想编写一个python函数,以便将字符串中单词的第一个和最后一个字母大写。该字符串包含小写字母和空格。我正在考虑做类似的事情:

def capitalize(s):
     s.title()
     s[len(s) - 1].upper()
     return s

但这似乎不起作用。有什么建议么?

例如,字符串“我喜欢猫”应该变成“我喜欢猫”

4

8 回答 8

3

这是一个很好的单线。(为您的高尔夫球手:P)

capEnds = lambda s: (s[:1].upper() + s[1:-1] + s[-1:].upper())[:len(s)]

它演示了当输入为 0 或 1 个字符时解决问题的另一种方法。

它可以很容易地应用于字符串以大写单个单词:

' '.join(map(capEnds, 'I like cats'.split(' '))) 
'I LikE CatS'
于 2013-10-11T02:50:44.843 回答
3
def capitalize(s):
     s, result = s.title(), ""
     for word in s.split():
        result += word[:-1] + word[-1].upper() + " "
     return result[:-1]     #To remove the last trailing space.

print capitalize("i like cats")

输出

I LikE CatS 

应用于title()整个字符串,然后对于字符串中的每个单词,将最后一个字符大写并将它们附加在一起。

于 2013-10-11T02:57:28.430 回答
1

尝试使用切片。

def upup(s):
    if len(s) < 2:
        return s.upper()
    return ''.join((s[0:-1].title(),s[-1].upper())))

编辑:由于 OP 进行了编辑,因此他现在需要对字符串中的每个单词进行此操作...

' '.join(upup(s) for s in 'i like cats'.split())
Out[7]: 'I LikE CatS'
于 2013-10-11T02:28:53.060 回答
1

我对一个有趣的单线的看法:

def cap_both(phrase):
    return ' '.join(map(lambda s: s[:-1]+s[-1].upper(), phrase.title().split()))

演示:

>>> cap_both('i like cats')
'I LikE CatS'
>>> cap_both('a')
'A'
于 2013-10-11T03:19:36.783 回答
0

这就是我们要做的:

  1. 把句子分解成单词
  2. 应用将单词的第一个和最后一个单词大写的函数
  3. 重新组合句子
  4. 写(2)中的函数

所以:

0)

words = "欢迎来到丛林!"

1)

>>> words= words.split()

2)

>>> words = [capitalize(x) for x in words]

3)

>>> words = " ".join(words)

4)

def capitalize(word):
    return word[0].capitalize() + word[1:-1] + word[-1].capitalize()
于 2013-10-11T03:13:13.673 回答
0

试试这个简单易懂的代码,

st = 'this is a test string'

def Capitalize(st):    
    for word in st.split():
        newstring = ''
        if len(word) > 1:
            word = word[0].upper() + word[1:-1] + word[-1].upper()
        else:
            word = word[0].upper()
        newstring += word
        print(word)

而不是调用下面的函数,

Capitalize(st)
于 2018-07-19T11:01:33.763 回答
0

一个非常古老的帖子,但另一个有趣的使用列表理解的衬线:

cap = lambda st: (" ").join([x.title().replace(x[-1], x[-1].upper()) for x in st.split()])

>>> cap("I like cats")
'I LikE CatS'
于 2021-05-28T23:14:11.793 回答
-2

尝试这个 :

n=input("Enter the str: ")

for i in n.split():

    print(i[0].upper() +i[1:-1] +i[-1].upper(),end=' ')
于 2021-11-24T07:02:54.730 回答