Giải Tin học 10 – Bài 29. Nhận biết lỗi chương trình – KNTT

1. Nhận biết lỗi chương trình

Câu 1. Khi gõ sai cú pháp một lệnh, chương trình sẽ dừng lại và báo lỗi, đó là lỗi loại gì?

Câu 2. Bài toán yêu cầu sắp xếp dãy số ban đầu thành dãy tăng dần. Giả sử dãy số ban đầu là [3, 1, 8, 10, 0]. Kết quả thu được dãy [1, 3, 8, 10, 0]. Chương trình có lỗi không? Nếu có thì lỗi đó thuộc loại gì?

Hướng dẫn giải:

Câu 1: Khi gõ sai cú pháp một lệnh, chương trình sẽ dừng lại và báo lỗi cú pháp (SyntaxError).

Câu 2: Chương trình chạy không có lỗi ngoại lệ nhưng kết quả đưa ra sai, không chính xác so với yêu cầu của đề bài. Đây là lỗi logic bên trong chương trình.

2. Một số lỗi ngoại lệ thường gặp

Câu hỏi. Hãy nêu mã lỗi ngoại lệ của mỗi lệnh sau nếu xảy ra lỗi?
a) A[1.5]
b) int(“abc”)
c) “10”*3.5
d) 12 + x(10)

Hướng dẫn giải:
a) A[1.5] sẽ phát sinh lỗi TypeError – Lỗi kiểu dữ liệu, truy cập một phần tử của danh sách nhưng chỉ số không phải là số nguyên.
b) int(“abc”) sẽ phát sinh lỗi ValueError – Lỗi liên quan đến giá trị, đối số “abc” không hỗ trợ chuyển sang kiểu số nguyên.
c) “10”*3.5 sẽ phát sinh lỗi TypeError – Lỗi kiểu dữ liệu, không thể nhân chuỗi với số thực (float).
d) 12 + x(10) sẽ phát sinh lỗi NameError – Lỗi tên, do x chưa được định nghĩa hoặc khai báo trước.

Luyện tập

Câu 1. Các lệnh sau có sinh lỗi chương trình không? Nếu có thì mã lỗi là gì?
a)

A = [1,3,5,10,0]
for k in
range(1,len(A)+!):
    print(A[k])

b)

s1, s2 = "101010",1010101
s = s1 + s2

Câu 2. Để tính giá trị trung bình của một danh sách số A, người lập trình đã dùng lệnh sau để tính:
gttb = sum(A)/len(A)
lệnh này có thể sinh lỗi ngoại lệ không? Nếu có thì là những lỗi gì?

Hướng dẫn giải:

Câu 1:
a) Có, phát sinh lỗi SyntaxError, do sai cú pháp câu lệnh for.
b) Có, phát sinh lỗi Type Error, do không thể thực hiện phép + kiểu xâu với kiểu số nguyên.

Câu 2: Lệnh gttb = sum(A)/len(A) có thể phát sinh các lỗi ngoại lệ sau:
– ZeroDivisionError – Lỗi chia cho 0 (không) nếu len(A) = 0 (tức danh sách A rỗng)
– TypeError – Lỗi kiểu dữ liệu nếu các phần tử của A có kiểu dữ liệu khác nhau.

Vận dụng

Câu 1. Giả sử em được yêu cầu viết một chương trình nhập số tự nhiên n từ bàn phím, kết quả đưa ra là danh sách các ước số thực sự của n tính cả 1 và không tính n. Hãy viết chương trình và kiểm tra các khả năng sinh lỗi khi thực hiện chương trình.

Câu 2. Em hãy viết một chương trình nhỏ để khi chạy sẽ sinh mã lỗi NameError.

Hướng dẫn giải:

Câu 1: Chương trình

n = int(input("Mời nhập số tự nhiên n: "))
A = []
for i in range(1,n):
    if n%i==0: A.append(i)
print("Danh sách các ước số thực sự của",n,"là:")
print(A)

Khả năng phát sinh lỗi của chương trình trên: Chỉ khi người dùng nhập sai n (không phải số tự nhiên), khi đó phát sinh lỗi ValueError – Lỗi giá trị.

Câu 2: Chương trình phát sinh lỗi NameError sau:

a = 10
s = a + b

Xem thêm Bài 30. Kiểm thử và gỡ lỗi chương trình

Trả lời

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 *