
هر پیامی که در لیگ شبیهسازی خانه هوشمند پایین ویرایشگر قرمز میشود، اینجا هست: دقیقاً همان جملهای که میبینید، معنیاش به زبان ساده، و کدِ درست کنار کدِ غلط. خطا گرفتن یعنی برنامه اجرا نشده — نه اینکه ربات بد بازی کرده. پس اول اینجا را نگاه کنید.
Line 1: expected ':' at end of lineدونقطهی آخر خط را جا انداختهاید. در پایتون هر if، elif،
else، while و def با دونقطه تمام میشود.
if front < 40
turnleft(1)if front < 40:
turnleft(1)همین خطا را میگیرید اگر از زبانی مثل C یا جاوااسکریپت عادت به
{ } داشته باشید. پایتون آکولاد ندارد.
Line 1: expected an indented blockبعد از دونقطه، خط بعدی باید تورفتگی داشته باشد. تورفتگی در پایتون تزئینی نیست؛ همان چیزی است که میگوید این خط «داخل» شرط است.
if front < 40: turnleft(1)
if front < 40:
turnleft(1)چهار فاصله استاندارد است. فاصله و تب را قاطی نکنید — چشم فرقشان را نمیبیند ولی برنامه میبیند.
Line 2: unexpected indentationخطی تورفتگی دارد که نباید داشته باشد — چیزی بالایش نیست که این خط داخلش باشد.
forward(1)
turnleft(1)forward(1) turnleft(1)
Line 1: unexpected character '='شایعترین خطای همه. = یعنی «این مقدار را بگذار»، ولی
== یعنی «آیا برابر است؟». در شرط همیشه دوتایی است.
if color = green:
if color == green:
همین پیام را با '&' هم میگیرید: در پایتون بهجای &&
مینویسید and و بهجای || مینویسید or.
there is no sensor or variable called 'frontt' — did you mean 'front' or 'frontleft' or 'frontright'?اسم سنسور را اشتباه تایپ کردهاید. خوشبختانه برنامه خودش نزدیکترین اسمها را پیشنهاد میدهد — کافی است پیام را تا آخر بخوانید.
گاهی هم اسم درست است ولی ردهی شما آن سنسور را ندارد. مثلاً
heading در فرستاستپ وجود ندارد و همین پیام را میگیرید. کدام رده چه
دارد را در طرح درس سنسورها ببینید.
if frontt < 40:
if front < 40:
unknown function 'forwardd()'اسم دستور اشتباه است. دستورهای حرکت دقیقاً اینها هستند و بس:
forward(s) backward(s) turnleft(s) turnright(s) stop(s)
عددی که میدهید ثانیهی واقعی است، نه تعداد قدم.
while loop ran too longیک while نوشتهاید که هیچوقت تمام نمیشود. برنامهی شما باید در هر
قدم سریع تمام شود و تصمیمش را بدهد — شبیهساز خودش قدم بعدی را صدا میزند.
while True:
forward(1)forward(1) # همین کافی استاگر میخواهید کاری چند قدم طول بکشد، از timer استفاده کنید نه
while.
code ran too long (possible infinite loop)کل برنامهی یک قدم بیش از حد طول کشیده. معمولاً یعنی حلقههای تودرتو یا محاسبهی خیلی سنگین. سادهاش کنید؛ یک قدم باید در کسری از ثانیه تصمیم بگیرد.
functions calling each other too deepتابعی خودش را صدا زده و ته نمیکشد. برای این مسابقه تقریباً هیچوقت به بازگشت (recursion) نیاز ندارید.
اینها برنامه را متوقف نمیکنند. ربات اجرا میشود ولی کاری که میخواستید نمیکند، و هیچ چیز قرمز نمیشود. بیشترِ وقتی که تیمها تلف میکنند، اینجاست.
واکنش نوشتهاید ولی حافظه نگذاشتهاید. ربات یک قدم عقب میرود، قدم بعد دوباره همان مانع را میبیند، دوباره یک قدم عقب — و تا آخر مسابقه میلرزد.
if front < 40:
backward(0.2)if front < 40:
timer = 8 # هشت قدم عقب
if timer > 0:
timer = timer - 1
wheelleft = -25
wheelright = -8 # قوسی، تا بچرخد همبیشتر بخوانید: حافظهی بین قدمها
سرعت چرخها بین -25 و 25 محدود است. اگر 400
بنویسید خطا نمیگیرید — شبیهساز بیصدا آن را به ۲۵ میرساند. همهی رباتها سرعت
یکسان دارند؛ برنده کسی است که مسیر بهتری بچیند.
دو چرخ را خلاف هم گذاشتهاید و هیچوقت همجهت نمیشوند. برای رفتن، هر دو باید همعلامت باشند.
wheelleft = -25 wheelright = 25
wheelleft = 25 wheelright = 25
احتمالاً دارید روی کاشیهایی میروید که قبلاً مال خودتان است. امتیاز فقط برای کاشی تازه است. در گزارش پایان بازی، نقشهی حرارتی لکههای پررنگ را نشان میدهد — آنها جاهاییاند که چند بار رفتهاید و امتیاز تازهای نگرفتهاید.
با سنسور رنگ حل میشود: دنبال
white بگرد
ربات ۱۵ ثانیه در یک دایرهی کوچک مانده بود، پس گیرکرده حساب شد. تقریباً همیشه یعنی
واکنش به مانع کافی نبوده — یا timer کوتاه است، یا فقط عقب میروید
بدون اینکه بچرخید.
در گزارش پایان بازی، «زمان گیر کرده» را نگاه کنید. اگر بیشتر از چند ثانیه است، همینجا وقت از دست دادهاید.
یک: کد پایه را برگردانید. در ویرایشگر دکمهی بازنشانی، کد نمونهی سالم را برمیگرداند. از آنجا یک تغییر کوچک بدهید و امتحان کنید.
دو: از هلپر استفاده کنید. در صفحههای کمکی چند شرط ساده انتخاب میکنید و برنامهی درست خودش نوشته میشود — بعد میتوانید همان را در ویرایشگر باز کنید و ادامه بدهید.
سه: گزارش پایان بازی را بخوانید. زمان گیرکردن، برخورد با دیوار، مسافت و نقشهی حرارتی همگی آنجا هستند و میگویند وقت کجا تلف شده.