Giải Tin Học 10 trang 92

Lời giải chi tiết SGK Lớp 10 · Môn Tin Học · Trang 92–97

Bài 17: BIẾN VÀ LỆNH GÁN


🔍 Kiến thức cần nhớ

1. Biến (Variable)

  • Biến là tên định danh của một vùng nhớ dùng để lưu trữ giá trị dữ liệu
  • Giá trị của biến có thể thay đổi khi thực hiện chương trình
  • Trong Python, biến được tạo ra khi thực hiện lệnh gán

2. Cú pháp lệnh gán

 = 
  • Python sẽ tính giá trị biểu thức bên phải, rồi gán kết quả cho biến bên trái
  • Kiểu dữ liệu của biến được xác định tại thời điểm gán giá trị

3. Quy tắc đặt tên biến

  • Chỉ gồm chữ cái tiếng Anh, chữ số (0-9), và dấu gạch dưới (_)
  • Không bắt đầu bằng chữ số
  • Phân biệt chữ hoa và chữ thường
  • Không được trùng với từ khóa

4. Các phép toán trên kiểu số

Phép toánKý hiệuVí dụ
Cộng+5 + 3 = 8
Trừ-5 - 3 = 2
Nhân*5 * 3 = 15
Chia/5 / 2 = 2.5
Chia lấy phần nguyên//5 // 2 = 2
Chia lấy dư%5 % 2 = 1
Lũy thừa**2 ** 3 = 8

5. Các phép toán trên xâu ký tự

  • Nối xâu: dùng dấu + → "ab" + "cd" = "abcd"
  • Lặp xâu: dùng dấu → "ab" 3 = "ababab"

6. Từ khóa

  • Là các từ đặc biệt của ngôn ngữ lập trình
  • Không được đặt tên biến trùng với từ khóa
  • Ví dụ: if, else, for, while, True, False, None, and, or, not...
💡 Mẹo nhớ: Thứ tự ưu tiên phép toán: Lũy thừa → Nhân/Chia → Cộng/Trừ (nhớ: "Lũy Nhân Cộng")
⚠️ Lưu ý thi: Phép lũy thừa thực hiện từ phải sang trái, các phép khác từ trái sang phải!

⚙️ Bài tập


Câu 1 (Hoạt động 1 - Trang 93)

Đề bài: Các tên biến nào dưới đây là hợp lệ trong Python?

  • A. _name
  • B. abc
  • C. My country
  • D. m&b
  • E. xyzABC
Cách 1 — Kiểm tra theo quy tắc đặt tên biến

Quy tắc: Tên biến chỉ gồm chữ cái, chữ số, dấu gạch dưới; không bắt đầu bằng số; không chứa ký tự đặc biệt hay khoảng trắng.

TênPhân tíchKết luận
A. _nameBắt đầu bằng dấu gạch dưới, chỉ gồm chữ cái và _Hợp lệ
B. abcChỉ gồm chữ cáiHợp lệ
C. My countryChứa khoảng trắngKhông hợp lệ
D. m&bChứa ký tự & (ký tự đặc biệt)Không hợp lệ
E. xyzABCChỉ gồm chữ cái (hoa và thường)Hợp lệ
Cách 2 — Kiểm tra nhanh bằng loại trừ

Loại ngay những tên có:

  • Khoảng trắng → loại C
  • Ký tự đặc biệt (ngoài _) → loại D

Đáp án: A, B, E là hợp lệ


Câu 2 (Hoạt động 1 - Trang 93)

Đề bài: Sau các lệnh dưới đây, các biến x, y nhận giá trị bao nhiêu?

>>> x = 10
>>> y = x*x*2 - 1
>>> x = y/2 + x
Cách 1 — Thực hiện tuần tự từng lệnh

Bước 1: x = 10

  • x = 10

Bước 2: y = xx2 - 1

  • y = 10 × 10 × 2 - 1
  • y = 100 × 2 - 1
  • y = 200 - 1
  • y = 199

Bước 3: x = y/2 + x

  • x = 199/2 + 10
  • x = 99.5 + 10
  • x = 109.5
Cách 2 — Lập bảng theo dõi giá trị
Lệnhxy
x = 1010chưa xác định
y = xx2 - 110199
x = y/2 + x109.5199

Đáp án: x = 109.5, y = 199


Câu 3 (Hoạt động 1 - Trang 93)

Đề bài: a, b nhận giá trị gì sau các lệnh sau?

>>> a, b = 2, 3
>>> a, b = a + b, a
Cách 1 — Phân tích lệnh gán đồng thời

Bước 1: a, b = 2, 3

  • a = 2, b = 3

Bước 2: a, b = a + b, a

Quan trọng: Trong lệnh gán đồng thời, Python tính tất cả giá trị bên phải trước, rồi mới gán cho các biến bên trái.

  • Vế phải: a + b = 2 + 3 = 5; a = 2
  • Sau đó gán: a = 5, b = 2
Cách 2 — Hiểu như hoán đổi có tính toán

Lệnh này thực chất là:

  • Tính tổng cũ (a + b) gán cho a mới
  • Giữ giá trị a cũ gán cho b mới
Lệnhab
a, b = 2, 323
a, b = a + b, a52

Đáp án: a = 5, b = 2

⚠️ Lưu ý thi: Lệnh gán đồng thời rất hay ra trong đề thi! Nhớ tính hết vế phải trước rồi mới gán.

Câu 1 (Hoạt động 2 - Trang 94)

Đề bài: Mỗi lệnh sau là đúng hay sai? Nếu đúng thì cho kết quả là bao nhiêu?

a) >>> (12 - 10//2)**2 - 1

Cách 1 — Thực hiện theo thứ tự ưu tiên

Bước 1: Tính trong ngoặc trước

  • 10//2 = 5 (chia lấy phần nguyên)
  • 12 - 5 = 7

Bước 2: Tính lũy thừa

  • 7**2 = 49

Bước 3: Tính trừ

  • 49 - 1 = 48

Cách 2 — Viết lại biểu thức rõ ràng

  • (12 - 10//2)**2 - 1
  • = (12 - 5)**2 - 1
  • = 7² - 1
  • = 49 - 1 = 48

Đáp án: Lệnh đúng, kết quả = 48

b) >>> (13 + 45**2)(30//12 - 5/2)

Cách 1 — Phân tích cú pháp

Quan sát biểu thức: (13 + 45**2)(30//12 - 5/2)

Đây là hai ngoặc đặt cạnh nhau mà không có phép toán ở giữa!

Trong toán học: (a)(b) = a × b, nhưng trong Python phải viết rõ dấu nhân.

Cách 2 — Kiểm tra nhanh

Python hiểu (biểu_thức_1)(biểu_thức_2) là gọi hàm, không phải phép nhân.

  • Biểu thức đầu cho ra số (không phải hàm)
  • Không thể "gọi" một số như hàm

Đáp án: Lệnh sai (lỗi cú pháp - thiếu phép toán giữa hai ngoặc)

💡 Mẹo nhớ: Trong Python phải viết rõ dấu * khi nhân, không được viết liền ngoặc như toán học!

Câu 2 (Hoạt động 2 - Trang 94)

Đề bài: Mỗi lệnh sau cho kết quả là xâu ký tự như thế nào?

a) >>> ""*20 + "010"

Cách 1 — Thực hiện từng phép toán

Bước 1: ""*20

  • "" là xâu rỗng (không có ký tự nào)
  • Xâu rỗng lặp 20 lần vẫn là xâu rỗng: ""

Bước 2: "" + "010"

  • Nối xâu rỗng với "010"
  • Kết quả: "010"
Cách 2 — Nhận xét nhanh

Xâu rỗng nhân với số bất kỳ vẫn là xâu rỗng, nên kết quả chỉ là phần cộng thêm.

Đáp án: "010" (hoặc viết là '010')

b) >>> "10"+"0"*5

Cách 1 — Thực hiện theo thứ tự ưu tiên

Bước 1: "0"*5 (phép nhân ưu tiên hơn phép cộng)

  • Lặp xâu "0" năm lần: "00000"

Bước 2: "10" + "00000"

  • Nối hai xâu: "1000000"
Cách 2 — Đếm ký tự
  • "10" có 2 ký tự
  • "0"*5 có 5 ký tự "0"
  • Tổng: 2 + 5 = 7 ký tự

Đáp án: "1000000" (số 1 triệu viết dạng xâu)


Câu hỏi (Hoạt động 3 - Trang 95)

Đề bài: Các tên biến sau có hợp lệ không?

  • a) _if
  • b) global
  • c) nolocal
  • d) return
  • e) true
Cách 1 — Đối chiếu với danh sách từ khóa

Từ khóa Python 3.x: False, break, else, if, not, as, from, while, return, None, class, except, import, or, assert, global, with, True, continue, in, pass, del, lambda, and, def, for, is, raise, elif, nonlocal...

TênPhân tíchKết luận
a) _ifCó dấu gạch dưới ở đầu, khác với từ khóa "if"Hợp lệ
b) globalTrùng với từ khóa globalKhông hợp lệ
c) nolocalKhác với từ khóa nonlocal (thiếu chữ n)Hợp lệ
d) returnTrùng với từ khóa returnKhông hợp lệ
e) trueKhác với từ khóa True (Python phân biệt hoa/thường)Hợp lệ
Cách 2 — Kiểm tra nhanh
  • Thêm ký tự vào từ khóa → hợp lệ (như _if)
  • Viết sai chính tả từ khóa → hợp lệ (như nolocal, true)
  • Viết đúng từ khóa → không hợp lệ (như global, return)

Đáp án:

  • Hợp lệ: a) _if, c) nolocal, e) true
  • Không hợp lệ: b) global, d) return
⚠️ Lưu ý thi: Python phân biệt hoa/thường nên trueTrue, falseFalse

LUYỆN TẬP

Câu 1 (Trang 96)

Đề bài: Lệnh sau có lỗi gì?

>>> x = 1
>>> 123 = x + 1
    ^
SyntaxError
Cách 1 — Phân tích cú pháp lệnh gán

Cú pháp lệnh gán: =

Lệnh 1: x = 1 → Đúng (x là tên biến hợp lệ)

Lệnh 2: 123 = x + 1Sai

  • Vế trái phải là tên biến
  • 123 là một số, không phải tên biến
  • Tên biến không được bắt đầu bằng chữ số
Cách 2 — Hiểu bản chất

Lệnh gán là "đặt giá trị vào ô nhớ có tên là biến". Số 123 không phải là tên ô nhớ, nên không thể gán giá trị cho nó.

Đáp án: Lỗi cú pháp (SyntaxError) - Không thể dùng số làm tên biến (vế trái của phép gán phải là tên biến hợp lệ)


Câu 2 (Trang 96)

Đề bài: Lệnh sau sẽ in ra kết quả gì?

>>> print("Tin học"*3 + "10 "*2)
Cách 1 — Thực hiện từng phép toán

Bước 1: Tính "Tin học"*3

  • Lặp xâu "Tin học" 3 lần
  • Kết quả: "Tin họcTin họcTin học"

Bước 2: Tính "10 "*2

  • Lặp xâu "10 " (có dấu cách) 2 lần
  • Kết quả: "10 10 "

Bước 3: Nối hai xâu

  • "Tin họcTin họcTin học" + "10 10 "
  • Kết quả: "Tin họcTin họcTin học10 10 "
Cách 2 — Phân tích cấu trúc
PhầnNội dungSố lầnKết quả
"Tin học"7 ký tự×321 ký tự
"10 "3 ký tự×26 ký tự

Đáp án: Tin họcTin họcTin học10 10


VẬN DỤNG

Câu 1 (Trang 96)

Đề bài: Viết các lệnh để thực hiện việc đổi số giây ss cho trước sang số ngày, giờ, phút, giây, in kết quả ra màn hình.

Ví dụ: nếu ss = 684245 thì kết quả in ra: 684245 giây = 7 ngày 22 giờ 4 phút 5 giây

Cách 1 — Sử dụng phép chia lấy phần nguyên và lấy dư

Phân tích:

  • 1 phút = 60 giây
  • 1 giờ = 3600 giây (60 × 60)
  • 1 ngày = 86400 giây (24 × 3600)

Chương trình:

ss = 684245

# Tính số ngày
ngay = ss // 86400

# Tính số giờ (từ phần dư sau khi lấy ngày)
gio = (ss % 86400) // 3600

# Tính số phút (từ phần dư sau khi lấy giờ)
phut = (ss % 3600) // 60

# Tính số giây còn lại
giay = ss % 60

# In kết quả
print(ss, "giây =", ngay, "ngày", gio, "giờ", phut, "phút", giay, "giây")
Cách 2 — Tính tuần tự, trừ dần
ss = 684245
ss_goc = ss  # Lưu lại giá trị gốc để in

ngay = ss // 86400
ss = ss - ngay * 86400  # Trừ đi số giây đã tính thành ngày

gio = ss // 3600
ss = ss - gio * 3600    # Trừ đi số giây đã tính thành giờ

phut = ss // 60
giay = ss % 60

print(ss_goc, "giây =", ngay, "ngày", gio, "giờ", phut, "phút", giay, "giây")

Kiểm tra với ss = 684245:

  • ngay = 684245 // 86400 = 7
  • gio = (684245 % 86400) // 3600 = 79445 // 3600 = 22
  • phut = (684245 % 3600) // 60 = 245 // 60 = 4
  • giay = 684245 % 60 = 5

Kết quả: 684245 giây = 7 ngày 22 giờ 4 phút 5 giây

💡 Mẹo nhớ: Đổi đơn vị thời gian: chia lấy nguyên (//) để lấy đơn vị lớn, chia lấy dư (%) để lấy phần còn lại!

Câu 2 (Trang 96)

Đề bài: Hãy cho biết trước và sau khi thực hiện các lệnh sau, giá trị các biến x, y là bao nhiêu? Em có nhận xét gì về kết quả nhận được?

>>> x, y = 10, 7
>>> x, y = y, x
Cách 1 — Thực hiện tuần tự

Trước khi thực hiện: x, y chưa được khởi tạo

Sau lệnh 1: x, y = 10, 7

  • x = 10
  • y = 7

Sau lệnh 2: x, y = y, x

  • Vế phải được tính trước: y = 7, x = 10
  • Gán đồng thời: x = 7, y = 10
Cách 2 — Lập bảng theo dõi
Thời điểmxy
Trước lệnh 1chưa xác địnhchưa xác định
Sau lệnh 1107
Sau lệnh 2710

Đáp án:

  • Trước: x, y chưa có giá trị
  • Sau lệnh 1: x = 10, y = 7
  • Sau lệnh 2: x = 7, y = 10

Nhận xét: Lệnh x, y = y, x thực hiện hoán đổi giá trị của hai biến x và y!

💡 Mẹo nhớ: Trong Python, hoán đổi hai biến rất đơn giản: a, b = b, a. Không cần biến tạm như các ngôn ngữ khác!
⚠️ Lưu ý thi: Đây là kỹ thuật quan trọng, thường dùng trong các thuật toán sắp xếp!

🎯 Ghi nhớ

  1. Biến là tên của vùng nhớ, giá trị có thể thay đổi trong chương trình
  1. Quy tắc đặt tên biến: Chỉ dùng chữ cái, số, dấu _; không bắt đầu bằng số; phân biệt hoa/thường; không trùng từ khóa
  1. Lệnh gán đồng thời a, b = x, y tính hết vế phải trước rồi mới gán
  1. Thứ tự ưu tiên phép toán: Lũy thừa (*) → Nhân/Chia (,/,//,%) → Cộng/Trừ (+,-)
  1. Phép lũy thừa thực hiện từ phải sang trái (khác các phép khác)
  1. Phép toán trên xâu: + để nối, * để lặp
Chế độ đọc sách →