Vấn đề tham số của hàm trong Python

Một phần của tài liệu SGK tin học 11 using python3 (Trang 83 - 87)

Bài 18 Ví dụ về cách định nghĩa và sử dụng hàm

3. Vấn đề tham số của hàm trong Python

• Kiểu tham số bất biến gồm các kiểu: số nguyên, số thực, chuỗi và bộ (tuble): Các tham số có kiểu này khi được gửi cho hàm thì các tác động trong thân hàm lên chúng không làm thay đổi giá trị của chúng sau khi hàm kết thúc.

• Kiểu tham số khả biến gồm các kiểu: danh sách (list), tập hợp (set), từ điển (dict): Các tham số kiểu này khi được gửi cho hàm thì các tác động trong thân hàm lên chúng sẽ làm thay đổi giá trị của chúng sau khi hàm kết thúc.

Ví dụ 1: Minh họa về tham số bất biến

Nhập vào một số nguyên, gửi số đó cho hàm để nhân đơi giá trị của biến và quan sát xem biến có bị thay đổi giá trị sau khi gọi hàm hay không.

1. def gap_doi(x): 2. x *= 2 3. 4. a = int(input("Nhập một số nguyên: ")) 5. gap_doi(a) 6. print(a)

Kết quả chạy chương trình với giá trị nhập vào bằng 5 như sau:

Ta thấy, giá trị biến a sau khi hàm gap_doi() tác động không hề thay đổi.

Ví dụ 2: Minh họa về tham số khả biến

Gửi cho hàm một dãy số đó để nhân đơi giá trị của mỗi phần tử của dãy và quan sát xem dãy có bị thay đổi giá trị sau khi gọi hàm hay không.

1. def gap_doi(x):

2. for i in range(len(x)): 3. x[i] *= 2

4.

5. a = list(map(int,input("Nhập một dãy nguyên: ").split())) 6. print("Trước khi gọi hàm: ", a)

7. gap_doi(a)

8. print("Sau khi gọi hàm: ", a)

Kết quả chạy chương trình với giá trị dãy nhập vào là : 1 2 3 4, như sau:

Bài tập và thực hành 6

1. Mục đích, yêu cầu

• Rèn luyện các thao tác xử lí xâu;

• Nâng cao kĩ năng viết, sử dụng hàm.

2. Nội dung

a) Tìm hiểu việc xây dựng hai hàm sau đây

• Hàm CatDan(S) nhận đầu vào là xâu s gồm khơng q 79 kí tự, tạo ra xâu kết quả t thu được từ xâu s bằng việc chuyển kí tự đầu tiên của s xuống cuối xâu. Ví dụ nếu s = 'abcd' thì t = 'bcda'.

1. def CatDan(s):

2. t = s[1:]+s[0] 3. return t

• Hàm CanGiua(s) nhận đầu vào là xâu s gồm khơng q 79 kí tự, bổ sung vào đầu s một số dấu cách để khi đưa ra màn hình xâu kí tự trong s ban đầu được căn giữa dịng gồm 80 kí tự. 1. def CanGiua(s):

2. n = len(s) 3. n = (80-n)//2 4. t = ' '*n + s 5. return t

b) Theo dõi cách sử dụng hai hàm trên, ta có thể viết chương trình sau đây để nhập một xâu kí tự từ bàn phím và đưa xâu đó ra màn hình có dạng dịng chữ chạy giữa màn hình văn bản 25×80.

1. # Bài thực hành 6 2. import time 3. def CatDan(s): 4. t = s[1:]+s[0] 5. return t 6. 7. def CanGiua(s): 8. n = len(s) 9. n = (80-n)//2 10. t = ' '*n + s 11. return t 12. 13. s = input("Nhập xâu s: ") 14. s = CanGiua(s) 15. try: 16. while True: 17. print(s) 18. time.sleep(0.5) # Dừng 0.5 giây 19. s = CatDan(s) 20. print('\n'*30)

21. except KeyboardInterrupt: # Dừng khi bấm CTRL + C

Hãy chạy thử chương trình trên với dịng chữ: '... Mừng nghìn năm Thăng Long - Hà Nội!... '

c) Hãy viết hàm ChuChay(s, dong) nhận đầu vào là xâu s gồm khơng q 79 kí tự và biến

nguyên dong, đưa ra xâu s có dạng chữ chạy ở dịng dong. Viết và chạy chương trình có sử dụng hàm này.

Bài tập và thực hành 7

1. Mục đích, u cầu

• Nâng cao kĩ năng viết, sử dụng hàm;

• Biết cách viết một chương trình có cấu trúc để giải một bài tốn trên máy tính.

2. Nội dung

a) Tìm hiểu việc xây dựng các hàm và thủ tục thực hiện tính độ dài các cạnh, chu vi, diện tích, kiểm tra các tính chất đều, cân, vng của tam giác được trình bày dưới đây.

Giả thiết tam giác được xác định bởi toạ độ của ba đỉnh. Ta xây dựng các hàm:

• Hàm nhận dữ liệu vào là biến mô tả tam giác R và đầu ra là độ dài của ba cạnh a, b, c:

DaiCanh(R)

• Hàm tính chu vi của tam giác R:

Chuvi(R)

• Hàm tính diện tích của tam giác R:

Dientich(R)

• Hàm nhận đầu vào là biến mô tả tam giác R và đầu ra là tính chất của tam giác (Deu hay Can hay Vuong):

Tinhchat (R)

• Hàm hiển thị toạ độ ba đỉnh tam giác lên màn hình:

Hienthi(R)

• Hàm tính khoảng cách giữa hai điểm P, Q:

Kh_cach (P, Q)

b) Tìm hiểu chương trình nhập vào toạ độ ba đỉnh một tam giác và sử dụng các hàm được xây dựng dưới đây để khảo sát các tính chất của tam giác.

1. import math 2. 3. def Kh_Cach(p, q): 4. return math.sqrt((p[0]-q[0])**2 + (p[1]-q[1])**2) 5. 6. def DaiCanh(r):

7. a = Kh_Cach(r[1], r[2]) 8. b = Kh_Cach(r[0], r[2]) 9. c = Kh_Cach(r[0], r[1]) 10. return a, b, c 11. 12. def ChuVi(r): 13. a, b, c = DaiCanh(r) 14. return a + b + c 15. 16. def DienTich(r): 17. a, b, c = DaiCanh(r) 18. p = (a + b + c) / 2 19. return math.sqrt(p*(p-a)*(p-b)*(p-c)) 20. 21. def HienThi(r):

22. print("Tọa độ 3 đỉnh của tam giác là:")

23. print("- Đỉnh A(%.3f,%.3f" % (r[0][0], r[0][1])) 24. print("- Đỉnh B(%.3f,%.3f" % (r[1][0], r[1][1])) 25. print("- Đỉnh C(%.3f,%.3f" % (r[2][0], r[2][1])) 26. 27. def TinhChat(r): 28. a, b, c = DaiCanh(r) 29. tl = '' 30. if a == b == c: 31. t += "đều" 32. if a == b or b == c or a == c: 33. tl += "cân " 34. if a**2 == b**2 + c**2 or \ 35. b**2 == a**2 + c**2 or \ 36. c**2 == a**2 + b**2: 37. tl += "vuông" 38. return tl 39.

40. print("Nhập tam giác")

41. x1, y1 = map(float, input("Nhập tọa độ đỉnh A: ").split()) 42. x2, y2 = map(float, input("Nhập tọa độ đỉnh B: ").split()) 43. x3, y3 = map(float, input("Nhập tọa độ đỉnh C: ").split()) 44. tg = ((x1, y1), (x2, y2), (x3, y3))

45. HienThi(tg)

46. print("Diện tích: %9.3f" % DienTich(tg))

47. print("Chu vi: %9.3f" % ChuVi(tg))

48. print("Tam giác có tính chất là tam giác "+TinhChat(tg))

c) Viết chương trình sử dụng các hàm và thủ tục xây dựng ở trên để giải bài tốn: Cho tệp dữ liệu TAMGIAC.DAT có cấu trúc như sau:

• Dịng đầu tiên chứa số N;

• N dịng tiếp theo, mỗi dịng chứa sáu số thực xA, yA, xB, yB, xC, yC là toạ độ ba đỉnh A(xA, yA),

B(xB, yB), C(xC, yC) của tam giác ABC.

Hãy nhập dữ liệu từ tệp đã cho. Trong số N tam giác đó, đưa ra tệp TAMGIAC.OUT ba dịng:

• Dịng đầu tiên là số lượng tam giác đều;

• Dịng thứ hai là số lượng tam giác cân (nhưng khơng là đều);

Một phần của tài liệu SGK tin học 11 using python3 (Trang 83 - 87)

Tải bản đầy đủ (PDF)

(87 trang)