Professional Documents
Culture Documents
Bài 2
Viết chương trình yêu cầu người dùng nhập vào một số nguyên từ 1 đến 10. Nếu số nhập
vào nằm ngoài phạm vi, hãy sử dụng hàm raise để sinh ra một lỗi ValueError và thông
báo rằng dữ liệu là không hợp lệ.
Đáp án:
number = int(input("Please enter a number between 1 and 10: "))
Đáp án:
divide(a, b):
try:
print(a / b)
except ZeroDivisionError:
print("Cannot divide by zero")
except TypeError:
print("Both values must be numbers. Cannot divide {a} and
{b}")
except ArithmeticError:
print("Could not complete the division. The numbers were
likely too large")
Bài 4
Cho hàm như sau:
def fancy_divide(numbers,index):
denom = numbers[index]
for i in range(len(numbers)):
numbers[i] /= denom
Viết lại hàm trên, sử dụng cấu trúc try.. except để bắt các lỗi có thể xảy ra (IndexError,
ZeroDivisionError, …).
Chạy chương trình và nhập liệu để kiểm thử hàm.
Đáp án tham khảo
Bài 5
Viết một chương trình cho phép người dùng nhập vào một danh sách các số nguyên
dương được phân tách bằng dấu phẩy. Phân tách chuỗi nhập vào thành các số nguyên
riêng lẻ. Sử dụng cấu trúc câu lệnh try … except để thông báo cho người dùng khi không
thể chuyển đổi các giá trị mà họ đã nhập. (Ví dụ người dùng nhập vào: 76, 93, 84, 81 thì
chuyển thành [76, 93, 84, 81]
Đáp án tham khảo:
grades = input("nhập vào một dãy số nguyên, phân cách bởi dấu phẩy:
").split(",")
try:
grades = [int(grade) for grade in grades]
except ValueError:
print("Số nhập vào không đúng định dạng.")
print(grades)
Bài 6
Cho hàm get_item() như sau:
Bài 7
Giả sử bạn có một tệp văn bản có tên data.txt (giả sử tệp này chứa dòng chữ “test
exception”). Đọc tệp và hiển thị nội dung lên màn hình, sử dụng cấu trúc try .. except bắt
ngoại lệ phát sinh nếu tệp không tồn tại.
Đáp án tham khảo
try:
with open("data.txt", "r") as text_file:
print(text_file.read())
except FileNotFoundError:
print("Error: Couldn't find data.txt")
else:
text_file.close()
Bài 8
Viết 1 máy tính giả lập. Dữ liệu được người dùng nhập vào từ bàn phím. Dữ liệu nhập
vào bao gồm một số, một toán tử (+,-,*,/) và một số khác, mỗi thành phần phân cách
nhau bởi khoảng trắng. (Ví dụ 1 + 1 hoặc 2 – 3).
Phân tách dữ liệu đầu vào của người dùng bằng cách sử dụng str.split() và kiểm tra kết
quả giá trị đầu vào.
- Nếu đầu vào không đủ 3 thành phần thì báo ra 1 lỗi
- Nếu thành phần thứ nhất và thứ ba không phải là một số thực (float) báo ra 1 lỗi.
- Nếu thành phần thứ hai không phải là toán tử (+,-,*,/) báo ra 1 lỗi.
- Nếu giá trị đầu vào đúng thì hiển thị ra kết quả
Ví dụ: >>> 1 + 1
2.0
>>> 3.2 - 1.5
1.7
Viết các hàm và chương trình thực hiện các công việc trên, sử dụng cấu trúc try.. except
để bắt các ngoại lệ và hàm raise để sinh ra một lỗi.
(Gợi ý:
- Viết 1 hàm kiểm tra dữ liệu đầu vào
- Viết 1 hàm thực hiện phép tính với các toán tử (+,-,*,/) nếu dữ liệu đầu vào là
đúng.
- Viết một chương trình cho phép nhập dữ liệu đầu vào và sử dụng các hàm trên,
chương trình nhập kết thúc nếu người dùng nhập ký tự ‘q’)
Xây dựng bộ testcase để kiểm thử chương trình.
Đáp án:
def parse_input(user_input):
input_list = user_input.split()
if len(input_list) != 3:
raise ValueError('Input does not consist of three elements')
n1, op, n2 = input_list
try:
n1 = float(n1)
n2 = float(n2)
except ValueError:
raise ValueError('The first and third input value must be
numbers')
return n1, op, n2
if op == '+':
return n1 + n2
if op == '-':
return n1 - n2
if op == '*':
return n1 * n2
if op == '/':
return n1 / n2
raise ValueError('{0} is not a valid operator'.format(op))
while True:
user_input = input('>>> ')
if user_input == 'exit':
break
try:
n1, op, n2 = parse_input(user_input)
result = calculate(n1, op, n2)
print(result)
except ValueError as ex
print(ex)
Bài 9
Viết hàm nhận một danh sách (list) các số nguyên làm đối số và trả về danh sách các số
chẵn.
Yêu cầu:
- Trong hàm sử dụng lệnh assert để kiểm tra điều kiện đầu vào là một danh sách
(list) số nguyên không được rỗng
- Sử dụng các câu lệnh assert để kiểm thử hàm.
Bài 10
Viết một hàm nhận danh sách (list) các số nguyên làm đối số và trả về phần tử lớn nhất
trong danh sách. (Lưu ý KHÔNG sử dụng hàm max() có sẵn)
Yêu cầu:
- Trong hàm sử dụng lệnh assert để kiểm tra điều kiện đầu vào là một danh sách số
nguyên không được rỗng.
- Sử dụng các câu lệnh assert để kiểm thử hàm.
Đáp án tham khảo
maximum = max_list[0]
for i in max_list:
if type(i) != int:
return("The list should only have integers, not " +
str(type(i))[8:-2])
elif i > maximum:
maximum = i
return maximum
assert max_num([-9, -23, -7, -2, -6, -8, -34, -24, -74, -31]) == -
2
assert max_num([100,2,6,79,24,12,57,7,1,6,8,2,7,9]) == 100
assert max_num([-1, -2, -3, -4, -5]) == -1
assert max_num([-3, 2, 1, 3, -2, -1]) == 3
assert max_num([5]) == 5
print("Exerciseis correct.")
Bài 11
Viết hàm nhận danh sách (list) làm đối số và trả về danh sách đảo ngược. (KHÔNG sử
dụng hàm reverse() có sẵn).
Yêu cầu:
- Trong hàm sử dụng lệnh assert để kiểm tra điều kiện đầu vào là một danh sách
(list)
- Sử dụng các câu lệnh assert để kiểm thử hàm.