Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Các Hàm Nâng Cao
Hàm với đối số biến
Mục tiêu
Thu thập tất cả các vật tiêu hao bên trong kho và đóng gói chúng vào các hộp lưu trữ sử dụng các hàm có đối số biến thể.
Có một số loại thực phẩm được đặt trong kho cần được đóng gói để vận chuyển đi bán. Để thực hiện việc này một cách hiệu quả, bạn có thể tạo các hàm tùy chỉnh với số lượng đối số thay đổi. Đây là những hàm không có số lượng đối số cố định và cho phép bạn đặt bao nhiêu đối số tùy ý cần thiết để thực hiện các hành động của hàm.
Có hai (2) cách để thêm số lượng đối số biến cho một hàm, tùy thuộc vào mục đích của bạn. Phương pháp đầu tiên là tạo một danh sách đối số, thay vì đặt nhiều tên đối số, hãy đặt một dấu hoa thị trước một đối số đơn. Điều này sẽ tự động tạo ra một danh sách.
def custom_function(message,*arguments):
player.speak(message)
return(arguments)
value = custom_function("lalala","one","two","three")
# The message "lalala" is printed on screen
# Value now returns the list ("one","two","three")
Phương pháp thứ hai là đặt các đối số bên trong một từ điển thay vì danh sách, việc này được thực hiện tương tự như phương pháp trước nhưng thay vì đặt một dấu hoa thị, bạn đặt hai dấu hoa thị. Điều này sẽ tự động tạo ra một từ điển thay vì danh sách.
def custom_function(message,**arguments):
player.speak(message)
return(arguments)
value = custom_function("lalala", one = 1, two = 2, three = 3)
# The message "lalala" is printed on screen
# Value now returns the dictionary:
# {'one': 1, 'three': 3, 'two': 2}
Để đóng gói tất cả các món hàng cho việc vận chuyển, hãy tạo hai bộ hàm tùy chỉnh, một cho đóng gói các mục đơn lẻ và một cho đóng gói nhiều mục cùng nhau. Sử dụng đối số biến để đóng gói các mục khác nhau lại với nhau mà không cần tạo quá nhiều hàm.
def pack_singles(name,*items):
length = len(items)
player.speak("There are %d types of %s, those being:"
% (length, name) )
player.speak(items)
player.place(items)
def pack_multi(name,**items):
length = len(items)
player.speak("There are %d types of %s, those being:"
% (length, name) )
player.speak(items)
player.place(items)
Có bốn (4) loại vật khác nhau trên sân: "jars" , "eggs" , "berries" và "fruit". Thu thập tất cả các mục trong kho và đi tới các dấu X trên đường vận chuyển. Hãy đi đến các dấu X tối màu và sử dụng các hàm pack_singles để đóng gói "jars" và "eggs".
Đối với "jars" có bốn (4) loại bạn thu thập và được nhập vào dưới dạng đối số, đó là "white", "purple", "red" và "brown". Những mục này sẽ được lưu trữ trong hộp do thảm xanh. Mã được viết như sau: pack_singles("jars", "white", "purple", "red", "brown")
Đối với "eggs" có ba (3) loại bạn thu thập và được nhập vào dưới dạng đối số, đó là "white", "green", và "blue". Những mục này sẽ được lưu trữ trong hộp do thảm cam. Định dạng tương tự được sử dụng như trong cấu hình trước.
Sau đó, hãy đi tới các dấu X sáng màu và sử dụng hàm pack_multi để đóng gói "berries" và "fruit". Đối với "berries" có ba (3) loại bạn thu thập và được nhập vào dưới dạng đối số, đó là "red", "blue", và "purple". Những mục này sẽ được lưu trữ trong hộp do thảm xanh dương. Bạn cần thêm số lượng bạn thu thập của từng loại, như sau: pack_multi("berries", red = 3 , blue = 2 , purple = 4 )
Đối với "fruit" có bốn (4) loại bạn thu thập và được nhập vào dưới dạng đối số, đó là "apple", "pear", "orange", và "peach". Những mục này sẽ được lưu trữ trong hộp do thảm đỏ. Sử dụng cùng định dạng như mục trước, đảm bảo tất cả các mục được thu thập và lưu trữ để hoàn thành cấp độ.