2015-08-02 2 views
-1

Я хотел заглавной кулак письмо строки, но оставить остальныезаглавной первую букву строки, не касаясь других

Что у меня есть: Racecar

Что я хочу: Racecar

+0

Существует несколько ответов на это по адресу http://stackoverflow.com/questions/12410242/python-capitalize-first-letter-only. Использование функций capize() и title() - это типичные ответы, например. 'racEcar'.ititle() и' racEcar'.capitalize(). –

+0

@TrisNefzger: и оба будут ошибочными в этом вопросе, так как эти методы очерчивают остальные. –

+0

можете ли вы получить пустые строки? –

ответ

2

Тогда просто заглавной первую букву с str.upper() и сцепить остальное без изменений

string[0].upper() + string[1:] 

Демо:

>>> string = 'racEcar' 
>>> string[0].upper() + string[1:] 
'RacEcar' 
+0

О, спасибо большое –

1

Вы должны делать, как предполагает Мартейн, но, чтобы сделать вашу функцию более надежной, нарежьте до первой буквы, так что вы не ошибка на пустой строке:

>>> rc = 'racEcar' 
>>> newrc = rc[:1].upper() + rc[1:] 
>>> newrc 
'RacEcar' 

так определить функцию, которая делает это:

def capfirst(s): 
    return s[:1].upper() + s[1:] 

, а затем:

>>> capfirst(rc) 
'RacEcar' 
>>> capfirst('') 
'' 
+1

Если вы не хотите, чтобы была ошибка, если строка пуста, конечно. –

+0

Если это действительно условие ошибки, то, конечно, но мне нравится кодировать [Принцип надежности] (https://en.wikipedia.org/wiki/Robustness_principle) –

0

Это уже было указано, но я решил показать его.

Использование capitalize() делает то, что вы хотите, без дополнительной работы. Например,

def Cap1(string): 
    # will not error if empty, and only does the first letter of the first word. 
    return string.capitalize() 

Использование title() может потребовать дополнительной работы, если у вас есть несколько слов. Например,

давайте предположим, что ваша строка: «Я хочу пиццу»

def cap2(string): 
    return string.title() 

Выход был бы: «Я хочу пиццу»

Другим способом вы можете использовать upper() является:

def cap3(string): 
    if not len(string) == 0: 
     return string[0].upper()