Bài giảng Lập trình Python - Bài 2: Hàm và rẽ nhánh trong python

pdf 26 trang Gia Huy 17/05/2022 2980
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Python - Bài 2: Hàm và rẽ nhánh trong python", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_python_bai_2_ham_va_re_nhanh_trong_pytho.pdf

Nội dung text: Bài giảng Lập trình Python - Bài 2: Hàm và rẽ nhánh trong python

  1. LẬP TRÌNH PYTHON Bài 2: Hàm và rẽ nhánh trong python
  2. Tóm tắt nội dung bài trước ▪ Hai cách thực thi python: chạy chương trình và dòng lệnh ▪ Dùng dấu thăng (#) để viết dòng chú thích ▪ Biến không cần khai báo trước, không cần chỉ kiểu ▪ Dữ liệu chuỗi nằm trong cặp nháy đơn ('), nháy kép ("), hoặc ba dấu nháy (""" / ''') – nếu viết nhiều dòng ▪ Sử dụng chuỗi thoát (\)để khai báo các ký tự đặc biệt ▪ Sử dụng chuỗi thô: r"nội dung" ▪ Hàm print để in dữ liệu, hàm input để nhập dữ liệu ▪ Có thể kết hợp với hàm chuyển đổi kiểu ▪ Kiểu số và phép toán có một số điểm cần chú ý ▪ Số nguyên không giới hạn độ lớn ▪ Phép chia nguyên và phép chia chính xác TRƯƠNG XUÂN NAM 2
  3. Chữa bài tập buổi trước Nhập 2 số nguyên a và b, hãy tính và in ra a = int(input("Nhập số nguyên A = ")) b = int(input("Nhập số nguyên B = ")) print("Kết quả:", a (1 / b)) TRƯƠNG XUÂN NAM 3
  4. Chữa bài tập buổi trước Nhập số nguyên n, hãy in ra n ở dạng hệ cơ số 16, hệ cơ số 8 và hệ cơ số 2 n = int(input("Nhập số nguyên N = ")) print("N ở hệ cơ số 16:", hex(n)) print("N ở hệ cơ số 8:", oct(n)) print("N ở hệ cơ số 2:", bin(n)) TRƯƠNG XUÂN NAM 4
  5. Chữa bài tập buổi trước Bạn có 10 triệu đồng trong tài khoản ngân hàng, với lãi suất 5,1% hàng năm. Tính xem: ▪ Sau 10 năm bạn có bao nhiêu tiền? ▪ Sau bao nhiêu năm bạn sẽ có ít nhất 50 triệu đồng? import math tien = 1e7 # số tiền đầu (10M) lai = 5.1 / 100 # lãi suất 5.1% print("Số tiền sau 10 năm:", int(tien * (1 + lai) 10)) dich = 5e7 # số tiền đích (50M) nam = math.log(dich / tien, 1 + lai) # tính theo log print("Số năm để có ít nhất 50 triệu:", math.ceil(nam)) TRƯƠNG XUÂN NAM 5
  6. Chữa bài tập buổi trước Nhập số nguyên X, hãy đếm xem X có bao nhiêu chữ số, in ra chữ số đầu tiên của X (sinh viên chủ động giải thích cách làm dưới đây bằng kiến thức toán học cơ sở) import math x = int(input("Nhập số nguyên X = ")) len = math.floor(math.log10(x)) print("Số chữ số của X:", len + 1) print("Chữ số đầu tiên của X:", x // 10 len) TRƯƠNG XUÂN NAM 6
  7. Nội dung 1. Hàm 2. Phép toán “if” 3. Rẽ nhánh 4. Bài tập TRƯƠNG XUÂN NAM 7
  8. Phần 1 Hàm TRƯƠNG XUÂN NAM 8
  9. Khai báo và gọi hàm ▪ Cú pháp khai báo hàm rất đơn giản def (danh-sách-tham-số): ▪ Ví dụ: hàm tính tích 2 số def tich(a, b): return a * b ▪ Hàm trả về kết quả bằng lệnh return, nếu không trả về thì coi như trả về None ▪ Gọi hàm thông qua tên và các đối số dt = tich(100, 200) s = tich(20, 30) + tich(40, 50) TRƯƠNG XUÂN NAM 9
  10. Hàm với tham số mặc định ▪ Hàm có thể chỉ ra giá trị mặc định của tham số # nếu không nói gì thì mặc định b = 1 def tich(a, b = 1): return a*b ▪ Như vậy với hàm trên ta có thể gọi thực hiện nó: print(tich(10, 20)) # 200 print(tich(10)) # 10 print(tich(a=5)) # 5 print(tich(b=6, a=5)) # 30 ▪ Chú ý: các tham số có giá trị mặc định phải đứng cuối danh sách tham số TRƯƠNG XUÂN NAM 10
  11. Trả về kết quả từ hàm ▪ Hàm không có kiểu, vì vậy có thể trả về bất kì loại dữ liệu gì, thậm chí có thể trả về nhiều kiểu dữ liệu khác nhau def fuc1(): return 1001 # trả về một loại kết quả def fuc2(): print('None') # không trả về kết quả def fuc3(): return 1001, 'abc', 4.5 # trả về phức hợp nhiều loại def fuc4(n): if n < 0: return 'số âm' # trả về chuỗi else: return n + 1 # trả về số TRƯƠNG XUÂN NAM 11
  12. Python không cho phép nạp chồng hàm Python không cho phép hàm trùng tên, nếu cố ý định nghĩa nhiều hàm trùng tên, python sẽ sử dụng phiên bản cuối cùng def abc(): return 'abc version 1' def abc(a): return 'abc version 2' def abc(a, b): return 'abc version 3' print(abc()) # lỗi, hàm abc cần 2 tham số a và b print(abc(1, 2)) # ok, in ra 'abc version 3' TRƯƠNG XUÂN NAM 12
  13. Tham số tùy biến trong python Python cho phép số lượng tham số tùy ý bằng cách đặt dấu sao (*) vào phía trước tên tham số. Trong ví dụ dưới *names là một dãy không giới hạn số tham số # tham số tùy biến def sayhello(*names): # duyệt các tham số for name in names: print("Hello", name) # gọi hàm với 4 tham số sayhello("Monica", "Luke", "Steve", "John") # gọi hàm với 3 tham số sayhello("Aba", "Donald", "Pence") TRƯƠNG XUÂN NAM 13
  14. Phần 2 Phép toán “if” TRƯƠNG XUÂN NAM 14
  15. Phép toán “if” # X là max của A và B X = A if A > B else B # N có phải là số nguyên tố có 1 chữ số hay không A = "Đúng" if N in [2, 3, 5, 7] else "Sai" # In ra màn hình “chẵn” nếu n chia hết cho 2, # in ra “lẻ” nếu ngược lại print('chẵn' if (n % 2) == 0 else "lẻ") # Sinh viên có được thi hay không? print("được thi" if so_buoi_nghi < 3 else "không được thi") # Biện luận nghiệm phương trình bậc 2 (if lồng nhau) KQ = "một nghiệm" if delta == 0 else \ "vô nghiệm" if delta < 0 else "hai nghiệm" TRƯƠNG XUÂN NAM 15
  16. Phép toán “if” ▪ Cú pháp: A if else B ▪ Thực hiện: ▪ Phép toán trả về A nếu là đúng, ngược lại trả về B ▪ A và B có thể là các giá trị, biểu thức tính toán, lời gọi hàm, ▪ Các phép toán if cũng có thể lồng nhau ▪ Cách sử dụng if này khá kỳ lạ, nhưng hợp lý nếu xét về mặt ngôn ngữ và cách đọc điều kiện logic ▪ Ưu điểm: đây là phép toán, có thể viết trong biểu thức ▪ Bài tập: Biến X để lưu tình trạng gửi SMS, X=0 tức là chưa gửi được, X=1 tức là đã gửi thành công, X=2 tức là đã gửi và người nhận đã đọc. Viết câu lệnh sử dụng phép toán if để in ra màn hình thông báo tương ứng với giá trị của X. TRƯƠNG XUÂN NAM 16
  17. Phần 3 Rẽ nhánh TRƯƠNG XUÂN NAM 17
  18. Rẽ nhánh # In thông báo nếu được điểm số loại giỏi if diem >= 8: print("Chúc mừng bạn đã được điểm giỏi") # In thông báo xem n chẵn hay lẻ if (N % 2) == 0: print("N là số chẵn") else: print("N là số lẻ") # Biện luận nghiệm của phương trình bậc 2 if delta == 0: print("Phương trình có nghiệm kép") elif delta < 0: print("Phương trình vô nghiệm") else: print("Phương trình có hai nghiệm phân biệt") TRƯƠNG XUÂN NAM 18
  19. Rẽ nhánh TRƯƠNG XUÂN NAM 19
  20. Rẽ nhánh ▪ Python chỉ có một cấu trúc rẽ nhánh duy nhất, sử dụng để lựa chọn làm một trong số nhiều công việc ▪ Nhiều ngôn ngữ lập trình khác sử dụng if cho trường hợp 2 lối rẽ nhánh và switch cho trường hợp nhiều lối rẽ nhánh ▪ Nguyên tắc với rẽ nhánh if-elif-else: ▪ Biểu thức điều kiện của if và elif phải có kết quả logic ▪ Hệ thống sẽ lần lượt tính giá trị từng biểu thức điều kiện từ trên xuống dưới, bắt đầu từ phát biểu if ▪ Nếu biểu thức điều kiện nào đúng thì khối lệnh tương ứng được thực hiện và bỏ qua các khối lệnh khác ▪ Trường hợp mọi biểu thức điều kiện đều sai, khối lệnh ứng với else sẽ được thực hiện ▪ Khối else là tùy chọn, không nhất thiết phải xuất hiện TRƯƠNG XUÂN NAM 20
  21. Phân tích ví dụ a = int(input("A = ")) if 0 == a % 2: print("A là số chẵn") elif 0 == a % 5: print("A chia hết cho 5") else: print("A không có gì đặc biệt") a = 11: in ra “A không có gì đặc biệt” a = 12: in ra “A là số chẵn” a = 15: in ra “A chia hết cho 5” a = 10: in ra “A là số chẵn” – chú ý – A vừa là số chẵn vừa chia hết cho 5, nhưng lệnh dừng ngay khi xét đều kiện A chẵn. TRƯƠNG XUÂN NAM 21
  22. Lệnh if lồng nhau, chú ý thụt lề age = int(input("Bạn bao nhiêu tuổi? ")) print("Ồ bạn đã", age, "tuổi rồi!") if age >= 18: print("Đủ tuổi đi bầu cử") if age > 100: print("Có vẻ sai sai!") else: # else thuộc về if ở dòng 3 print("Nhỏ quá") Như vậy trong python thì dấu cách cũng có vai trò lập trình của nó, không chỉ đơn giản là viết cho đẹp TRƯƠNG XUÂN NAM 22
  23. Phần 4 Bài tập TRƯƠNG XUÂN NAM 23
  24. Bài tập TRƯƠNG XUÂN NAM 24
  25. Bài tập 퐹 = 1! + 2! + ⋯ + ! ▪ ▪ ▪ ▪ ▪ ▪ TRƯƠNG XUÂN NAM 25
  26. Bài tập ▪ ▪ ▪ TRƯƠNG XUÂN NAM 26