Ôn thi HSG Tin học THPT – Bài 2: Các kiểu dữ liệu cơ bản

1. Mục tiêu

  • Nhận biết và phân biệt được bốn kiểu dữ liệu cơ bản trong Python: số nguyên (int), số thực (float), chuỗi ký tự (str), và logic (bool).
  • Sử dụng thành thạo các phép toán số học cơ bản (cộng, trừ, nhân, chia, chia lấy nguyên, chia lấy dư, lũy thừa).
  • Hiểu và áp dụng được các phép toán logic (and, or, not) và các phép toán so sánh.
  • Sử dụng hàm type() để xác định kiểu dữ liệu của một biến.
  • Thực hiện ép kiểu tường minh giữa các kiểu dữ liệu cơ bản.

2. Giới thiệu và phạm vi ứng dụng

Trong lập trình, kiểu dữ liệu (data type) là một thuộc tính của dữ liệu, quy định cách trình biên dịch hoặc thông dịch diễn giải giá trị của dữ liệu đó. Việc xác định kiểu dữ liệu cho phép máy tính hiểu được loại thông tin đang được lưu trữ và các phép toán hợp lệ có thể được thực hiện trên thông tin đó. Ví dụ, phép cộng hai số nguyên sẽ khác với phép nối hai chuỗi ký tự.

Việc nắm vững các kiểu dữ liệu cơ bản là yêu cầu tiên quyết để có thể biểu diễn và xử lý thông tin trong mọi bài toán lập trình. Lựa chọn đúng kiểu dữ liệu không chỉ đảm bảo tính chính xác của thuật toán mà còn ảnh hưởng đến hiệu suất và việc sử dụng bộ nhớ của chương trình.


3. Cú pháp và các ví dụ minh họa

3.1. Kiểu số nguyên (int)

Kiểu int (integer) được sử dụng để biểu diễn các số nguyên (không có phần thập phân). Python hỗ trợ các số nguyên có độ lớn không giới hạn.

# Khai báo và khởi tạo biến kiểu số nguyên
so_luong = 100
diem_so = -50

# Thực hiện các phép toán số học
a = 15
b = 4
tong = a + b         # Phép cộng: 15 + 4 = 19
hieu = a - b         # Phép trừ: 15 - 4 = 11
tich = a * b         # Phép nhân: 15 * 4 = 60
luy_thua = a ** b    # Phép lũy thừa: 15^4 = 50625

# Các phép toán chia đặc biệt
chia_nguyen = a // b  # Phép chia lấy phần nguyên: 15 // 4 = 3
chia_du = a % b      # Phép chia lấy phần dư: 15 % 4 = 3

print(tong, hieu, tich, luy_thua, chia_nguyen, chia_du)

3.2. Kiểu số thực (float)

Kiểu float (floating-point number) được sử dụng để biểu diễn các số có phần thập phân.

# Khai báo và khởi tạo biến kiểu số thực
pi = 3.14159
can_bac_hai = 1.414

# Phép chia thông thường luôn trả về kiểu float
a = 15
b = 4
thuong = a / b  # Phép chia: 15 / 4 = 3.75

# Số thực cũng có thể được biểu diễn bằng ký pháp khoa học
so_avogadro = 6.022e23  # Tương đương 6.022 * 10^23
print(thuong)
print(so_avogadro)

3.3. Kiểu chuỗi ký tự (str)

Kiểu str (string) được sử dụng để biểu diễn dữ liệu dạng văn bản. Chuỗi được đặt trong cặp dấu nháy đơn (‘) hoặc nháy kép (“).

# Khai báo và khởi tạo biến kiểu chuỗi
loi_chao = "Xin chào các bạn!"
ten_truong = 'Trường THPT ...'

# Phép toán trên chuỗi
# 1. Nối chuỗi (concatenation)
ho_va_ten = "Nguyễn Văn" + " " + "A"
print(ho_va_ten)  # Kết quả: Nguyễn Văn A
# 2. Lặp chuỗi (repetition)
gach_ngang = "-" * 20
print(gach_ngang) # Kết quả: --------------------

3.4. Kiểu logic (bool)

Kiểu bool (boolean) chỉ có hai giá trị: True (đúng) và False (sai). Kiểu dữ liệu này là kết quả của các phép toán so sánh và được sử dụng trong các cấu trúc điều khiển (sẽ được học trong các bài sau).

# Khai báo trực tiếp
da_ket_hon = False
co_giay_phep = True

# Kết quả của các phép so sánh
x = 10
y = 5
lon_hon = x > y      # True, vì 10 > 5
bang_nhau = x == y   # False, vì 10 != 5
khac_nhau = x != y   # True, vì 10 != 5

print(lon_hon, bang_nhau, khac_nhau)

3.5. Các phép toán logic

Các phép toán and, or, not được sử dụng để kết hợp các biểu thức logic.

  • A and B trả về True chỉ khi cả A và B đều là True.
  • A or B trả về True nếu ít nhất một trong hai A hoặc B là True.
  • not A đảo ngược giá trị logic của A.
diem_trung_binh = 8.5
hanh_kiem_tot = True

# Xét điều kiện học sinh giỏi: điểm >= 8.0 VÀ hạnh kiểm tốt
la_hoc_sinh_gioi = (diem_trung_binh >= 8.0) and (hanh_kiem_tot == True)
print("Là học sinh giỏi:", la_hoc_sinh_gioi) # Kết quả: Là học sinh giỏi: True

# Xét điều kiện được nghỉ học: hôm nay là chủ nhật HOẶC là ngày lễ
hom_nay_chu_nhat = False
la_ngay_le = True
duoc_nghi_hoc = hom_nay_chu_nhat or la_ngay_le

print("Được nghỉ học:", duoc_nghi_hoc) # Kết quả: Được nghỉ học: True

4. Trực quan hóa và gỡ lỗi với Thonny

Thonny IDE cung cấp một công cụ gỡ lỗi trực quan, đặc biệt hữu ích để quan sát sự thay đổi giá trị và kiểu dữ liệu của các biến.

  1. Mở Thonny và sao chép một trong các đoạn mã ví dụ ở trên vào trình soạn thảo.
  2. Chạy chương trình bằng cách nhấn phím F5 hoặc chọn Run > Run current script.
  3. Quan sát cửa sổ “Variables” ở góc trên bên phải. Cửa sổ này sẽ liệt kê tất cả các biến đã được tạo, cùng với kiểu dữ liệu và giá trị hiện tại của chúng.
  4. Hãy thử thay đổi giá trị của các biến và thực hiện lại chương trình để thấy sự khác biệt.
kiểu dữ liệu

5. Bài tập vận dụng

5.1. Bài tập 1

5.1.1. Đề bài

Viết chương trình nhập vào hai số nguyên a và b từ bàn phím. In ra 5 dòng, mỗi dòng tương ứng là kết quả của các phép toán: tổng (a + b), hiệu (a – b), tích (a * b), chia lấy nguyên (a // b), và chia lấy dư (a % b).

5.1.2. Lời giải và phân tích

# Đọc hai số nguyên a và b từ đầu vào chuẩn
# Hàm input() luôn trả về một chuỗi, do đó cần ép kiểu sang int()
a_str = input("Nhập số nguyên a: ")
a = int(a_str)
b_str = input("Nhập số nguyên b: ")
b = int(b_str)

# Tính toán và lưu kết quả vào các biến
tong = a + b
hieu = a - b
tich = a * b
chia_nguyen = a // b
chia_du = a % b

# In kết quả ra màn hình theo đúng định dạng yêu cầu
print("Tổng:", tong)
print("Hiệu:", hieu)
print("Tích:", tich)
print("Chia lấy nguyên:", chia_nguyen)
print("Chia lấy dư:", chia_du)

Phân tích:

  • Chương trình sử dụng hàm input() để nhận dữ liệu từ người dùng. Dữ liệu này luôn có kiểu str.
  • Hàm int() được dùng để chuyển đổi (ép kiểu) chuỗi số thành số nguyên để có thể thực hiện các phép toán số học.
  • Các phép toán +, -, *, //, % được áp dụng tuần tự.
  • Hàm print() được gọi 5 lần để hiển thị kết quả theo yêu cầu của đề bài.

5.2. Bài tập 2

5.2.1. Đề bài

Viết chương trình nhập vào một số nguyên n. Kiểm tra và in ra màn hình xem n có phải là một số chẵn và đồng thời lớn hơn 10 hay không. Kết quả in ra là True hoặc False.

5.2.2. Lời giải và phân tích

# Đọc số nguyên n từ đầu vào chuẩn
n_str = input("Nhập số nguyên n: ")
n = int(n_str)
# Xây dựng biểu thức logic để kiểm tra đồng thời hai điều kiện
# Điều kiện 1: n là số chẵn (n chia hết cho 2, tức là n % 2 == 0)
# Điều kiện 2: n lớn hơn 10 (n > 10)
# Kết hợp hai điều kiện bằng toán tử 'and'
ket_qua = (n % 2 == 0) and (n > 10)
# In kết quả của biểu thức logic
print(ket_qua)

Phân tích:

  • Một số được gọi là chẵn nếu nó chia hết cho 2. Trong lập trình, điều này được kiểm tra bằng biểu thức n % 2 == 0. Biểu thức này sẽ trả về True nếu n chẵn và False nếu n lẻ.
  • Điều kiện thứ hai là n > 10, cũng là một biểu thức logic.
  • Toán tử and được sử dụng để đảm bảo rằng cả hai điều kiện phải cùng thỏa mãn thì kết quả cuối cùng mới là True.

6. Các lưu ý và lỗi thường gặp

  • Lỗi TypeError: Xảy ra khi thực hiện phép toán giữa các kiểu dữ liệu không tương thích, ví dụ như cộng một chuỗi với một số (‘5’ + 10). Luôn đảm bảo các biến có kiểu dữ liệu phù hợp trước khi thực hiện phép toán.
  • Lỗi ZeroDivisionError: Xảy ra khi thực hiện phép chia (bao gồm /, //, %) cho 0. Cần có các cấu trúc kiểm tra để tránh trường hợp này.
  • Sự khác biệt giữa / và //: Phép chia / luôn trả về một số thực (float), trong khi // trả về phần nguyên của kết quả phép chia và có cùng kiểu với toán hạng (nếu cả hai là int thì kết quả là int).
  • Ép kiểu (Type Casting): Việc chuyển đổi tường minh giữa các kiểu dữ liệu là rất phổ biến, đặc biệt là khi xử lý dữ liệu đầu vào. Các hàm thường dùng là int(), float(), str().

7. Tổng kết

Bài học đã giới thiệu bốn kiểu dữ liệu cơ bản và nền tảng nhất trong Python: int, float, str, và bool. Đây là những viên gạch đầu tiên để xây dựng nên các chương trình phức tạp. Việc hiểu rõ bản chất, các phép toán tương ứng và những lỗi thường gặp liên quan đến kiểu dữ liệu sẽ giúp việc viết mã trở nên chính xác và hiệu quả hơn.

Trong các bài học tiếp theo, các cấu trúc dữ liệu phức tạp hơn như danh sáchtừ điển sẽ được giới thiệu, chúng được xây dựng dựa trên chính các kiểu dữ liệu cơ bản này.


Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *