با این که برنامهای که نوشتید میبایست برای محیطهای نشانههای ۱ و نشانههای ۲ کار کند؛ اگر با نشانههای ۳ امتحانش کنید به مشکل میخورید.
امتحان کن!
برنامهٔتان را با هر سه تا محیط امتحان کنید.
توجه
:
()at_goal
ریبرگ علاوه بر این که میتواند بفهمد آیا همان جایی که ایستاده، نشانه هست یا نه؛ میتواند تشخیص بدهد که آیا به آن مربّع رنگی -که قبلاً به عنوان خانهٔ ریبرگ تعریفش کردیم- رسیده یا نه.
در خیلی از محیطها، منطقیتر است که این محل را به جای خانه به عنوان مقصد در نظر بگیریم. تابعی که ریبرگ برای تشخیص این مورد استفاده میکند ()move
است. این پایین طرح کلّی راه حلی است که میبایست در هر چهار محیطی که بالاتر گفتیم کار کند.
def move_until_done():
if at_goal():
# یک سری کار
move()
if object_here():
# یه کار
# یه کار دیگه
# بازم یه کار دیگه
repeat 42:
move_until_done()
توجه
اگر اطّلاعات محیط مربوط به نشانههای ۳ را نگاه کنید؛
میبینید که راه حل پیشنهادی، کلیدواژهٔ پایتونی while
را به کار برده که هنوز ندیدهایم.
ساختار کد بالا را در ویرایشگر کد پایتون کامل کنید و آن را برای هر سه تا محیطی که بالاتر گفتیم امتحان کنید، حواستان باشد در آنها هم کار کند.
حتماً تمرین بالا را کامل کردهاید دیگر؛ نه؟! ... خیلی خوب.
این کار رو بکن!
یکی از محیطهای خانه ۱ یا خانه ۲ را انتخاب کنید. آیا همان برنامهای که برای محیطهای نشانهها استفاده کردید؛ در آنها هم کار میکند؟ بعد از تشخیص این موضوع با اجرای برنامه؛ سعی کنید حدستان را راستیآزمایی کنید.
نگاهی به محیطهای با مانع ۱ و با مانع ۲ بیاندازید. با چشم پوشی از هدف نهایی، برنامهای که ریبرگ میتواند با آن در مسابقه از روی این مانعها بپرد، چند بار اجرای به ترتیب این دو تا دستور است:
()move
()jump_over_hurdle
البتّه با یک تعریف مناسب برای تابع ()jump_over_hurdle
.
اگر میتوانستید یک معیار (گزارهٔ منطقی``if``) یک جا توی برنامه بگذارید که ببینید آیا ریبرگ به مقصد رسیده یا نه، میتوانستید یک تابع جدیدبا نام ()move_and_jump_until_done
(تا موقع تمام شدن برو و بپر) درست کنید.
در این صورت برنامهای که برای هر دو تا محیط با مانع ۱ و با مانع ۲ مناسب بود و کار میکرد مثل این میشد:
repeat 42:
move_and_jump_until_done()
انجامش بده!
چنین برنامهای را بنویسید و امتحان کنید تا خاطر جمع شوید که کار میکند.
راهنمایی
برنامهٔتان میتواند این طور باشد:
from my_lib import turn_right
def move_and_jump_over_hurdle():
# چند تا دستور
repeat 42:
move_and_jump_over_hurdle()
if at_goal():
done()
آیا این برنامه بدون تغییر برای محیط با مانع ۳ کار میکند؟