Существуют библиотеки, которые обеспечивают безопасные арифметические операции, которые проверяют переполнение / недополнение целых чисел. Например, Guava IntMath.checkedAdd (int a, int b) возвращает сумму a
и b
при условии, что она не переполняется, и выбрасывает ArithmeticException
, если a + b
переполняется подписанная int
арифметика.
The .title()
method of a string (either ASCII or Unicode is fine) does this:
>>> "hello world".title()
'Hello World'
>>> u"hello world".title()
u'Hello World'
However, look out for strings with embedded apostrophes, as noted in the docs.
The algorithm uses a simple language-independent definition of a word as groups of consecutive letters. The definition works in many contexts but it means that apostrophes in contractions and possessives form word boundaries, which may not be the desired result:
>>> "they're bill's friends from the UK".title() "They'Re Bill'S Friends From The Uk"
Хотя весь ответ является уже удовлетворительным, но я попытаюсь покрыть 2 дополнительных случая наряду со всем предыдущим случаем.
, если пространства не равномерны и Вы хотите поддержать тот же
string = hello world i am here.
, если вся строка не начинает с алфавитов
string = 1 w 2 r 3g
Здесь, можно использовать это
def solve(s):
a = s.split(' ')
for i in range(len(a)):
a[i]= a[i].capitalize()
return ' '.join(a)
, это даст Вам
output = Hello World I Am Here
output = 1 W 2 R 3g
, я надеюсь, что это не избыточно.
Просто потому, что такие вещи мне нравятся, вот еще два решения:
Разделить на слова, поставить инициалы на каждое слово из разделенных групп и воссоединиться. Это изменит белое пространство, разделяющее слова, на одно пустое пространство, независимо от того, что это было.
s = 'the brown fox'
lst = [word[0].upper() + word[1:] for word in s.split()]
s = " ".join(lst)
РЕДАКТИРОВАТЬ: Я не помню, о чем я думал, когда писал приведенный выше код, но нет необходимости создавать явный список; мы можем использовать выражение-генератор, чтобы делать это лениво. Итак, вот лучшее решение:
s = 'the brown fox'
s = ' '.join(word[0].upper() + word[1:] for word in s.split())
Используйте регулярное выражение для сопоставления начала строки или пробел, разделяющий слова, плюс один непробельный символ; используйте круглые скобки для обозначения «групп соответствия». Напишите функцию, которая принимает объект соответствия и возвращает группу соответствия пробелов без изменений и группу соответствия символов без пробелов в верхнем регистре. Затем используйте re.sub ()
для замены шаблонов. У этого нет проблем с пунктуацией, как в первом решении, и при этом он не переделывает пробелы, как мое первое решение. Этот дает лучший результат.
import re
s = 'the brown fox'
def repl_func(m):
"""process regular expression match groups for word upper-casing problem"""
return m.group(1) + m.group(2).upper()
s = re.sub("(^|\s)(\S)", repl_func, s)
>>> re.sub("(^|\s)(\S)", repl_func, s)
"They're Bill's Friends From The UK"
Я рад, что исследовал этот ответ. Я понятия не имел, что re.sub ()
может принимать функцию! Вы можете выполнить нетривиальную обработку внутри re.sub ()
, чтобы получить окончательный результат!
If str.title() doesn't work for you, do the capitalization yourself.
One-liner:
>>> ' '.join([s[0].upper() + s[1:] for s in "they're bill's friends from the UK".split(' ')])
"They're Bill's Friends From The UK"
Clear example:
input = "they're bill's friends from the UK"
words = input.split(' ')
capitalized_words = []
for word in words:
title_case_word = word[0].upper() + word[1:]
capitalized_words.append(title_case_word)
output = ' '.join(capitalized_words)