หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ
ตัวสร้าง
ส่งข้อมูลไปยัง Generator
เป้าหมาย
เก็บขนและปั่นให้เป็นด้ายโดยการส่งข้อมูลเข้า generator ผ่านก้านหมุน
แกะบางตัวมีขนอุดหนุนเกินไป ควรตัดขนและเก็บขนของพวกมันไว้ จากนั้นคุณสามารถนำขนที่ได้ผ่านก้านหมุนเพื่อผลิตด้าย ในการดำเนินการนี้เราจำเป็นต้องใช้ generator เนื่องจากปริมาณด้ายและขนที่ผ่านกระบวนการอาจแตกต่างกันอย่างมาก
เริ่มต้นด้วยการนิยาม generator ที่สามารถปั่นด้ายได้ โดยตั้งชื่อว่า spin() ซึ่ง generator นี้จำเป็นต้องถูกตั้งค่าให้ใช้ข้อมูลภายนอกเพื่อทำงาน โดยมันจะอ่านข้อมูลจาก yield และนำไปเก็บไว้ในตัวแปร แล้วปรับเปลี่ยนเนื้อหาของมันโดยการเพิ่มความยาวในแต่ละรอบ สุดท้ายจึงผลิตผลลัพธ์ออกมา
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
เนื่องจากนี่คือ generator คำสั่ง while() ภายในสามารถถูกหยุดชั่วคราวและปรับเปลี่ยนเพื่อผลิตเอาท์พุตที่เราต้องการ ระดับของการควบคุมนี้คือหัวใจของสิ่งที่ generator คือและมีประโยชน์อย่างไรในการประมวลผลข้อมูล
เพื่อแทรกข้อมูลเข้าไปใน generator ให้กำหนดมันและใช้ฟังก์ชัน send() เพื่อป้อนข้อมูลใด ๆ ที่คุณต้องการ ตัวอย่างเช่น:
spindle = spin() # Create an instance of the generator next(spindle) # Run the generator a single step spindle.send(6) # Insert data into the generator # In this case you're sending it the number 6
เดินไปยังจุดที่มีแสง X ถูกทำเครื่องหมายด้วยพื้นพรมที่มีสี และเผชิญหน้ากับแกะ มีคอนสแตนท์ชนิด dictionary ชื่อ sheep ซึ่งเก็บค่าของขนที่คุณสามารถตัดได้จากแกะแต่ละตัว ใช้ฟังก์ชัน speak() พร้อมกับ dictionary และสีของพรมที่คุณยืนอยู่ เพื่อทำการตัดขนแกะและตรวจสอบจำนวนที่คุณเก็บได้ ตัวอย่างเช่น: player.speak(sheep["green"])
มีพรมสีทั้งหมดสี่ (4) สี ได้แก่ "green" , "red" , "blue" และ "orange" เมื่อคุณได้ตัดขนแกะแล้ว ให้เดินไปยังจุดที่มีเครื่องหมาย X สีเข้มในแต่ละพรมที่มีสีซึ่งมีการติดตั้งก้านหมุน ใช้ send() เพื่อส่งจำนวนปอนด์ของขนที่ถูกตัดจากแกะในแต่ละสีเข้าสู่ generator
ตัวอย่างเช่น ถ้าเมื่อทำการตัดขนแกะบนพรมสี "green" คุณตัดได้ 4 ปอนด์ของขน ให้ไปยังพรมสี "green" ที่ก้านหมุนและส่งข้อมูลนั้นเข้าไปใน generator ดังนี้:
next(spindle) spindle.send( 4)
ทำเช่นนี้สำหรับเครื่องหมาย X สีเข้มทั้งสี่ (4) บนพรมที่มีสีเพื่อให้ระดับนี้สมบูรณ์