tmp, out = "",""
for ch in s:
if ch.isspace() or ch in {",", "."}:
out += "{}{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1], ch) if len(tmp) > 3 else tmp + ch
tmp = ""
else:
tmp += ch
out += "{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1]) if len(tmp) > 3 else tmp
print(out)
a11y,r4m g2d bye
Nếu bạn chỉ muốn ký tự alpha sử dụng str.isalpha:
tmp, out = "", ""
for ch in s:
if not ch.isalpha():
out += "{}{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1], ch) if len(tmp) > 3 else tmp + ch
tmp = ""
else:
tmp += ch
out += "{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1]) if len(tmp) > 3 else tmp
print(out)
a11y,r4m g2d bye
Logic là như nhau cho cả hai, nó chỉ là những gì chúng tôi kiểm tra cho rằng khác, nếu not ch.isalpha()
là False chúng tôi tìm thấy một ký tự không phải alpha vì vậy chúng ta cần xử lý chuỗi tmp và thêm nó vào chuỗi đầu ra. if len(tmp)
không lớn hơn 3
theo yêu cầu, chúng tôi chỉ thêm chuỗi tmp cộng với char hiện tại vào chuỗi ngoài của chúng tôi.
Chúng tôi cần out += "{}{}{}
cuối cùng bên ngoài vòng lặp để bắt khi chuỗi không kết thúc bằng dấu phẩy, dấu cách, v.v. Nếu chuỗi kết thúc bằng không phải alpha, chúng tôi sẽ thêm chuỗi trống để không sự khác biệt cho đầu ra.
chọn này sẽ giữ dấu chấm câu và không gian:
s = "accessibility,random good bye !! foobar?"
def func(s):
tmp, out = "", ""
for ch in s:
if not ch.isalpha():
out += "{}{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1], ch) if len(tmp) > 3 else tmp + ch
tmp = ""
else:
tmp += ch
return "{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1]) if len(tmp) > 3 else tmp
print(func(s,3))
a11y,r4m g2d bye !! f4r?
're' là một chút quá mức cần thiết cho điều này, theo ý kiến của tôi. Tôi chỉ sử dụng 'mystring [0] + str (len (mystring) -2) + mystring [-1]' và 'if' statement để xem khi nào áp dụng này –
@AleksanderLidtke Tôi đã nghĩ về nó nhưng sau đó' mystring 'có những từ riêng biệt (như' khả năng truy cập, tạm biệt, tạm biệt') và không phải là một từ. –
@AleksanderLidtke, còn dấu phẩy thì sao? Làm thế nào để bạn tách các từ? –