Мені відомо .capitalize () пише великі літери першого рядка, але що робити, якщо перший символ є цілим числом?
це
1bob
5sandy
до цього
1Bob
5Sandy
Мені відомо .capitalize () пише великі літери першого рядка, але що робити, якщо перший символ є цілим числом?
це
1bob
5sandy
до цього
1Bob
5Sandy
Відповіді:
Якщо перший символ є цілим числом, він не буде використовувати великі літери першої літери.
>>> '2s'.capitalize()
'2s'
Якщо вам потрібна функціональність, зніміть цифри, ви можете '2'.isdigit()
перевірити їх для кожного символу.
>>> s = '123sa'
>>> for i, c in enumerate(s):
... if not c.isdigit():
... break
...
>>> s[:i] + s[i:].capitalize()
'123Sa'
next((i for i,e in enumerate(test) if not e.isdigit()), '0')
вирішує це для випадку порожнього рядка
. capitalize
також перетворить інші символи на нижчі. З офіційних документів: "Поверніть версію S, розміщену на заголовку, тобто слова починаються з символів регістру заголовка; всі решта символів, що залишилися, мають малі
Тільки тому, що ніхто більше не згадав про це:
>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
Однак це також дало б
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
тобто він не просто використовує великі літери першого алфавітного символу. Але тоді .capitalize()
є те саме питання, принаймні в тому 'joe Bob'.capitalize() == 'Joe bob'
, так що мех.
Це схоже на відповідь @ Анона тим, що він зберігає решту корпусу рядка неушкодженими, не потребуючи повторного модуля.
def sliceindex(x):
i = 0
for c in x:
if c.isalpha():
i = i + 1
return i
i = i + 1
def upperfirst(x):
i = sliceindex(x)
return x[:i].upper() + x[i:]
x = '0thisIsCamelCase'
y = upperfirst(x)
print(y)
# 0ThisIsCamelCase
Як зазначав @Xan, функція може використовувати більше перевірок помилок (наприклад, перевірка того, що x є послідовністю, однак я пропускаю крайові випадки, щоб проілюструвати техніку)
Оновлено за коментарем @normanius (спасибі!)
Завдяки @GeoStoneMarten, вказуючи, я не відповів на це запитання! -фіксував це
len(x) == 0
гілки.
return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
& title
спочатку промальовуйте цілий рядок, а потім прописуйте лише першу літеру.
a[:1].upper() + a[1:]
, це подбає про len(X)==0
кутовий корпус.
однолінійний: ' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))