Lỗi nào được tạo khi một ký tự trong biến chuỗi được sửa đổi trong python

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 integers
6 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 integers
6, 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ố 8

Ngoà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
a
0

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
a
1

đầu ra là

>>> print letter
a
0

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
a
1

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
a
2

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
a
3

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
a
4

“Đố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
a
5

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
a
6

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
a
7

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
a
8

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
a
9

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
b
0

Nó có thể coi đối số thứ hai là chỉ mục nơi nó sẽ bắt đầu

>>> letter = fruit[0]
>>> print letter
b
1

Và như một đối số thứ ba, chỉ mục nơi nó sẽ dừng lại

>>> letter = fruit[0]
>>> print letter
b
2

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 integers
6

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
b
3

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
b
4

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
b
5

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
b
6

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
b
7

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
b
8

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
b
9

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 integers
0

Để 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 integers
1

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 integers
2

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 integers
9. 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 integers
3

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]
6
0 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ức

8. 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 integers
4

Kích thước bước -1 đi qua từ ngược lại, do đó, lát cắt

>>> fruit = 'banana'
>>> len[fruit]
6
1 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]
6
2 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]
6
3, 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 integers
5

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]
6
4 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ọ

Chủ Đề