Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Danh sách nâng cao
Ánh xạ, Lọc, Rút gọn
Mục tiêu
Hoàn thành việc trộn và sản xuất kem bằng cách sử dụng Maps, Filter và Reduce.
Một số hương vị kem có lượng chất lỏng thấp hoặc đã cạn nhưng chúng ta có đủ nguyên liệu để bù đắp và tạo ra nhiều kem hơn. Để làm việc này, bạn phải sử dụng Map, một công cụ mạnh mẽ cho phép bạn giảm thiểu lượng mã cần viết bằng cách rút gọn các vòng lặp và cấu trúc điều kiện. Các hàm Filter và Reduce bổ sung cho hàm Map và cung cấp sự linh hoạt cần thiết cho đoạn mã của bạn.
Đầu tiên, bạn cần nhập Reduce từ thư viện functools để có thể sử dụng hàm này bằng cách thêm đoạn mã sau vào đầu chương trình của bạn: from functools import reduce. Các hàm Map và Filter có sẵn trong Python và không cần phải nhập thêm.
Trước hết, bạn cần lấy một số nguyên liệu từ tủ đông "walk in freezer", đi tới dấu X vàng, đối diện cửa và mở nó bằng hàm open(). Lấy tất cả các lọ chứa "cream" trong tủ đông rồi đi tới dấu X sáng trên thảm màu xanh lá cây.
Có ba hằng số danh sách trong khu vực có tên là: vanilla, strawberry và chocolate. Mỗi hằng số có một sự kết hợp các nguyên liệu tạo nên hương vị kem. Tại dấu X màu xanh lá cây, hãy xác minh nội dung của hằng số danh sách strawberry. Đầu tiên, sử dụng hàm place() để đặt "cream" mà bạn đã lấy trước đó và sử dụng hàm speak() để xác minh nội dung của hằng số danh sách strawberry.
Sau khi xác minh, đã đến lúc sử dụng hàm Map với hằng số danh sách strawberry, nội dung của danh sách đều là số thập phân. Sử dụng hàm map(), bạn có thể làm tròn tất cả các phần tử trong một danh sách, thay thế việc lặp từng phần tử trong một vòng lặp để làm tròn chúng từng cái một. Để làm điều này, hãy tạo một danh sách có tên map1 và sử dụng hàm map() kết hợp với danh sách strawberry và hàm round(), như sau: map1 = list(map(round, strawberry)). Sau khi hoàn tất, sử dụng hàm speak() với map1 để xác minh kết quả.
Sau đó, chúng ta chuyển sang Filter, nó hoạt động tương tự như Map nhưng thay vào đó yêu cầu có một hàm được sử dụng kèm theo. Ở đầu trình soạn thảo, bạn sẽ có một hàm được cài sẵn có tên là main_ingredients được sử dụng để xác định xem một số có lớn hơn số 25 hay không.
def main_ingredients(value):
return value > 25
Thay vì lặp qua một vòng lặp, bạn có thể sử dụng hàm này kết hợp với hàm filter() để tạo ra một danh sách mới với các mục có giá trị trên 25, đó là những nguyên liệu chính. Tạo một danh sách mới có tên filter1 và áp dụng hàm filter() với main_ingredients và map1 để xác định tất cả các nguyên liệu chính trong danh sách Map bạn đã tạo, như sau: filter1 = list(filter(main_ingredients, value)). Sau khi hoàn tất, sử dụng hàm speak() với filter1 để xác minh kết quả.
Bây giờ chúng ta chuyển sang Reduce, nó được sử dụng tương tự như Filter, nhưng thay vì đó, bạn có thể sử dụng nó để sáp nhập hoặc rút gọn một danh sách thành một đơn vị duy nhất. Giống như Filter, nó sử dụng một hàm tùy chỉnh, lần này có tên là custom_sum để tự động cộng hai số với nhau.
def custom_sum(first, second):
return first + second
Tạo một biến có tên reduce1 và sử dụng hàm reduce() kết hợp với hàm custom_sum và filter1 để hợp nhất tất cả các mục thành một đơn vị duy nhất, như sau: reduce1 = reduce(custom_sum, filter1). Sau khi hoàn tất, sử dụng hàm speak() với reduce1 để xác minh kết quả.
Bây giờ bạn đã hoàn thành chu trình Map, Filter, Reduce, hãy lặp lại cùng một chu trình đó tại các dấu X sáng trên thảm đỏ và thảm xanh. Trên thảm đỏ, sử dụng hằng số danh sách vanilla, và tạo map2, filter2 và reduce2. Trên thảm xanh, sử dụng hằng số danh sách chocolate, và tạo map3, filter3 và reduce3.
Đi tới dấu X sáng cuối cùng nằm trên thảm màu tím, cộng reduce1, reduce2 và reduce3 lại với nhau để tổng hợp các nguyên liệu chính của kem vanilla, strawberry và chocolate. Tạo một biến có tên neapolitan và cộng tất cả các kết quả của Reduce, như sau: neapolitan = reduce1+reduce2+reduce3. Sử dụng hàm speak() với sự kết hợp này để xác minh nó và sử dụng hàm place() với nó để tạo kem Neapolitan và hoàn thành cấp độ.