Tôi biết .capitalize () viết hoa chữ cái đầu tiên của chuỗi nhưng nếu ký tự đầu tiên là số nguyên thì sao?
điều này
1bob
5sandy
đến đây
1Bob
5Sandy
Tôi biết .capitalize () viết hoa chữ cái đầu tiên của chuỗi nhưng nếu ký tự đầu tiên là số nguyên thì sao?
điều này
1bob
5sandy
đến đây
1Bob
5Sandy
Câu trả lời:
Nếu ký tự đầu tiên là một số nguyên, nó sẽ không viết hoa chữ cái đầu tiên.
>>> '2s'.capitalize()
'2s'
Nếu bạn muốn chức năng, loại bỏ các chữ số, bạn có thể sử dụng '2'.isdigit()
để kiểm tra từng ký tự.
>>> 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')
giải quyết nó cho trường hợp chuỗi trống
. capitalize
cũng sẽ biến đổi các ký tự khác để hạ thấp. Từ các tài liệu chính thức: "Trả về một phiên bản chuẩn của S, tức là các từ bắt đầu bằng các ký tự trường hợp tiêu đề, tất cả các ký tự được viết còn lại có chữ thường. "
Chỉ bởi vì không ai khác đã đề cập đến nó:
>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
Tuy nhiên, điều này cũng sẽ cung cấp cho
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
tức là nó không chỉ viết hoa ký tự chữ cái đầu tiên. Nhưng sau đó .capitalize()
có cùng một vấn đề, ít nhất là trong đó 'joe Bob'.capitalize() == 'Joe bob'
, vì vậy meh.
Điều này tương tự như câu trả lời của @ Anon ở chỗ nó giữ nguyên phần còn lại của chuỗi, mà không cần mô-đun re.
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
Như @Xan đã chỉ ra, hàm có thể sử dụng nhiều kiểm tra lỗi hơn (chẳng hạn như kiểm tra x là một chuỗi - tuy nhiên tôi đang bỏ qua các trường hợp cạnh để minh họa kỹ thuật)
Cập nhật mỗi bình luận @normanius (cảm ơn!)
Cảm ơn @GeoStoneMarten đã chỉ ra rằng tôi đã không trả lời câu hỏi! bắt đầu từ
len(x) == 0
chi nhánh.
return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
& title
đầu tiên viết thường toàn bộ chuỗi và sau đó chỉ viết hoa chữ cái đầu tiên.
a[:1].upper() + a[1:]
, điều này sẽ chăm sóc các len(X)==0
trường hợp góc.
Như được thấy ở đây được trả lời bởi Chen Houwu, có thể sử dụng gói chuỗi:
import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"