Câu 1Cái nào sau đây không thể dùng làm tên biến?
Biến và kiểu dữ liệu
Học biến trong Python: khai báo, kiểu int / str / float, định kiểu động, gán lại và quy tắc đặt tên cho code dễ đọc.
Biến là gì?
Biến là một chiếc hộp có tên mà bạn có thể đặt dữ liệu vào. Ví dụ, viết x = 10 thì số nguyên 10 được đưa vào x.
Sau đó bạn có thể đọc lại giá trị thông qua cùng cái tên đó, hoặc ghi đè bằng giá trị mới.
Tên biến tham chiếu đến một giá trị, và giá trị nằm trong bộ nhớ
10 đã hiện ra ở bên phải chưa? Đó là output của print(x).
Khi bạn gọi print(biến), nó in những gì bên trong biến ra màn hình.
Ngược lại, thử dùng một biến chưa được gán sẽ gây ra NameError. Python đang nói với bạn rằng không có biến nào mang tên đó tồn tại.
Luôn phải gán biến trước khi sử dụng.
Type là gì?
Mỗi giá trị bạn đặt vào biến đều có một type (kiểu dữ liệu). Type giống như một nhãn ghi rõ đây là loại dữ liệu gì.
Ví dụ, 10 có type là số nguyên (int) và "hello" có type là chuỗi (str).
Kiểu số nguyên (int)
int là kiểu của các số nguyên. Bất kỳ số nào không có dấu thập phân đều được coi là int.
Đặc điểm quan trọng của int là bạn có thể thực hiện các phép tính số học trực tiếp trên nó — cộng, trừ, nhân, chia.
Truyền nó vào type() và bạn sẽ thấy <class 'int'>, xác nhận rằng đó là int.
a = 10
b = 3
print(a + b) # 13 (cộng)
print(a - b) # 7 (trừ)
print(a * b) # 30 (nhân)
print(a // b) # 3 (chia lấy phần nguyên: bỏ phần dư)
print(a % b) # 1 (modulo: phần dư của phép chia)
print(type(a)) # <class 'int'>
Kiểu chuỗi (str)
str là kiểu của chuỗi ký tự. Bất cứ thứ gì được bao bằng nháy đơn '...' hoặc nháy kép "..." đều thành str.
Bạn có thể nối chuỗi bằng +, hoặc lấy độ dài bằng len().
Bao một con số trong dấu nháy như "10" thì nó thành str — bạn không thể tính toán trên nó như vậy.
Một literal chuỗi trở thành str, và bạn có thể dùng nó để nối và đo độ dài
greeting = "hello"
name = "Minh"
print(greeting + ", " + name + "!") # hello, Minh!
print(len(greeting)) # 5 (độ dài)
# Lưu ý: "10" là str, nên không thể tính toán trên nó
num_str = "10"
# print(num_str + 5) # TypeError!
print(int(num_str) + 5) # 15 (chạy được sau khi chuyển bằng int())
print(type(greeting)) # <class 'str'>
Trộn các kiểu khác nhau
Khi các kiểu khác nhau, những gì bạn có thể làm với chúng cũng khác đi. Hai số nguyên có thể cộng được, nhưng cố gắng cộng một số nguyên với một chuỗi sẽ ném ra TypeError.
Cùng xem trong code dưới đây xem chuyện gì xảy ra khi bạn trộn int và str.
age = 25 # int
name = "Minh" # str
# int + int thì OK
print(age + 10) # 35
# str + str thì OK (nối chuỗi)
print(name + "!") # Minh!
# int + str sẽ ném lỗi
# print(age + name) # TypeError: unsupported types for __add__: 'int', 'str'
# str() chuyển đổi để có thể nối
print(str(age) + " tuổi") # 25 tuổi
Khai báo và gán biến
Python dùng cái gọi là kiểu động (dynamic typing), nên không như Java hay C, bạn không cần khai báo kiểu trước như int x;.
Bạn định nghĩa biến đơn giản bằng cách dùng = để gán giá trị bên phải vào tên bên trái.
Và một khi biến đã có giá trị, bạn có thể tự do gán lại bằng giá trị mới.
Python xác định kiểu khi chạy (động), trong khi Java và C cố định kiểu khi biên dịch (tĩnh)
Đây là ví dụ về gán và gán lại giá trị. Trong Python, bạn có thể gán mà không cần chỉ định kiểu, và có thể gán lại bao nhiêu lần tùy thích.
# Gán cho biến
name = "Minh"
age = 25
# Gán lại (ghi đè giá trị)
age = 26
# Gán các giá trị khác nhau cho nhiều biến cùng lúc (trong một dòng)
x, y, z = 1, 2, 3
Quy tắc đặt tên biến
Bạn có thể đặt tên biến tùy thích, nhưng có một vài quy tắc cần tuân theo.
- Ký tự được phép: chữ cái (a-z, A-Z), chữ số (0-9) và dấu gạch dưới (_)
- Ký tự đầu tiên phải là chữ cái hoặc dấu gạch dưới (không được bắt đầu bằng chữ số)
- Tên phân biệt chữ hoa chữ thường (age và Age là hai biến khác nhau)
| Tên biến | OK / NG | Lý do |
|---|---|---|
| user_name | OK | Chữ cái và dấu gạch dưới |
| age2 | OK | Bắt đầu bằng chữ cái; chữ số sau đó thì OK |
| _total | OK | Bắt đầu bằng dấu gạch dưới được phép |
| 2nd_user | NG | Không được bắt đầu bằng chữ số |
| user-name | NG | Dấu gạch ngang không được phép |
| user name | NG | Không được có khoảng trắng |
Trên hết, bạn không thể dùng từ khóa (keywords) của Python — những từ mà ngôn ngữ đã gán sẵn ý nghĩa. Có khoảng 35 từ khóa, gồm cả 'for', 'if', 'class', 'return', 'True', 'None' và 'import'. Thử dùng một trong số đó làm tên biến và bạn sẽ nhận SyntaxError.
Hằng số — viết các giá trị không đổi
Các giá trị mà bạn đặt một lần và không bao giờ thay đổi được gọi là hằng số (constants), và quy ước trong Python là viết chúng bằng chữ in hoa với dấu gạch dưới.
Nếu số 20 cứ thế xuất hiện giữa code, người đọc không có ý niệm gì tại sao là 20 (một con số bí ẩn như vậy được gọi là magic number). Đặt tên nó như một hằng số ngay từ đầu — LEGAL_AGE = 20 — thì ý nghĩa rõ ràng ngay từ cái nhìn đầu tiên, hơn nữa khi muốn đổi giá trị bạn chỉ cần sửa đúng một dòng đó.
# Hằng số dùng chữ in hoa + dấu gạch dưới
LEGAL_AGE = 20
MAX_RETRY = 3
PI = 3.14159
print(f"Tuổi hợp pháp là {LEGAL_AGE}")
print(f"Số lần thử tối đa: {MAX_RETRY}")
print(f"Pi xấp xỉ {PI}")
Python không có hằng số thực sự
Khác với C hay Java, Python không có cách tích hợp nào để cấm việc gán lại. Viết LEGAL_AGE = 20 rồi LEGAL_AGE = 25, không có lỗi nào — giá trị chỉ đơn giản là thay đổi. Hãy nghĩ chữ in hoa như một quy ước giữa các lập trình viên với ý nghĩa "làm ơn đừng đổi cái này".
Kiểm tra và chuyển đổi kiểu
Hàm type() cho bạn biết kiểu dữ liệu của một biến (loại dữ liệu nào nó đang chứa). Còn các hàm dựng sẵn (built-in functions) như int() và str() (các hàm có sẵn cùng Python) cho phép bạn chuyển đổi một giá trị sang kiểu khác — đây gọi là chuyển đổi kiểu (type conversion), hay casting.
Ví dụ, nếu bạn muốn tính toán trên một số đến dưới dạng chuỗi từ input của người dùng, bạn phải chuyển nó sang int bằng int().
Đây là ví dụ về việc kiểm tra kiểu và chuyển đổi giữa chúng.
# Kiểm tra kiểu
x = 42
print(type(x)) # <class 'int'>
print(type("hello")) # <class 'str'>
# Chuyển đổi kiểu
num_str = "100"
num_int = int(num_str) # str → int
back_to_str = str(num_int) # int → str
print(num_int + 50) # 150
ValueError khi không thể chuyển đổi
Truyền cho int() hoặc float() một chuỗi không thể đọc thành số, và bạn nhận ValueError. Ví dụ, int("abc") và float("hello") đều gây lỗi. Khi chuyển đổi những thứ như input của người dùng, hãy bọc lại trong try / except để xử lý exception.
Trong bài này bạn đã học cách dùng biến, cơ bản về int và str, và cách hoạt động của kiểu động.
Từ kiểm tra kiểu bằng type() đến chuyển đổi kiểu bằng int() và str(), và cả ValueError xuất hiện khi việc chuyển đổi thất bại — bạn đã có nền tảng đầy đủ về kiểu dữ liệu trong Python.
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Đoạn code này in ra gì?x = str(3.14)
print(type(x))
Câu 3Đoạn code này in ra gì?x = "10"
print(int(x) + 5)