Chuyển đổi chuỗi thành số trong Python với xử lý lỗi

1. Giới thiệu

Khi lập trình bằng Python, việc chuyển đổi kiểu dữ liệu là một kỹ thuật quan trọng. Đặc biệt, khả năng chuyển đổi giữa chuỗi và số là thiết yếu cho việc nhập/xuất dữ liệu và các phép tính. Ví dụ, bạn thường cần chuyển một chuỗi do người dùng nhập trong biểu mẫu thành một số để tính toán, hoặc định dạng kết quả số thành chuỗi để hiển thị.
Tuy nhiên, việc trộn lẫn dữ liệu các kiểu khác nhau có thể gây lỗi, vì vậy người mới bắt đầu cần cẩn thận. Bài viết này giới thiệu cách chuyển đổi “chuỗi sang số” và “số sang chuỗi” trong Python, cung cấp các ví dụ thực tế và chi tiết về xử lý lỗi như các trường hợp đặc biệt. Hy vọng nó sẽ giúp bạn phát triển kỹ năng từ cơ bản đến nâng cao trong lập trình Python.
Phần tiếp theo sẽ giải thích chi tiết các phương pháp chuyển đổi kiểu cơ bản của Python.

Ad

2. Chuyển đổi Kiểu Cơ bản trong Python

Trong Python, khi các kiểu dữ liệu khác nhau, các phép toán trực tiếp thường bị giới hạn và cần phải chuyển đổi dữ liệu giữa các kiểu. Hiểu cách chuyển đổi chuỗi sang số, hoặc ngược lại, cho phép bạn viết mã linh hoạt hơn và giảm thiểu lỗi. Phần này giải thích chuyển đổi kiểu cơ bản trong Python bằng các hàm “int()” và “float()”.

Chuyển đổi sang Số Nguyên

Khi một số được nhập dưới dạng chuỗi, bạn cần chuyển chuỗi đó thành một số nguyên hoặc số thực trước khi thực hiện các phép tính số học trong Python. Ví dụ, để chuyển chuỗi “42” thành số nguyên 42, bạn sử dụng hàm int() như sau.

str_number = "42"
int_number = int(str_number)
print(int_number)  # Output: 42

Như vậy, việc sử dụng hàm int() cho phép chuyển một chuỗi thành số nguyên. Khi chuyển đổi thành công, giá trị có thể được dùng như một số. Lưu ý rằng cố gắng chuyển một chuỗi chứa dấu thập phân, chẳng hạn "42.0", sang kiểu số nguyên sẽ gây lỗi. Chỉ các số nguyên mới hợp lệ cho chuyển đổi sang int; nếu chuỗi có dấu thập phân, bạn cần dùng float().

Chuyển đổi sang Số Thực

Số thực là kiểu dữ liệu có thể giữ phần thập phân của một giá trị. Trong Python, bạn có thể chuyển một chuỗi thành số thực bằng hàm float(). Ví dụ, để chuyển chuỗi “3.14” thành số thực, sử dụng đoạn mã sau.

str_float = "3.14"
float_number = float(str_float)
print(float_number)  # Output: 3.14

Như vậy, việc sử dụng hàm float() cho phép chuyển đổi từ chuỗi sang số thực. Ngoài ra, các chuỗi ở dạng ký hiệu khoa học cũng có thể được chuyển bằng float(), và các biểu diễn như "1.23e-4" cũng được hỗ trợ.

str_exp = "1.23e-4"
float_exp = float(str_exp)
print(float_exp)  # Output: 0.000123

Chuyển đổi từ Số sang Chuỗi

Ngược lại, có rất nhiều tình huống bạn cần chuyển một số thành chuỗi. Ví dụ, khi bạn muốn nối một số với các chuỗi khác để hiển thị. Trong những trường hợp này, bạn sử dụng hàm str().

num = 42
str_num = str(num)
print("Result of converting a number to a string: " + str_num)  # Output: Result of converting a number to a string: 42

Như vậy, hàm str() thực hiện chuyển đổi từ số sang chuỗi, cho phép thao tác với các chuỗi chứa số.
Khi đã nắm vững chuyển đổi kiểu cơ bản, bạn có thể tiến tới các chủ đề nâng cao như chuyển đổi giữa các hệ số khác nhau và xử lý chuỗi toàn chiều rộng.

Ad
年収訴求

3. Ví dụ Ứng dụng: Chuyển đổi Nhiều Hệ và Số Toàn Chiều Rộng

Bây giờ bạn đã hiểu các chuyển đổi kiểu cơ bản của Python, chúng ta sẽ thảo luận các trường hợp nâng cao hơn. Phần này giải thích cách chuyển đổi sang các hệ số khác nhau như nhị phân và thập lục phân, và cách xử lý các số có ký tự toàn chiều rộng.

Chuyển đổi Nhị phân, Bát phân và Thập lục phân

Python’s int() function can convert not only decimal but also binary, octal, and hexadecimal strings. In this case, you specify the base (radix) as the second argument to the int() function. For example, to convert binary or hexadecimal strings to integers, you would write as follows.

binary_str = "1010"  # binary string
octal_str = "12"  # octal string
hex_str = "a"  # hexadecimal string

int_binary = int(binary_str, 2)
int_octal = int(octal_str, 8)
int_hex = int(hex_str, 16)

print(int_binary)  # Output: 10
print(int_octal)  # Output: 10
print(int_hex)  # Output: 10

Thus, binary, octal, and hexadecimal strings can also be converted to integers by using int() with the appropriate base. This feature is especially useful when working with data that involves multiple numeral systems.

Xử lý các số toàn chiều rộng và ký tự đặc biệt

Nếu một chuỗi từ đầu vào người dùng chứa các số toàn chiều rộng hoặc ký tự đặc biệt, việc cố gắng chuyển đổi trực tiếp trong Python có thể gây ra lỗi. Đặc biệt khi nhập số tiếng Nhật có chứa ký tự toàn chiều rộng, Python thường không xử lý được chúng đúng cách, vì vậy nên sử dụng phương thức replace() để chuyển đổi các ký tự toàn chiều rộng sang nửa chiều rộng.
Dưới đây là một ví dụ chuyển đổi một chuỗi toàn chiều rộng sang nửa chiều rộng trước khi chuyển đổi nó thành số.

str_num_fullwidth = "12345"
str_num_halfwidth = str_num_fullwidth.translate(str.maketrans('0123456789', '0123456789'))

print(int(str_num_halfwidth))  # Output: 12345

Sử dụng cách tiếp cận này cho phép các chuỗi số toàn chiều rộng được chuyển đổi thành số. Nếu dấu thập phân toàn chiều rộng cũng cần chuyển đổi, bạn có thể thực hiện một chuyển đổi bổ sung như sau.

str_float_fullwidth = "123.456"
str_float_halfwidth = str_float_fullwidth.translate(str.maketrans('0123456789.', '0123456789.'))

print(float(str_float_halfwidth))  # Output: 123.456

Chuyển đổi số Kanji

Trong Python, bạn có thể sử dụng mô-đun Unicode để chuyển đổi một số ký tự Kanji thành số. Bằng cách sử dụng unicodedata.numeric(), các chuỗi như “一” hoặc “百” có thể được chuyển đổi thành số thực.

import unicodedata

kanji_num = '五'
converted_num = unicodedata.numeric(kanji_num)
print(converted_num)  # Output: 5.0

Tuy nhiên, nó không hỗ trợ các số Kanji bao gồm nhiều ký tự (ví dụ, “十五”), vì vậy đối với việc xử lý phức tạp hơn bạn nên cân nhắc sử dụng các thư viện bổ sung hoặc xử lý bằng biểu thức chính quy tùy chỉnh.
Như vậy, Python cung cấp nhiều phương pháp chuyển đổi ngay cả với các chuỗi số. Phần tiếp theo sẽ chi tiết cách xác định liệu một giá trị đầu vào có thể được chuyển đổi hay không và cách xử lý lỗi.

Ad

4. Xử lý lỗi và xác thực đầu vào

Trong quá trình xử lý dữ liệu, có những trường hợp dữ liệu đầu vào của người dùng hoặc dữ liệu nhận được từ các nguồn bên ngoài không thể chuyển đổi thành số một cách chính xác. Do đó, việc xác định trước liệu dữ liệu có thể chuyển đổi sang kiểu số hay không, và xử lý lỗi một cách thích hợp khi việc chuyển đổi thất bại là rất quan trọng. Phần này giải thích các phương pháp xác thực đầu vào và xử lý lỗi.

Phát hiện số bằng isdigit() và biểu thức chính quy

Một cách để xác định trước liệu một chuỗi có thể chuyển đổi thành số hay không là sử dụng phương thức isdigit() của Python hoặc biểu thức chính quy. isdigit() trả về True khi chuỗi chỉ bao gồm các chữ số, nhưng trả về False nếu chuỗi chứa dấu thập phân hoặc dấu trừ. Do đó, nó hữu ích khi bạn chỉ muốn kiểm tra các số nguyên.

def is_integer(input_str):
    return input_str.isdigit()

# Example usage
print(is_integer("123"))  # Output: True
print(is_integer("3.14"))  # Output: False
print(is_integer("-123"))  # Output: False

Mặt khác, để phát hiện số bao gồm các số thực và giá trị âm, biểu thức chính quy rất tiện lợi. Trong ví dụ dưới đây, các số có tiền tố “+” hoặc “-” và các giá trị chứa dấu thập phân được thiết lập để trả về True.

import re

def is_numeric(input_str):
    return bool(re.match(r'^[+-]?d+(.d+)?$', input_str))

# Example usage
print(is_numeric("123"))       # Output: True
print(is_numeric("-123.45"))   # Output: True
print(is_numeric("3.14.15"))   # Output: False
print(is_numeric("abc"))       # Output: False

Bằng cách sử dụng biểu thức chính quy như vậy, bạn có thể xác định một cách linh hoạt hơn liệu một giá trị có phải là số hay không, điều này hữu ích khi xử lý dữ liệu đầu vào phức tạp.

Xử lý lỗi: Sử dụng xử lý ngoại lệ

Trong Python, việc chuyển một chuỗi thành số với dữ liệu không phù hợp sẽ gây ra lỗi (ValueError). Để bắt lỗi này và tiếp tục xử lý, thường sử dụng khối try-except để xử lý ngoại lệ.
Trong ví dụ dưới đây, nếu có lỗi xảy ra khi cố gắng chuyển một chuỗi thành số nguyên, một thông báo lỗi thích hợp sẽ được hiển thị.

def convert_to_int(input_str):
    try:
        return int(input_str)
    except ValueError:
        print(f"Error: '{input_str}' cannot be converted to an integer.")
        return None

# Example usage
print(convert_to_int("123"))  # Output: 123
print(convert_to_int("abc"))  # Output: Error: 'abc' cannot be converted to an integer.

Bằng cách thêm xử lý ngoại lệ, chương trình có thể tiếp tục chạy một cách trơn tru ngay cả khi có lỗi xảy ra, mà không dừng lại. Nó cũng cung cấp phản hồi rõ ràng cho người dùng, giúp dễ dàng khắc phục các lỗi nhập liệu.
Khi việc kiểm tra dữ liệu đầu vào và xử lý lỗi được thực hiện đúng cách, độ tin cậy của mã sẽ được cải thiện. Trong phần tiếp theo, chúng ta sẽ xem cách chuyển đổi các phần tử danh sách hàng loạt.

Ad

5. Cách chuyển đổi các phần tử danh sách hàng loạt

Khi xử lý dữ liệu, bạn có thể cần chuyển đổi các phần tử danh sách ở dạng chuỗi thành số một cách hàng loạt. Ví dụ, các tệp CSV và dữ liệu lấy từ các nguồn bên ngoài thường được lưu dưới dạng chuỗi. Phần này giới thiệu một phương pháp chuyển đổi hàng loạt bằng cách sử dụng list comprehension trong Python.

Chuyển đổi hàng loạt bằng List Comprehension

Trong Python, ngoài việc xử lý từng phần tử danh sách bằng vòng lặp, bạn có thể sử dụng list comprehension để thực hiện chuyển đổi dữ liệu một cách ngắn gọn và hiệu quả. List comprehension áp dụng một thao tác cụ thể cho mỗi phần tử của danh sách và tạo ra một danh sách mới.
Ví dụ, để chuyển một danh sách chứa các chuỗi số thành danh sách các số nguyên, sử dụng đoạn mã sau.

str_list = ["10", "20", "30", "40", "50"]
int_list = [int(i) for i in str_list]

print(int_list)  # Output: [10, 20, 30, 40, 50]

Trong ví dụ, [int(i) for i in str_list] trong list comprehension khiến mỗi phần tử trong str_list được thành số nguyên bằng hàm int(), tạo ra một danh sách mới int_list. Cách tiếp cận này cho phép xử lý dữ liệu quy mô lớn với mã ngắn gọn, cải thiện khả năng đọc mã và hiệu suất.

Chuyển đổi danh sách hàng loạt với xử lý lỗi

Nếu danh sách chứa dữ liệu không thể chuyển đổi (ví dụ: chuỗi hoặc ký tự đặc biệt), sẽ xảy ra lỗi. Trong trường hợp này, bạn có thể kết hợp các điều kiện hoặc xử lý ngoại lệ vào list comprehension để tránh lỗi chuyển đổi. Dưới đây là một ví dụ chỉ chuyển đổi các phần tử có thể chuyển thành số nguyên.

str_list = ["10", "20", "abc", "30", "40"]

int_list = []
for i in str_list:
    try:
        int_list.append(int(i))
    except ValueError:
        print(f"Warning: '{i}' could not be converted to an integer.")

print(int_list)  # Output: [10, 20, 30, 40]

Trong đoạn mã này, khối try-except được sử dụng để chuyển chuỗi thành số nguyên, và nếu chuyển đổi thất bại, một thông báo lỗi sẽ được hiển thị. Bằng cách chỉ thêm các phần tử có thể chuyển đổi vào int_list bằng phương thức append(), quá trình xử lý sẽ tiếp tục ngay cả khi có lỗi, và bạn sẽ nhận được kết quả chuyển đổi.
Chuyển danh sách hàng loạt là một kỹ thuật rất hữu ích để xử lý một lượng lớn dữ liệu. Trong phần tiếp theo, chúng ta sẽ tóm tắt toàn bộ bài viết và sắp xếp những gì chúng ta đã học.

Ad

6. Tóm tắt

Trong bài viết này, chúng tôi đã giải thích cách chuyển đổi giữa chuỗi và số trong Python, bao gồm từ cơ bản đến nâng cao. Hiểu được tầm quan trọng của việc chuyển đổi kiểu dữ liệu trong xử lý dữ liệu và cách thực hiện nó một cách hiệu quả sẽ mở rộng phạm vi các hoạt động bạn có thể thực hiện trong lập trình Python. Dưới đây là tóm tắt ngắn gọn của từng phần.

Tóm tắt bài viết

  1. Giới thiệu
  • Chúng tôi đã giải thích các tình huống cần chuyển đổi giữa chuỗi và số, và cho thấy tại sao chuyển đổi kiểu dữ liệu lại quan trọng cho các phép tính số học và hiển thị dữ liệu.
  1. Chuyển đổi kiểu dữ liệu cơ bản trong Python
  • Chúng tôi đã học các phương pháp chuyển đổi cơ bản, sử dụng int() , float() , và hàm str() để thay đổi kiểu dữ liệu giữa chuỗi và số.
  1. Ví dụ nâng cao: chuyển đổi các cơ số khác nhau và số toàn chiều rộng
  • Chúng tôi đã giới thiệu cách chuyển đổi số nhị phân, bát phân và thập lục phân thành số nguyên, cũng như cách chuyển đổi ký tự toàn chiều rộng sang nửa chiều rộng để xử lý số. Chúng tôi cũng giải thích cách chuyển đổi số chữ Hán thành số bằng cách sử dụng unicodedata.numeric() .
  1. Xử lý lỗi và xác thực đầu vào
  • Xem xét rằng lỗi có thể xảy ra trong quá trình chuyển đổi số, chúng tôi đã cho thấy cách kiểm tra trước liệu một giá trị có phải là số bằng isdigit() và biểu thức chính quy, cũng như cách xử lý lỗi bằng xử lý ngoại lệ sử dụng try-except .
  1. Cách chuyển đổi hàng loạt các phần tử trong danh sách
  • Chúng tôi đã học cách thực hiện chuyển đổi hàng loạt bằng list comprehensions, cách xử lý lỗi có thể phát sinh, và có được kỹ năng để xử lý lượng dữ liệu lớn một cách hiệu quả.

Ứng dụng tương lai

Chuyển đổi kiểu dữ liệu trong Python liên quan đến hầu hết mọi hoạt động xử lý dữ liệu và lập trình cơ bản. Bằng cách áp dụng nhất quán chuyển đổi kiểu dữ liệu đúng đắn và xử lý lỗi trong phát triển thực tế, bạn có thể giảm lỗi và viết mã chất lượng cao hơn. Hơn nữa, xây dựng trên các phương pháp chuyển đổi cơ bản học được ở đây và làm chủ các kỹ thuật chuyển đổi dữ liệu nâng cao hơn sẽ cho phép bạn xử lý xử lý dữ liệu phức tạp một cách hiệu quả. Chúng tôi hy vọng bài viết này đã mang lại cho bạn sự hiểu biết toàn diện về kiến thức và kỹ thuật cần thiết cho chuyển đổi kiểu dữ liệu trong Python. Áp dụng những gì bạn đã học vào các dự án lập trình tương lai của bạn.

Ad
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール