Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ
Máy phát định danh
Gửi dữ liệu tới một Generator
Mục tiêu
Thu thập và kéo sợi len bằng cách gửi dữ liệu vào một generator.
Một số con cừu đã trở nên quá rậm rạp, sẽ tốt nhất nếu xén lông chúng và thu thập len. Sau đó bạn có thể đặt len qua một con suốt để sản xuất len sợi. Để đạt được điều này, chúng ta cần sử dụng một generator vì lượng len sợi và len được xử lý có thể thay đổi rất lớn.
Đầu tiên, định nghĩa một generator có khả năng kéo sợi len, đặt tên là spin(), generator này cần được thiết lập để sử dụng đầu vào bên ngoài để hoạt động. Nó đọc dữ liệu từ yield và đặt nó vào một biến, sau đó thay đổi nội dung của biến này bằng cách tăng chiều dài của nó với mỗi vòng lặp, cuối cùng tạo ra một kết quả.
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
Do đây là một generator, câu lệnh while() bên trong có thể được dừng và sửa đổi để tạo ra kết quả chúng ta muốn, mức độ kiểm soát này là cốt lõi của một generator và cách mà nó có thể hữu ích khi xử lý dữ liệu. Để đưa dữ liệu vào generator, định nghĩa nó và sử dụng hàm send() để đưa vào bất kỳ dữ liệu nào bạn muốn, ví dụ:
spindle = spin() # Tạo một instance của generator next(spindle) # Chạy generator một bước spindle.send(6) # Đưa dữ liệu vào generator # Trong trường hợp này bạn đang gửi số 6
Đi đến điểm X được đánh dấu bằng thảm màu và đối diện những con cừu. Có một hằng số dictionary tên là sheep chứa giá trị bao nhiêu lông bạn có thể xén trên mỗi con cừu. Sử dụng hàm speak() với dictionary và màu của thảm mà bạn đang đứng, để xén lông cừu và kiểm tra số lượng bạn đã thu thập. Ví dụ: player.speak(sheep["green"]).
Có tổng cộng bốn (4) thảm màu: "green" , "red" , "blue" và "orange" . Sau khi bạn đã xén lông cừu, đi đến điểm X tối ở mỗi thảm màu nơi có các con suốt. Sử dụng hàm send() để nhập số pound lông xén từ mỗi con cừu theo màu tương ứng vào generator.
Ví dụ, nếu khi bạn xén lông cừu ở thảm "green", bạn cắt được 4 pound lông, đến thảm "green" nơi có các con suốt và gửi dữ liệu đó vào generator, như sau:
next(spindle) spindle.send(4)
Làm điều này cho tất cả bốn (4) điểm X tối trên các thảm màu để hoàn thành cấp độ.