Anonymous function (hàm ẩ n danh)

Một phần của tài liệu Bộ bài tập Python exercises Phần cơ bản (Trang 27 - 32)

9/. Xây dựng các hàm lambda cho những trường hợp sau:

a) Hàm nhận 1 đối số là số nguyên n và trả về trị tuyệt đối của n.

b) Hàm nhận 1 đối số là số nguyên n và trả về giá trị của n+15.

c) Hàm nhận 2 đối số là số nguyên (x, y), trả về tích của x và y.

d) Hàm nhận 2 đối số là số nguyên (x, y), trả về tổng các số từ x đến y.

e) Hàm nhận 1 đối số là số nguyên n nằm trong khoảng từ0 đến 9, hàm thực hiện in ra chữ số tương ứng. ví dụ: với n=3, hàm sẽ in ra chữ “ba”; hoặc với n=8, hàm sẽ in ra chữ “tám”.

f) Hàm nhận 1 đối số là số thực (float) là điểm trung bình (dtb).Hàm trả về xếp loại tương ứng theo quy định như sau:

• dtb >= 9 : xuất sắc

• 8 <= dtb < 9 : giỏi

• 6.5 <= dtb < 8 : khá

• 5 <= dtb < 6.5 : trung bình

• dtb <5 : yếu

g) Hàm nhận 1 đối số là số thực r là bán kính của hình tròn. Cho biết diện tích, chu vi hình tròn.

h) Hàm nhận 2 đối số là số thực d, r là chiều dài và chiều rộng của hình chữ nhật. Cho biết chu vi và diện tích hình chữ nhật.

Gợi ý thực hiện câu g và h: hàm lambda trả về nhiều giá trị.

i) Hàm nhận 1 đối số là số nguyên n. Cho biết n có là bội số của 13 hoặc 19 hay không?

j) Hàm nhận 3 tham số là số nguyên (a, b, c). Cho biết a, b, c có là 3 cạnh hợp lệ của 1 tam giác hay không?

Yêu cu thc hin ca 2 câu i và j:

• Cách 1: hàm lambda chỉ trả về kết quả True hoặc False.

• Cách 2: sử dụng if…else để in ra thông báo kết quả ngay trong thân hàm lambda.

Ví dụ in ra kết quả: “38 là bội số của 13 hoặc 19” hay “8 không là bội số của 13 hoặc 19”.

10/. Yêu cầu của bài tập: Sử dụng kết hợp giữa lệnh while và hàm ẩn danh để cho người dùng nhập số >0. Nếu người dùng nhập sai, vòng lặp while sẽ cho gọi lại hàm ẩn danh để người dùng nhập lại cho đến khi nhập đúng.

Viết hàm ẩn danh trả về sốdo người dùng nhập vào. Hàm nhận tham số là x với giá trị là một trong hai giá trị 0 và 1. Nếu x=0 xem như người dùng nhập lần đầu, câu hiển thị ra màn hình lúc này là “Nhập số nguyên dương”; ngược lại nếu x==1 nghĩa là người dùng đã có ít nhất 1 lần nhập sai (số nhập <=0), câu hiển thị ra màn hình lúc này là “Chỉ nhận số >0. Yêu cầu nhập lại\nNhập số nguyên dương:”.

Sau khi người dùng nhập đúng, chương trình in ra n số ngẫu nhiên trong khoảng từ - 100 đến +200.

Ví dụ:

#đầu chương trình luôn hiển thị câu nhắc 'Nhập số nguyên dương' Nhập số nguyên dương (>0): >? -5

#khi người dùng nhập sai, sẽ hiện báo lỗi và yêu cầu nhập lại Chỉ nhận số >0. Yêu cầu nhập lại.

Nhập số nguyên dương: >? 0

#nếu vẫn nhập sai, sẽ hiện báo lỗi như lần trước

Chỉ nhận số >0. Yêu cầu nhập lại.

Nhập số nguyên dương: >? 5

#sau khi nhập đúng, chương trình in ra n số ngẫu nhiên 195 113 196 119 140

11/. Cho một hàm đã được định nghĩa như sau:

def lambda_in_function(n):

return lambda x : x * n

Lần lượt gọi thực hiện nhân giá trị n=15 với x gồm các giá trị từ2 đến 10

12/. Xây dựng hàm ẩn danh nhận 2 tham số là a và b, hàm thực hiện giải phương trình bậc 1: ax + b = 0.

13/. Xây dựng hàm ẩn danh nhận 6 số thực a, b, c, d, e, f. Hàm thực hiện giải hệ phương trình sau:

 

 + =

= + by c ax ey f dx

 Nhắc lại: tính

D= a b

= ae - bd ; Dx= c b = ce – bf ; Dy= a c

= af- dc

d e f e d f

Nếu D!=0  x=Dx/D; y=Dy/D

Ngược lại nếu Dx!=0 hoặc Dy !=0  PT vô nghiệm Ngược lại,  PT vô định

14/. Viết hàm lambda để tính tổng/tích các dãy số sau, vói n và x (nếu có) là tham số được truyền vào cho hàm:

a.- S = 1 + 2 + 3 + . . . + n b.-

S= 1

+ 1

+ 1

+ . . . + 1

2 3 4 n+1

c.- P = 1 x 3 x 5 x . . . x (2n-1)

Gợi ý: sử dụng hàm math.prod trong module math để tính tích các thành phần.

d.-

S= 1

+ 3

+ 5

+ . . . + 2n+1

2 4 6 2n+2

e.- S = 1 - 2 1

1 + +

3 2 1

1 +

+ - …. + (-1)n+1

+n + + +2 3 ...

1

1

f.-

S = 12 + 22 + 32 + . . . + n2 1*2 + 2*3 + 3*4 + . . . + n(n+1) g.- S = -x2 + x4 - ….+ (-1)nx2n

h.-

S= x + x2

+ x3

+ . . . + xn

1+2 1+2+3 1+2+3+…+n

15/. Viết hàm nhận tham số là 1 số nguyên dương (n). Sử dụng cú pháp comprehension để tính và trả về:

a.- Tổng bình phương của các số nguyên dương nhỏ hơn n.

Ví dụn=6=> (1*1)+(2*2)+(3*3)+(4*4)+(5*5) = 55

#không cộng 6*6 vì 6 không nhỏ hơn n.

b.- Thực hiện tương tự câu a nhưng chỉ tính cho các số lẻ nhỏ hơn n.

c.- Tổng bình phương của các số nguyên dương từ 1 đến k sao cho k*k<=n.

Ví dụn=17=> (1*1)+(2*2)+(3*3)+(4*4) = 30

#không cộng 5*5 vì 5*5>n=17 16/. Xây dựng hàm ẩn danh cho các loại số sau đây với kết quả trả về của các hàm là kiểu boolean

(True/False). Các hàm lambda cần xây dựng sẽ không gọi các User Defined Functions. Lần lượt sử dụng các hàm này để in các số trong khoảng từ1 đến 1 triệu, số nào thỏa điều kiện thì in ra:

a) Số thân thiện: Hàm nhận 1 đối số là số nguyên n. Cho biết n có là số thân thiện hay không? (kết quả trả về True/False).

Nhắc lại: Số thân thiện là những số và sốđảo ngược của nó có ước chung lớn nhất là 1. Ví dụ như số 23, và 32.

Gợi ý: import module math và sử dụng hàm math.gcd.

b) S chính phương (square number hay perfect square): là số có căn bậc hai là một số nguyên. Ví dụ 9 là sốchính phương vì căn bậc hai của 9 là 3.

c) Sđồng nht: Giả sửcó định nghĩa về số đồng nhất như sau: sốk được gọi là sốđồng nhất khi k>0 và các ký số có trong k đều giống nhau, ví dụ: 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66,77, 88, 99, 111, 222, 7777, ...

 Yêu cầu thực hiện:

Cách 1: sử dụng hàm all đểxác định sốđồng nhất.

Cách 2: sử dụng hàm any để xác định số đồng nhất.

d) SoHoanThien: (Perfect number) là số (n) có tổng các ước số không kể n bằng chính n.

Ví dụ: 6 là số hoàn thiện vì 1+2+3=6; hay số 28 vì 1+2+4+7+14=28, ... Lưu ý: các số hoàn thiện nhỏhơn 10 tỷ chỉ gồm các số: 6, 28, 496, 8.128, 33.550.336, 8.589.869. 056.

e) S phong phú: Là số (n) có tổng các ước số không kể n lớn hơn n.

- Ví dụ, 12 là một số phong phú vì có tổng các ước số (không kể 12) là:

1 + 2 + 3 + 4 + 6 = 16 > 12 - Các số phong phú có giá trị nhỏ hơn 100 gồm: 12, 18, 20, 24, 30, 36, 40,

42, 48, 54, 56, 60, 66, 70, 72, 78, 80, 84, 88, 90, 96, 100.

f) Stăng dần: là số mà các số mà ký sốtrong đó tăng dần từ trái sang phải (ví dụ: 0, 1, 2, 3, …, 11 12, …19, 22, 23, 24, …, 29, 33, 34, 35, … )

g) SoArmstrong: là số có đặc điểm sau: số đó gồm n ký số, tổng các lũy thừa bậc n của các ký số bằng chính số đó. Ví dụ 153 là một số có 3 ký số, và 13 + 53 + 33 = 1 + 125 + 27 = 153. Các số Armstrong trong khoảng từ1 đến 1 triệu gốm: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834.

h) Số nguyên tố: Hàm nhận tham số là số nguyên n. Xét xem n có phải là số nguyên tố hay không? (kết quả trả về là True hoặc False)

 Yêu cầu thực hiện:

Cách 1: đếm các ước số dương của n, nếu n chỉ có 2 ước số dương thì n là số nguyên tố. Ví dụ: n=7 là số nguyên tố vì chỉ có 2 ước số dương là 17.

Cách 2: một đề xuất khác là tính tổng (T) các ước sốdương của n, nếu T = n+1 thì n là số nguyên tố.

Ví dụ: n=7 là số nguyên tố vì 7 chỉcó 2 ước sốdương là 17 và tổng của chúng là T = 1+7 = n+1.

Cách 3: nếu n<=1 hoặc n chia chẵn cho bất kỳ số nào trong khoảng từ 2 đến căn bậc hai của n thì n không là số nguyên tố, ngược lại n là số nguyên tố.

Ví dụ: n=25 không là số nguyên tố vì mặc dù 25 không chia chẵn cho 2, 3, 4 nhưng 25 chia chẵn cho căn bậc hai của 25 (là 5) hay n=20 cũng không là số nguyên tố vì 20 chia chẵn cho số2.

 Gợi ý: sử dụng hàm any.

Cách 4: xây dựng hàm F được định nghĩa bằng từ khóa def, hàm nhận tham số là 1 số nguyên k và trả về True hoặc False cho biết k có phải là số nguyên tố hay không?

Trong hàm F, sử dụng phối hợp hàm filter và hàm lambda để xét xem k có là số nguyên tố hay không. Kết quả xét này cũng trả về True/False.

i) S Palindrome (hoặc Palindromic)

• (Theo Wikipedia) Là một số vẫn giữ nguyên giá trị khi các chữ số của nó được đảo ngược. Hay nói cách khác là số đối xứng.

• 30 số thập phân palindrome đầu tiên là: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101 , 111, 121, 131, 141, 151, 161, 171, 181, 191, 202, ...

j) S nguyên t Palindrome

• (Theo Wikipedia) Là số nguyên tố viết xuôi hay viết ngược vẫn chỉ cho ra một số.

• Các số nguyên tố Palindrome dưới 20000 gồm: 2, 3, 5, 7, 11, 101, 131, 151, 181, 191, 313, 353, 373, 383, 727, 757, 787, 797, 919, 929, 10301, 10501, 10601, 11311, 11411, 12421, 12721, 12821, 13331, 13831, 13931, 14341, 14741, 15451, 15551, 16061, 16361, 16561, 16661, 17471, 17971, 18181, 18481, 19391, 19891, 19991.

k) S lc phát

 Giả sửngười ta cho rằng 1 số gọi là số Lộc Phát nếu chỉ chứa toàn các số 6 hoặc số 8.

Ví dụ: n=686  686 là số Lộc Phát.

n=68626  68626 KHÔNG phải số Lộc Phát.

 Yêu cầu thực hiện:

Cách 1: sử dụng hàm all để xác định số lộc phát.

Cách 2: đếm số lượng số 6 (X) và số lượng số 8 (Y) có trong số n. Nếu X+Y= chiều dài của số n thì n là số lộc phát.

l) S lc phát Palindrome

• Số n được gọi là số lộc phát khi số lộc phát đó viết xuôi hay viết ngược vẫn chỉ cho ra một số, nói cách khác n vửa là số lộc phát, vừa là số đối xứng.

2.2.2. Xây dng hàm n danh với đối tượng string

17/. Viết chương trình cho nhập 1 chuỗi S, lần lượt sử dụng lambda để xét các trường hợp sau:

a. Chuỗi S có bắt đầu bằng ký tự P (in hoa) hay không?

b. Chuỗi S có bắt đầu bằng ký tự P (in hoa) hoặc p (in thường) hay không?

Yêu cầu: thực hiện câu a và b bằng cả 3 cách sau:

• Cách 1: sử dụng S[0] in ‘P’.

• Cách 2: sử dụng S.startswith(‘P’).Phương thức này sẽ trả về kết quả là True hoặc False.

• Cách 3: sử dụng S.find(‘P’). Phương thức này sẽ trả về vị trí tìm thấy (tính từ 0).

c. Chuỗi S có bắt đầu bằng 1 nguyên âm hay không?

Yêu cầu: thực hiện câu c bằng cả 2 cách sau:

• Cách 1: chỉ sử dụng lệnh if.

• Cách 2: sử dụng lệnh if để gọi 1 hàm đã có.

d. Chuỗi S có phải là chuỗi palindrome hay không? Một chuỗi được gọi là palindrome khi các ký tự trong chuỗi đối xứng nhau. Một số từ là palindrome: abba, madam, rotor, …

Ví dụ: chuỗi sau là chuỗi palindrome: ABLE WAS I ERE I SAW ELBA

18/. Viết chương trình cho người dùng nhập 1 chuỗi (S) bao gồm cả ký tự và ký số. Thực hiện tính tổng tất cả các ký số có trong S.

Ví dụ: S='Python 3.7'  10

2.2.3. Xây dng hàm n danh gi hàm do người dùng định nghĩa (User define function)

19/. Hàm nhận 3 tham số là số nguyên (a, b, c). Cho biết a, b, c có là 3 cạnh hợp lệ của 1 tam giác hay không? Nếu là 3 cạnh hợp lệ của tam giác, cho biết đó là tam giác gì? (thường, cân, đều, vuông, ...). Tất cả các hàm cần xây dựng đều là hàm ẩn danh

 Gợi ý cách thực hiện:

Bước 1: viết các hàm ẩn danh theo gợi ý như sau:

TamGiacHopLe = lambda a,b,c : '''trả về True nếu hợp lệ,

ngược lại trả về false''' LaTamGiacDeu = lambda a, b, c : '''trả về True nếu là tam giac deu,

ngược lại trả về false''' LaTamGiacVuong = lambda a, b, c: '''trả về True nếu là tam giac

vuong, ngược lại trả về false LaTamGiacCan = lambda a, b, c: '''trả về True nếu là tam giac can,

ngược lại trả về false''' XacDinhLoaiTamGiac = lambda a,b,c: '''gọi các hàm ở trên để in ra

loại của tam giác Bước 2: nội dung chương trình chính:

#cho nhập 3 cạnh a,b,c

#gọi hàm XacDinhLoaiTamGiac(a,b,c) 2.2.4. Xây dng hàm n danh với đối tượng datetime

20/. Viết chương trình sử dụng lambda để lần lượt tách ngày, tháng, năm và giờ phút giây của thời điểm hiện tại

Ví dụ: thời điểm hiện tại là 2019-06-08 10:13:35.232478

Sẽ in ra màn hình: Năm hiện tại: 2019 Tháng hiện tại: 6 Ngày hiện tại: 8

Thời gian hiện tại: 10:13:35.232478

2.2.5. S dng các module khác để xây dng hàm n danh

21/. Viết chương trình sử dụng lambda với đối số là n, với n là số lượng số đầu tiên trong dãy Fibonacci. Hàm trả vế 1 list chứa n số trong dãy Fibonacci

Gợi ý: sử dụng hàm reduce trong module functools

Một phần của tài liệu Bộ bài tập Python exercises Phần cơ bản (Trang 27 - 32)

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

(76 trang)