Hướng dẫn how do you do an arithmetic operation on a string in python? - làm thế nào để bạn thực hiện một phép toán số học trên một chuỗi trong python?
Python cho phép các nhà phát triển sử dụng các toán tử số học phổ biến trên các chuỗi. Sự thao túng dữ liệu văn bản ở cấp độ cao này là một trong nhiều lý do Python đã nổi tiếng. Một ví dụ về điều này là khả năng sử dụng các toán tử số học để thao tác các chuỗi trong Python. Show
Mặc dù thuận tiện, có một số hạn chế đối với việc sử dụng các toán tử số học như cộng, trừ, cộng với công bằng và thậm chí cả các toán tử nhân trên chuỗi. Ví dụ: nhân một chuỗi với một float sẽ dẫn đến kiểu loại: có thể nhân chuỗi nhân với ngoại lệ không phải là loại ’float.TypeError: can’t multiply sequence by non-int of type ‘float’ exception. Điểm nổi bậtTrong bài viết này, chúng tôi xem xét một số trường hợp sử dụng để áp dụng các toán tử số học vào chuỗi Python. Các cuộc thảo luận sẽ bao gồm một số trường hợp phổ biến, các trường hợp nâng cao và cả các vấn đề phổ biến. Cuối cùng, chúng tôi sẽ đề cập như sau:
Trước khi chúng ta đi sâu, trước tiên chúng ta hãy xem xét bản chất của chuỗi Python. Cụ thể, chúng ta sẽ thảo luận ngắn gọn về việc các chuỗi Python là bất biến, điều đó có nghĩa là gì và ý nghĩa này đối với việc thực hiện các hoạt động số học dựa trên chuỗi. Giới thiệu nhanh: Hiểu chuỗi PythonChuỗi Python khác với các chuỗi trong nhiều ngôn ngữ khác. Không cần lặn sâu vào các chi tiết, điều quan trọng là cần lưu ý các điểm sau về chuỗi Python:
Ví dụ 0: Chuỗi là bất biếnĐây không phải là một ví dụ về nhân, thêm hoặc trừ các chuỗi. Tuy nhiên, điểm này rất cần thiết để hiểu cách các chuỗi được lưu trữ và truy cập trong Python mà nó phải được thảo luận. Xem xét ví dụ sau: # example of number mutability a = 5 print(a) a += 1 print(a) # output 5 6 Điều này cho thấy một biến # Create an example string s1 = "alpharithms" print(s1) # concatenate some text s1 += " is cool." print(s1) # output alpharithms alpharithms is cool.7 được gán giá trị số nguyên là # Create an example string s1 = "alpharithms" print(s1) # concatenate some text s1 += " is cool." print(s1) # output alpharithms alpharithms is cool.8 sau đó, thông qua toán tử # Create an example string s1 = "alpharithms" print(s1) # concatenate some text s1 += " is cool." print(s1) # output alpharithms alpharithms is cool.9 (tương đương với # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment0), giá trị được tăng lên bởi 1 kết quả là giá trị cuối cùng là 6. Điều này được xác nhận thông qua đầu ra từ 2 # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment1 . Trong hầu hết các ngôn ngữ lập trình khác, sẽ rất điên rồ khi xem xét thực hiện một thao tác như vậy thành một chuỗi. Hãy để xem Python xử lý nó như thế nào: # Create an example string s1 = "alpharithms" print(s1) # concatenate some text s1 += " is cool." print(s1) # output alpharithms alpharithms is cool. Ở đây chúng tôi thấy văn bản bổ sung được thêm vào biến # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment2. Nó & nbsp; có vẻ như chúng ta đang đột biến một chuỗi nhưng thực sự chúng ta thì không. Thay vào đó, chúng tôi chỉ đơn giản là chỉ định lại một giá trị mới cho các biến # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment2. Hãy để xem những gì xảy ra nếu chúng ta cố gắng đột biến một chuỗi trực tiếp trong Python: # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment Ở đây chúng tôi có được cái nhìn đầu tiên về bản chất bất biến của chuỗi Python. Một ngoại lệ # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment4 được nêu ra khi cố gắng trực tiếp thao tác một giá trị có trong một mảng chuỗi Python. Điều này trái ngược hoàn toàn với cách người ta có thể điều khiển các mảng của các giá trị số - hoặc thậm chí các mảng ký tự. Xem xét mã sau: # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5] Ở đây chúng tôi thấy đầu ra phản ánh những thay đổi của chúng tôi mà không có bất kỳ ngoại lệ nào được nêu ra. Điều này & nbsp; loại minh họa cách các chuỗi python là các mảng đặc biệt của Hồi giáo trong đó dữ liệu chứa của chúng không thể được thao tác. Để có một lần lặn sâu hơn, hãy đọc bài viết này. & NBSP; nhận ra đơn giản về tính bất biến của chuỗi Python là đủ cho cuộc thảo luận của chúng tôi ở đây. Ví dụ 1: Sự kết hợp dựa trên toán tử số họcPython cho phép sử dụng các toán tử số học được sử dụng để thao tác chuỗi. Điều này cho phép bổ sung, trừ và thậm chí phép nhân các chuỗi diễn ra thông qua các toán tử phổ biến như # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment5 và & NBSP; # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment6, cũng như toán tử chuyển nhượng, nhưng không phải # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment7 hoặc # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment8. Chúng tôi sẽ xem xét những trường hợp cuối cùng trong giây lát. Hiện tại, hãy để Lừa xem xét những người khác: # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool Ở đây chúng tôi thấy đầu ra giống hệt nhau cho dù chúng tôi có thêm một chuỗi mới thông qua gán cho một biến mới # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment9 hay ngầm thông qua toán tử # Create an example string s1 = "alpharithms" print(s1) # concatenate some text s1 += " is cool." print(s1) # output alpharithms alpharithms is cool.9 (gán một giá trị mới cho các biến ban đầu # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5]1.) cách tiếp cận này: phép trừ# Subtraction and multiplication don't always work b1 = "alpharithms" b2 = b1 - "s" print(b2) # Output TypeError: unsupported operand type(s) for -: 'str' and 'str' b1 = "alpharithms" b1 -= "s" print(b1) # Output TypeError: unsupported operand type(s) for -=: 'str' and 'str' Ở đây chúng ta thấy ngoại lệ # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment4 tương tự được nâng lên. Rõ ràng, toán tử trừ không hoạt động tốt với các chuỗi. Hoạt động chia và nhân tạo ra các trường hợp ngoại lệ tương tự. Tuy nhiên, thao tác chuỗi dựa trên phép nhân là có thể theo một cách khác. Ví dụ 2: Thao tác chuỗi dựa trên phép nhânSự nhân là một trường hợp cạnh, theo đó Python cung cấp một số tính năng mở rộng. Tương tự như phép trừ và phân chia, toán tử nhân không hoạt động trong quá trình thao tác trực tiếp của một chuỗi: # create the sample string s1 = "alpharithms" # attempt a direct multiplication operation s2 = s1 * " is cool" # output TypeError: can't multiply sequence by non-int of type 'str' # attempt an assignment operation s1 *= " is cool" # output TypeError: can't multiply sequence by non-int of type 'str' Python cho phép toán tử nhân được sử dụng để tạo nhiều bản sao của chuỗi. Xem xét ví dụ sau: Consider the following example: # Create an example string s1 = "alpharithms" # Use multiplication modifier with an integer value # to create a new string made of duplicates of the # initial string s2 = s1 * 5 print(s2) # output alpharithmsalpharithmsalpharithmsalpharithmsalpharithms Đầu ra tương tự sẽ được tạo ra bằng cú pháp # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5]3. Ở cấp độ khái niệm, điều này có ý nghĩa - tương đương với việc phát hành hướng dẫn tạo ra 5 bản # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment2. Điều gì sẽ xảy ra nếu chúng ta sử dụng một giá trị phân số mặc dù? Hãy để xem những gì xảy ra khi chúng ta cố gắng tạo 5 bản sao rưỡi của chuỗi: # Create an example string s1 = "alpharithms" # Create 5 and a half copies s2 = s1 * 5.5 TypeError: can't multiply sequence by non-int of type 'float' Ở đây chúng ta thấy một kiểu mẫu: có thể nhân lên chuỗi với loại ngoại lệ không phải là loại ’float đang được nâng lên. Python có thể 100% đã chọn để giải thích các giá trị phân số như phao để trả về tỷ lệ phần trăm của tổng số ký tự với việc tạo các bản sao của chuỗi. Trong trường hợp này, # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5]5 sẽ là 11/2 sẽ là 5,5, được làm tròn xuống số 5 ký tự số gần nhất: # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5]6. Tuy nhiên, đây không phải là trường hợp và phép nhân phao không thể được sử dụng với các chuỗi.TypeError: can’t multiply sequence by non-int of type ‘float’ exception being raised. Python could 100% have elected to interpret fractional values such as floats to return a percentage of total characters with creating copies of strings. In this case the # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5]5 would be 11/2 would be 5.5, rounded down to the nearest whole-number 5 characters: # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5]6. This is not the case however and float multiplication cannot be used with strings. Ví dụ 3: Trộn các toán tửCần phải rõ ràng tại thời điểm này rằng các toán tử bổ sung và nhân rất hữu ích cho việc thao tác các chuỗi. Chúng tôi đã thấy ứng dụng của từng người bị cô lập nhưng chưa xem xét cách người ta có thể sử dụng chúng kết hợp với nhau. Xem xét mã sau: # create a sample string s1 = "alpharithms" # Create 5 copies separated by a space s2 = s1 + " " * 5 # print result print(s2) # result alpharithms Thay vì 5 bản sao dự kiến của # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5]7, chúng tôi thay vào đó thấy những gì có vẻ là một bản sao duy nhất! Trên thực tế, đây là một bản sao duy nhất với 5 ký tự không gian bổ sung được thêm vào cuối. Nếu phần # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5]8 được thay thế bằng # change single character a1 = ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', 's'] a1[-1] = "\0" print(a1) # change integer item a2 = [1, 2, 3, 4, 5] a2[0] = 6 print(a2) # Output ['a', 'l', 'p', 'h', 'a', 'r', 'i', 't', 'h', 'm', '\x00'] [6, 2, 3, 4, 5]9 đầu ra sẽ là # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool0. Ví dụ này nhấn mạnh rằng sự ưu tiên của nhà điều hành là hợp lệ ngay cả khi xử lý các chuỗi. Để thêm không gian giữa 5 bản như dự định, chúng tôi sẽ cần thêm dấu ngoặc đơn để chỉ định một thứ tự hoạt động khác nhau như vậy: # Create an example string s1 = "alpharithms" print(s1) # concatenate some text s1 += " is cool." print(s1) # output alpharithms alpharithms is cool.0 Ở đây chúng tôi thấy đầu ra trở lại như mong đợi. Bằng cách thêm các ký tự # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool1 và # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool2 xung quanh hoạt động # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool3, chúng tôi thêm ký tự không gian trước khi tạo 5 bản sao của chuỗi! Ví dụ 4: Đầu vào của người dùng chuyển đổi thành chuỗiKhi chấp nhận đầu vào của người dùng trong Python, bất kỳ đầu vào nào do người dùng cung cấp đều được chuyển đổi thành một chuỗi. Ví dụ: mã sau nhắc người dùng cho một số sẽ được nhân với giá trị # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool4: # Create an example string s1 = "alpharithms" print(s1) # concatenate some text s1 += " is cool." print(s1) # output alpharithms alpharithms is cool.1 Ở đây chúng tôi đã nhập giá trị # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool4 tại dấu nhắc và nhận thấy giá trị trả lại là # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool6 - rõ ràng không phải là tính toán chính xác của # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool7. Vấn đề là Python diễn giải giá trị đầu vào của người dùng là # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool4 dưới dạng chuỗi, dẫn đến hoạt động tương đương với # creates a string a1 = "alpharithms" # create a new string with extra text a2 = a1 + " is cool" print(a2) # use assignment operator to do the same a1 += " is cool" print(a1) # output alpharithms is cool alpharithms is cool9, như được hiển thị ở trên, tạo ra 3 bản sao của đầu vào chuỗi. Vấn đề này có thể được giải quyết bằng cách chuyển đổi đầu vào của người dùng dự kiến sẽ có số lượng thành dữ liệu số trước khi thực hiện các hoạt động số học. Ví dụ: mã sau sẽ dẫn đến đầu ra dự kiến: # Create an example string s1 = "alpharithms" print(s1) # concatenate some text s1 += " is cool." print(s1) # output alpharithms alpharithms is cool.2 Ví dụ X: Sử dụng các đối tượng Bytearry để thao tác chuỗiPython tạo ra các bản sao mới của bất kỳ chuỗi nào trong đó các thao tác thay đổi được thực hiện. Như một mô tả rộng rãi - Python phân bổ bộ nhớ mới khi các chuỗi đang bị đột biến. Như vậy, việc thực hiện một số lượng lớn các thao tác chuỗi có thể trở thành gánh nặng trên bộ nhớ. Để giải quyết vấn đề này, có thể tạo ra byte có thể được tạo như vậy: # Create an example string s1 = "alpharithms" print(s1) # concatenate some text s1 += " is cool." print(s1) # output alpharithms alpharithms is cool.3 Chúng tôi có toàn bộ bài viết dành riêng cho chủ đề sử dụng các đối tượng Bytearry Python. Kiểm tra nó để tìm hiểu thêm về chức năng tích hợp này của Python và cách nó liên quan đến việc thao tác các chuỗi! Suy nghĩ cuối cùngChuỗi Python chỉ là một trong nhiều loại dữ liệu được cung cấp cho các nhà phát triển. Các quyết định được đưa ra trong quá trình phát triển Python, ưu tiên dễ dàng cú pháp so với ưu tiên khái niệm sao cho các cú pháp có phần kỳ lạ như sử dụng toán tử # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment6 để tạo các bản sao của chuỗi có thể được sử dụng. Tuy nhiên, người ngoài hành tinh so với các ngôn ngữ lập trình phổ biến khác, cách tiếp cận này chắc chắn là thuận tiện. Ở đây, chúng tôi đã thấy làm thế nào các toán tử số học có thể được sử dụng để thao tác với các chuỗi python. Lỗi phổ biến nhất là khi cố gắng nhân qua các giá trị dấu phẩy động hoặc trong việc tạo các bản sao thay vì các giá trị số từ đầu vào của người dùng. Hãy ghi nhớ những điều này có thể giúp tận dụng sức mạnh của cú pháp thao tác chuỗi Python mà không tạo ra # create a string s1 = "alpharithms" # attempt to remove the s from the end s1[-1] = "" TypeError: 'str' object does not support item assignment4. Làm thế nào để bạn thực hiện các hoạt động số học trên một chuỗi trong Python?Bạn có thể sử dụng chức năng EVAL để đánh giá các biểu thức toán học trong chuỗi.use the eval function to evaluate mathematical expressions in strings.
Chúng ta có thể sử dụng toán tử số học với chuỗi trong Python không?Python cho phép các nhà phát triển sử dụng các toán tử số học phổ biến trên các chuỗi..
Làm thế nào để bạn thực hiện các hoạt động số học chuỗi?Chỉ SADD (), SSUB (), SMUL (), SDIV () và SCMP () được định nghĩa là các hàm số học chuỗi.Các chức năng này sẽ chấp nhận hai hoặc ba đối số.Hai đối số đầu tiên là hai toán hạng được cung cấp cho chức năng.Toán tử thứ ba, tùy chọn, là một độ chính xác rõ ràng cho chức năng.SADD(), SSUB(), SMUL(), SDIV() and SCMP() are defined as string arithmetic functions. These functions will accept either two or three arguments. The first two arguments are the two operands supplied to the function. The third, optional operand, is an explicit precision for the function.
Bạn có thể thực hiện số học với chuỗi không?Trong trường hợp này, toán tử "+" trong biểu thức cảnh báo () được hiểu là toán tử nối vì ít nhất một trong các giá trị trong biểu thức ("câu trả lời là") là một chuỗi văn bản.Số học không thể được thực hiện với giá trị chuỗi, do đó, toán tử "+" được đưa vào có nghĩa là nối.Arithmetic cannot be performed with a string value, therefore, the "+" operator is taken to mean concatenation. |