Trong note lần này, mình sẽ tìm hiểu về chuyển đổi các dạng dữ liệu trong Python.
Nội Dung Chính
Bài giải #3
Đây là đáp án của bài tập ở note trước:
1 2 3 4 |
name = input("What is your name? ") place = input("Where do you live? ") print(name + " lives in " + place) |
Và khi bạn chạy rồi nhập kết quả, màn hình sẽ hiển thị ra như thế này:
1 2 3 4 5 6 |
/usr/local/bin/python3.9 /Users/admin/workspace/python-learn/python-prj/input.py What is your name? Cuong Team Where do you live? HCM City Cuong Team lives in HCM City Process finished with exit code 0 |
Thử nghiệm
Để có thể giải thích dễ hiểu nhất trong note này, mình sẽ thử viết 1 chương trình tính tuổi dựa trên số năm sinh người dùng nhập vào:
1 2 3 4 5 |
# Type Conversion birth_year = input("What is your birth year? ") user_age = 2021 - birth_year print(user_age) |
Rồi giờ khi mình chạy thử chương trình, mình sẽ nhận được 1 cái thông báo sau:
1 2 3 4 5 6 7 8 |
/usr/local/bin/python3.9 /Users/admin/workspace/python-learn/python-prj/type_conversion.py What is your birth year? 2000 Traceback (most recent call last): File "/Users/admin/workspace/python-learn/python-prj/type_conversion.py", line 3, in user_age = 2021 - birth_year TypeError: unsupported operand type(s) for -: 'int' and 'str' Process finished with exit code 1 |
Chỗ này có nghĩa là gì? Bạn có thể hiểu như sau: Tại file type_conversion.py dòng số 3 có một cái Error về Type, Python không hỗ trợ phép tính trừ giữa số và chuỗi.
Điều này có nghĩa là Python đang hiểu cái biến birth_year bạn nhập vào là một dữ liệu kiểu chuỗi chứ không phải là kiểu integer!
Vậy tức là dù tưởng tượng của bạn nó sẽ là 2021 – 2000, nhưng khi Python dịch thì nó trở thành 2021 – ‘2000’.
Kiểm tra và sửa lỗi
Trong thực tế, khi gặp những trường hợp như thế này, việc đầu tiên bạn cần làm đó là kiểm tra. Chúng ta sẽ kiểm tra gì? Như trong case này, mình sẽ cần phải kiểm tra lại xem kiểu dữ liệu của cái biến birth_year đó là kiểu gì bằng cách sử dụng một hàm có sẵn trong python là hàm type().
1 2 3 4 5 |
# Type Conversion birth_year = input("What is your birth year? ") # user_age = 2021 - birth_year print(type(birth_year)) |
Mình đã comment lại đoạn user_age và in ra kiểu của biến birth_year để kiểm tra và đây là kết quả mình nhận được:
1 2 3 4 5 |
/usr/local/bin/python3.9 /Users/admin/workspace/python-learn/python-prj/type_conversion.py What is your birth year? 20000 <class 'str'> Process finished with exit code 0 |
Như bạn thấy kết quả, thì sau khi mình nhập vào con số, máy trả ra cho mình một đoạn text là <class ‘str’>. Đây là viết tắt cho string, tức là biến birth_year này có kiểu dữ liệu là string.
Sau khi debug ra lỗi, mình sẽ cần phải sửa lỗi này. Trong Python, chúng ta có những function đã được dựng sẵn nhằm thay đổi kiểu dữ liệu bao gồm: kiểu Float (số thập phân), kiểu Integer (kiểu số) và kiểu Complex (kiểu phức tạp). Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#convert from int to float: x = float(1) #convert from float to int: y = int(2.8) #convert from int to complex: z = complex(x) print(x) print(y) print(z) print(type(x)) print(type(y)) print(type(z)) |
Mình sẽ nhận được kết quả:
1 2 3 4 5 6 7 8 9 |
/usr/local/bin/python3.9 /Users/admin/workspace/python-learn/python-prj/type_conversion.py 1.0 2 (1+0j) <class 'float'> <class 'int'> <class 'complex'> Process finished with exit code 0 |
Đây là ví dụ mình lấy từ W3School, như bạn thấy thì các hàm này sẽ convert kiểu của nó và trả ra một giá trị khác. Giờ thì quay lại với ví dụ của chúng ta, ta cần sử dụng hàm int() để convert birth_year sang kiểu số.
1 2 3 4 5 |
# Type Conversion birth_year = input("What is your birth year? ") user_age = 2021 - int(birth_year) print(user_age) |
Và đây sẽ là kết quả mà mình nhận được sau khi sửa:
1 2 3 4 5 |
/usr/local/bin/python3.9 /Users/admin/workspace/python-learn/python-prj/type_conversion.py What is your birth year? 2000 21 Process finished with exit code 0 |