Quan sát đoạn chương trình, giải thích kết quả in ra (Python)

Trả lời nhanh

Để giải thích kết quả in ra của một đoạn chương trình, em đọc từng lệnh theo thứ tự thực hiện, ghi giá trị mới của mỗi biến vào bảng theo dõi, và chỉ viết ra màn hình những gì lệnh print thực sự in. Với vòng lặp, cần xác định rõ số lần lặp và điều kiện dừng. Dưới đây là các ví dụ tự đặt để em luyện cách làm này.

Lưu ý: bài này hướng dẫn phương pháp với các đoạn mã ví dụ do thầy cô tự đặt bằng ngôn ngữ Python. Nếu đề của em có đoạn mã khác, em chỉ cần áp dụng đúng các bước bên dưới.

Các bước “chạy tay” một đoạn chương trình

  1. Liệt kê biến và giá trị ban đầu (các lệnh gán đầu đoạn).
  2. Đi từng dòng từ trên xuống. Gặp lệnh gán thì cập nhật biến; gặp if thì tính điều kiện đúng hay sai; gặp for/while thì lặp lại thân vòng.
  3. Vẽ bảng theo dõi: mỗi cột là một biến, mỗi hàng là một bước.
  4. Chỉ ghi kết quả khi gặp print, chú ý kiểu dữ liệu, dấu cách và xuống dòng.

Ví dụ 1: Phép toán số học và kiểu dữ liệu

a = 7
b = 2
print(a // b, a % b, a / b)
  • 7 // 2 là chia lấy phần nguyên → 3.
  • 7 % 2 là chia lấy phần dư → 1.
  • 7 / 2 là phép chia thông thường, luôn cho số thực → 3.5.

Kết quả in ra: 3 1 3.5 (các giá trị cách nhau một dấu cách vì print mặc định ngăn cách bằng dấu cách).

Ví dụ 2: Vòng lặp for kết hợp if

for i in range(1, 6):
    if i % 2 == 0:
        print(i, end=" ")

range(1, 6) cho i = 1, 2, 3, 4, 5 (không có 6). Chỉ những i chia hết cho 2 mới được in, và end=" " khiến các số nằm trên cùng một dòng.

i i % 2 == 0? In ra
1 Sai –
2 Đúng 2
3 Sai –
4 Đúng 4
5 Sai –

Kết quả: 2 4

Ví dụ 3: Biến tích luỹ

s = 0
for i in range(1, 5):
    s = s + i
print(s)

Lệnh print nằm ngoài vòng lặp (không thụt lề) nên chỉ in một lần, sau khi vòng lặp kết thúc.

i s trước s sau
1 0 1
2 1 3
3 3 6
4 6 10

Kết quả: 10. Nếu em thụt lề print(s) vào trong vòng for, kết quả sẽ thành bốn dòng: 1, 3, 6, 10.

Ví dụ 4: Vòng lặp while

n = 20
d = 0
while n > 1:
    n = n // 2
    d += 1
print(d)
Lần lặp n sau khi chia d
1 10 1
2 5 2
3 2 3
4 1 4

Sau lần 4, n = 1 nên điều kiện n > 1 sai, vòng lặp dừng. Kết quả: 4.

Ví dụ 5: Chuỗi và số – dễ nhầm nhất

print("2" + "3")
print(2 + 3)
print("2" * 3)
  • "2" + "3": nối hai chuỗi → 23.
  • 2 + 3: cộng hai số → 5.
  • "2" * 3: lặp chuỗi 3 lần → 222.

Kết quả gồm ba dòng: 23, 5, 222.

Lỗi sai thường gặp

  • Quên rằng range(a, b) không lấy giá trị b.
  • Viết kết quả 3 thay vì 3.5 khi dùng phép chia /.
  • Không để ý thụt lề, nên tính sai số lần print được thực hiện.
  • Bỏ qua end=" ", dẫn đến xuống dòng sai.
  • Nhầm = (gán) với == (so sánh).

Mẹo nhớ

“Gán rồi mới dùng, thụt lề là thuộc về vòng, print in gì ghi nấy.” Khi còn phân vân, luôn quay về bảng theo dõi biến; làm đều đặn, em sẽ ít sai hơn trong bài kiểm tra.

Bài luyện tập (tự đặt)

  1. x = 10
    x = x + 5
    x = x * 2
    print(x)

    Đáp án: x lần lượt là 10 → 15 → 30, in 30.

  2. for i in range(3):
        print("*" * (i + 1))

    Đáp án: i = 0, 1, 2 nên in ba dòng: *, **, ***.

  3. print(10 % 4, 10 // 4, 2 ** 3)

    Đáp án: 10 % 4 = 2; 10 // 4 = 2; 2 ** 3 = 8. In ra 2 2 8.

Câu hỏi thường gặp

Làm sao biết đoạn chương trình in ra kết quả gì?

Em chạy tay từng dòng theo thứ tự, ghi giá trị các biến vào bảng theo dõi và chỉ ghi ra những gì lệnh print in ra.

Vì sao range(1, 6) không có số 6?

Trong Python, range(a, b) lấy các số từ a đến b - 1, nên giá trị cuối b không được tính.

Phép / và // trong Python khác nhau thế nào?

Phép / cho kết quả là số thực (7 / 2 = 3.5), còn // chia lấy phần nguyên (7 // 2 = 3).

Thụt lề ảnh hưởng thế nào đến kết quả in ra?

Lệnh thụt lề trong for/while/if thuộc khối lệnh đó và được thực hiện theo vòng lặp hay điều kiện. Lệnh không thụt lề chỉ chạy một lần sau khối.