Xâu là một dãy các ký tự. Bạn có thể truy cập từng ký tự một với toán tử dấu ngoặc
>>> fruit = 'banana' >>> letter = fruit[1]
Câu lệnh thứ hai chọn ký tự số 1 từ trái cây và gán nó cho chữ cái
Biểu thức trong ngoặc được gọi là chỉ số. Chỉ mục cho biết ký tự nào trong chuỗi bạn muốn [do đó có tên]
Nhưng bạn có thể không nhận được những gì bạn mong đợi
>>> print letter a
Đối với hầu hết mọi người, chữ cái đầu tiên của
>>> letter = fruit[1.5] TypeError: string indices must be integers6 là b, không phải a. Nhưng đối với các nhà khoa học máy tính, chỉ mục là phần bù từ đầu chuỗi và phần bù của chữ cái đầu tiên bằng 0
>>> letter = fruit[0] >>> print letter b
Vậy b là chữ cái thứ 0 [“zero-eth”] của
>>> letter = fruit[1.5] TypeError: string indices must be integers6, a là chữ cái thứ 1 [“one-eth”] và n là chữ cái thứ 2 [“two-eth”]
Bạn có thể sử dụng bất kỳ biểu thức nào, kể cả biến và toán tử, làm chỉ mục, nhưng giá trị của chỉ mục phải là số nguyên. Nếu không thì bạn nhận được
>>> letter = fruit[1.5] TypeError: string indices must be integers
len là một hàm tích hợp trả về số lượng ký tự trong một chuỗi
>>> fruit = 'banana' >>> len[fruit] 6
Để có được chữ cái cuối cùng của một chuỗi, bạn có thể muốn thử một cái gì đó như thế này
>>> length = len[fruit] >>> last = fruit[length] IndexError: string index out of range
Lý do cho IndexError là không có chữ cái nào trong 'chuối' với chỉ số 6. Vì chúng ta bắt đầu đếm từ số 0 nên sáu chữ cái được đánh số từ 0 đến 5. Để có được ký tự cuối cùng, bạn phải trừ 1 từ độ dài
________số 8Ngoài ra, bạn có thể sử dụng chỉ số âm, đếm ngược từ cuối chuỗi. Biểu thức fruit[-1] mang lại chữ cái cuối cùng, fruit[-2] mang lại chữ cái thứ hai cho đến cuối cùng, v.v.
8. 3 Duyệt với vòng lặp for
Rất nhiều tính toán liên quan đến việc xử lý một chuỗi một ký tự tại một thời điểm. Thường thì họ bắt đầu từ đầu, chọn lần lượt từng ký tự, làm điều gì đó với nó và tiếp tục cho đến khi kết thúc. Mô hình xử lý này được gọi là truyền tải. Một cách để viết duyệt là sử dụng vòng lặp while
index = 0 while index < len[fruit]: letter = fruit[index] print letter index = index + 1
Vòng lặp này duyệt qua chuỗi và tự hiển thị từng chữ cái trên một dòng. Điều kiện vòng lặp là chỉ số < len[quả], vì vậy khi chỉ số bằng độ dài của chuỗi, điều kiện là sai và phần thân của vòng lặp không được thực thi. Ký tự cuối cùng được truy cập là ký tự có chỉ số len[fruit]-1, là ký tự cuối cùng trong chuỗi
Bài tập 1 Viết một hàm nhận một chuỗi làm đối số và hiển thị ngược các chữ cái, mỗi chữ cái trên một dòng
Một cách khác để viết tra cứu là sử dụng vòng lặp for
>>> print letter a0
Mỗi lần lặp, ký tự tiếp theo trong chuỗi được gán cho biến char. Vòng lặp tiếp tục cho đến khi không còn ký tự nào
Ví dụ sau đây cho thấy cách sử dụng phép nối [thêm chuỗi] và vòng lặp for để tạo một chuỗi abecedarian [nghĩa là theo thứ tự bảng chữ cái]. Trong cuốn sách Make Way for Ducklings của Robert McCloskey, tên của những chú vịt con là Jack, Kack, Lack, Mack, Nack, Ouack, Pack và Quack. Vòng lặp này xuất các tên này theo thứ tự
>>> print letter a1
đầu ra là
>>> print letter a0
Tất nhiên, điều đó không hoàn toàn đúng vì “Ouack” và “Quack” bị viết sai chính tả
Bài tập 2 Sửa đổi chương trình để khắc phục lỗi này
8. 4 Lát chuỗi
Một đoạn của một chuỗi được gọi là một lát. Chọn một lát tương tự như chọn một ký tự
>>> print letter a1
Toán tử [n. m] trả về một phần của chuỗi từ ký tự “n-eth” đến ký tự “m-eth”, bao gồm ký tự đầu tiên nhưng không bao gồm ký tự cuối cùng. Hành vi này là phản trực giác, nhưng có thể giúp tưởng tượng các chỉ số trỏ giữa các ký tự, như trong sơ đồ sau
Nếu bạn bỏ qua chỉ mục đầu tiên [trước dấu hai chấm], thì lát bắt đầu ở đầu chuỗi. Nếu bạn bỏ qua chỉ mục thứ hai, lát cắt sẽ đi đến cuối chuỗi
>>> print letter a2
Nếu chỉ số đầu tiên lớn hơn hoặc bằng chỉ số thứ hai thì kết quả là một chuỗi rỗng, được biểu thị bằng hai dấu ngoặc kép
>>> print letter a3
Một chuỗi rỗng không chứa ký tự nào và có độ dài bằng 0, ngoài ra, nó giống như bất kỳ chuỗi nào khác
Bài tập 3 Cho rằng trái cây là một chuỗi, trái cây có nghĩa là gì[. ] bần tiện?
8. 5 Chuỗi là bất biến
Thật hấp dẫn khi sử dụng toán tử [] ở bên trái của phép gán, với mục đích thay đổi một ký tự trong một chuỗi. Ví dụ
>>> print letter a4
“Đối tượng” trong trường hợp này là chuỗi và “mục” là ký tự bạn đã cố gán. Hiện tại, một đối tượng giống như một giá trị, nhưng chúng tôi sẽ tinh chỉnh định nghĩa đó sau. Một mục là một trong các giá trị trong một chuỗi
Lý do xảy ra lỗi là do chuỗi không thay đổi được, có nghĩa là bạn không thể thay đổi chuỗi hiện có. Điều tốt nhất bạn có thể làm là tạo một chuỗi mới là biến thể của chuỗi gốc
>>> print letter a5
Ví dụ này nối một chữ cái đầu tiên mới vào một phần lời chào. Nó không ảnh hưởng đến chuỗi gốc
8. 6 Tìm kiếm
Chức năng sau đây làm gì?
>>> print letter a6
Theo một nghĩa nào đó, find ngược lại với toán tử []. Thay vì lấy một chỉ mục và trích xuất ký tự tương ứng, nó sẽ lấy một ký tự và tìm chỉ mục nơi ký tự đó xuất hiện. Nếu không tìm thấy ký tự, hàm trả về -1
Đây là ví dụ đầu tiên chúng ta thấy về câu lệnh return bên trong vòng lặp. Nếu word[index] == letter, hàm thoát ra khỏi vòng lặp và trả về ngay lập tức
Nếu ký tự không xuất hiện trong chuỗi, chương trình sẽ thoát khỏi vòng lặp bình thường và trả về -1
Kiểu tính toán này—đi qua một dãy và quay lại khi chúng ta tìm thấy thứ chúng ta đang tìm kiếm—được gọi là tìm kiếm
Bài tập 4 Sửa đổi find để nó có tham số thứ ba, chỉ mục trong từ nơi nó sẽ bắt đầu tìm kiếm
8. 7 Vòng lặp và đếm
Chương trình sau đếm số lần chữ a xuất hiện trong một chuỗi
>>> print letter a7
Chương trình này trình bày một kiểu tính toán khác được gọi là bộ đếm. Biến đếm được khởi tạo bằng 0 và sau đó tăng lên mỗi khi tìm thấy a. Khi vòng lặp thoát ra, số đếm chứa kết quả—tổng số của a
Bài tập 5
Đóng gói mã này trong một hàm có tên là đếm và tổng quát hóa nó để nó chấp nhận chuỗi và chữ cái làm đối số
Bài tập 6 Viết lại hàm này để thay vì duyệt qua chuỗi, nó sử dụng phiên bản tìm ba tham số từ phần trước
8. 8 phương thức chuỗi
Một phương thức tương tự như một hàm—nó nhận các đối số và trả về một giá trị—nhưng cú pháp thì khác. Ví dụ, phương thức upper lấy một chuỗi và trả về một chuỗi mới với tất cả các chữ hoa
Thay vì cú pháp hàm upper[word], nó sử dụng cú pháp phương thức word. phía trên[]
>>> print letter a8
Dạng ký hiệu dấu chấm này chỉ định tên của phương thức, phần trên và tên của chuỗi để áp dụng phương thức cho từ. Dấu ngoặc đơn trống chỉ ra rằng phương thức này không có đối số
Một cuộc gọi phương thức được gọi là một lời gọi;
Hóa ra, có một phương thức chuỗi tên là find rất giống với hàm mà chúng ta đã viết
>>> print letter a9
Trong ví dụ này, chúng tôi gọi tìm kiếm trên từ và chuyển ký tự mà chúng tôi đang tìm kiếm làm tham số
Thực ra, phương thức find tổng quát hơn hàm của chúng ta;
>>> letter = fruit[0] >>> print letter b0
Nó có thể coi đối số thứ hai là chỉ mục nơi nó sẽ bắt đầu
>>> letter = fruit[0] >>> print letter b1
Và như một đối số thứ ba, chỉ mục nơi nó sẽ dừng lại
>>> letter = fruit[0] >>> print letter b2
Tìm kiếm này không thành công vì b không xuất hiện trong phạm vi chỉ mục từ 1 đến 2 [không bao gồm 2]
Bài tập 7
Có một phương thức chuỗi được gọi là count tương tự như hàm trong bài tập trước. Đọc tài liệu về phương pháp này và viết một lời gọi đếm số lượng như trong
>>> letter = fruit[1.5] TypeError: string indices must be integers6
8. 9 Người điều hành trong
Từ in là một toán tử boolean nhận hai chuỗi và trả về True nếu chuỗi đầu tiên xuất hiện dưới dạng chuỗi con trong chuỗi thứ hai
>>> letter = fruit[0] >>> print letter b3
Ví dụ: hàm sau in tất cả các chữ cái từ word1 cũng xuất hiện trong word2
>>> letter = fruit[0] >>> print letter b4
Với các tên biến được lựa chọn kỹ càng, Python đôi khi đọc như tiếng Anh. Bạn có thể đọc vòng lặp này, “đối với [mỗi] chữ cái trong từ [đầu tiên], nếu [chữ cái] [xuất hiện] trong từ [thứ hai], in [chữ cái]. ”
Đây là những gì bạn nhận được nếu so sánh táo và cam
>>> letter = fruit[0] >>> print letter b5
8. 10 So sánh chuỗi
Các toán tử quan hệ làm việc trên chuỗi. Để xem hai chuỗi có bằng nhau không
>>> letter = fruit[0] >>> print letter b6
Các hoạt động quan hệ khác rất hữu ích để sắp xếp các từ theo thứ tự bảng chữ cái
>>> letter = fruit[0] >>> print letter b7
Python không xử lý chữ hoa và chữ thường giống như cách mọi người làm. Tất cả các chữ cái viết hoa đến trước tất cả các chữ cái viết thường, vì vậy
>>> letter = fruit[0] >>> print letter b8
Một cách phổ biến để giải quyết vấn đề này là chuyển đổi chuỗi sang định dạng chuẩn, chẳng hạn như tất cả chữ thường, trước khi thực hiện so sánh. Hãy ghi nhớ điều đó trong trường hợp bạn phải tự vệ trước một người đàn ông trang bị Quả dứa
8. 11 Gỡ lỗi
Khi bạn sử dụng các chỉ số để duyệt qua các giá trị trong một chuỗi, sẽ rất khó để xác định đúng điểm bắt đầu và điểm kết thúc của quá trình duyệt. Đây là một hàm được cho là so sánh hai từ và trả về True nếu một trong các từ ngược lại với từ kia, nhưng nó có hai lỗi
>>> letter = fruit[0] >>> print letter b9
Câu lệnh if đầu tiên kiểm tra xem các từ có cùng độ dài không. Nếu không, chúng ta có thể trả về Sai ngay lập tức và sau đó, đối với phần còn lại của hàm, chúng ta có thể giả định rằng các từ có cùng độ dài. Đây là một ví dụ về mẫu người giám hộ trong Mục
i và j là các chỉ số. tôi duyệt word1 về phía trước trong khi j duyệt word2 lùi. Nếu chúng tôi tìm thấy hai chữ cái không khớp, chúng tôi có thể trả về Sai ngay lập tức. Nếu chúng tôi vượt qua toàn bộ vòng lặp và tất cả các chữ cái khớp nhau, chúng tôi sẽ trả về True
Nếu chúng tôi kiểm tra chức năng này với các từ “pots” và “stop”, chúng tôi mong đợi giá trị trả về là True, nhưng chúng tôi nhận được IndexError
>>> letter = fruit[1.5] TypeError: string indices must be integers0
Để gỡ lỗi loại lỗi này, bước đầu tiên của tôi là in các giá trị của chỉ số ngay trước dòng xuất hiện lỗi
>>> letter = fruit[1.5] TypeError: string indices must be integers1
Bây giờ khi tôi chạy lại chương trình, tôi nhận được nhiều thông tin hơn
>>> letter = fruit[1.5] TypeError: string indices must be integers2
Lần đầu tiên qua vòng lặp, giá trị của j là 4, nằm ngoài phạm vi của chuỗi
>>> letter = fruit[1.5] TypeError: string indices must be integers9. Chỉ số của ký tự cuối cùng là 3, vì vậy giá trị ban đầu cho j phải là len[word2]-1
Nếu tôi sửa lỗi đó và chạy lại chương trình, tôi nhận được
>>> letter = fruit[1.5] TypeError: string indices must be integers3
Lần này chúng tôi nhận được câu trả lời đúng, nhưng có vẻ như vòng lặp chỉ chạy ba lần, điều này thật đáng ngờ. Để hiểu rõ hơn về những gì đang xảy ra, thật hữu ích khi vẽ sơ đồ trạng thái. Trong lần lặp đầu tiên, khung cho
>>> fruit = 'banana' >>> len[fruit] 60 trông như thế này
Tôi đã lấy một ít giấy phép bằng cách sắp xếp các biến trong khung và thêm các đường chấm để cho thấy rằng các giá trị của i và j chỉ ra các ký tự trong word1 và word2
Bài tập 8 Bắt đầu với sơ đồ này, thực hiện chương trình trên giấy, thay đổi giá trị của i và j trong mỗi lần lặp lại. Tìm và sửa lỗi thứ hai trong chức năng này
vật. Một cái gì đó một biến có thể tham khảo. Hiện tại, bạn có thể sử dụng thay thế cho “đối tượng” và “giá trị”. sự nối tiếp. Một bộ đã đặt hàng; . mục. Một trong các giá trị trong dãy. mục lục. Một giá trị số nguyên được sử dụng để chọn một mục trong một chuỗi, chẳng hạn như một ký tự trong một chuỗi. lát cắt. Một phần của chuỗi được chỉ định bởi một loạt các chỉ số. chuỗi rỗng. Một chuỗi không có ký tự và độ dài 0, được biểu thị bằng hai dấu ngoặc kép. bất biến. Thuộc tính của một chuỗi có các phần tử không thể được chỉ định. đi qua. Để lặp qua các mục theo trình tự, thực hiện thao tác tương tự trên từng mục. Tìm kiếm. Một mô hình di chuyển dừng lại khi tìm thấy những gì nó đang tìm kiếm. phản đối. Một biến được sử dụng để đếm một cái gì đó, thường được khởi tạo bằng 0 và sau đó tăng dần. phương pháp. Một chức năng được liên kết với một đối tượng và được gọi bằng ký hiệu dấu chấm. lời kêu gọi. Một câu lệnh gọi một phương thức8. 13 Bài tập
Bài tập 9
Một lát chuỗi có thể lấy chỉ mục thứ ba chỉ định “kích thước bước;” . Kích thước bước là 2 có nghĩa là mọi ký tự khác;
>>> letter = fruit[1.5] TypeError: string indices must be integers4
Kích thước bước -1 đi qua từ ngược lại, do đó, lát cắt
>>> fruit = 'banana' >>> len[fruit] 61 tạo ra một chuỗi đảo ngược
Sử dụng thành ngữ này để viết phiên bản một dòng của
>>> fruit = 'banana' >>> len[fruit] 62 từ Bài tập
Bài tập 10
Đọc tài liệu về các phương thức chuỗi tại tài liệu. con trăn. org/lib/string-methods. html. Bạn có thể muốn thử nghiệm với một số trong số chúng để đảm bảo rằng bạn hiểu cách chúng hoạt động. dải và thay thế đặc biệt hữu ích
Tài liệu sử dụng một cú pháp có thể gây nhầm lẫn. Ví dụ: trong
>>> fruit = 'banana' >>> len[fruit] 63, dấu ngoặc đơn cho biết đối số tùy chọn. Vì vậy, phụ là bắt buộc, nhưng bắt đầu là tùy chọn và nếu bạn bao gồm bắt đầu, thì kết thúc là tùy chọn
Bài tập 11 Tất cả các hàm sau đây đều nhằm kiểm tra xem một chuỗi có chứa bất kỳ chữ cái viết thường nào không, nhưng ít nhất một số trong số chúng sai. Đối với mỗi chức năng, hãy mô tả chức năng thực sự của chức năng đó [giả sử rằng tham số là một chuỗi].
>>> letter = fruit[1.5] TypeError: string indices must be integers5
Bài tập 12
ROT13 là một dạng mã hóa yếu liên quan đến việc “xoay vòng” mỗi chữ cái trong một từ theo 13 vị trí. Để xoay một chữ cái có nghĩa là dịch chuyển nó qua bảng chữ cái, quay vòng về đầu nếu cần, vì vậy 'A' dịch chuyển 3 là 'D' và 'Z' dịch chuyển 1 là 'A'
Viết một hàm có tên là
>>> fruit = 'banana' >>> len[fruit] 64 nhận một chuỗi và một số nguyên làm tham số và trả về một chuỗi mới chứa các chữ cái từ chuỗi ban đầu được "xoay vòng" theo số lượng đã cho
Ví dụ: “cheer” được xoay 7 là “jolly” và “melon” được xoay 10 là “cubed”
Bạn có thể muốn sử dụng các hàm tích hợp ord, hàm này chuyển đổi một ký tự thành mã số và chr, hàm này chuyển đổi mã số thành ký tự
Những trò đùa có khả năng gây khó chịu trên Internet đôi khi được mã hóa trong ROT13. Nếu bạn không dễ bị xúc phạm, hãy tìm và giải mã một số trong số họ