পাঠ ২: প্রকল্পটি তৈরি এবং পরীক্ষা করা
প্রকল্পটি নির্মাণ অব্যাহত রাখা
-
এখন if elseস্টেটমেন্টের শর্ত সেট করতে হবে। দুর্গ সনাক্ত করার জন্য দূরত্ব সেন্সর ব্যবহার করতে, found_objectকমান্ড ব্যবহার করা যেতে পারে। শর্তে found_objectকমান্ড যোগ করুন। আপনার প্রকল্পটি এখন এইরকম দেখা উচিত:
def main(): # দূরত্ব সেন্সর কি দুর্গ সনাক্ত করে? যদি front_distance.found_object(): # একটি দূরত্ব সেন্সর দ্বারা ক্র্যাশ দুর্গ সনাক্ত করা হয় পাস অন্যথায়: # দূরত্ব সেন্সর ব্যবহার করে একটি দুর্গ খুঁজে পেতে ঘুরুন পাস -
যদি দূরত্ব সেন্সর একটি বস্তু খুঁজে পায়, VR রোবটটি দুর্গের উপর ধাক্কা দিতে এগিয়ে যেতে হবে। if else স্টেটমেন্টের 'if' শাখায় একটি ড্রাইভকমান্ড যোগ করুন এবং VR রোবটকে এগিয়ে নিয়ে যাওয়ার জন্য প্যারামিটারটি সেট করুন। (এই কমান্ডটি 'পাস 'প্রতিস্থাপন করা উচিত)।
def main(): # দূরত্ব সেন্সর কি দুর্গ সনাক্ত করে? যদি front_distance.found_object(): # একটি দূরত্ব সেন্সর দ্বারা ক্র্যাশ দুর্গ সনাক্ত করা হয় drivetrain.drive(FORWARD) অন্যথায়: # দূরত্ব সেন্সর পাস ব্যবহার করে একটি দুর্গ খুঁজে পেতে ঘুরুন -
যখন found_object কমান্ডটি False রিপোর্ট করবে, তখন 'else' শাখাটি চালু হবে, তাই VR রোবটকে খেলার মাঠে একটি দুর্গ খুঁজে পেতে ঘুরতে হবে। 'অন্য' শাখার ভিতরে একটি turn কমান্ড যোগ করুন এবং VR রোবটটিকে ডানদিকে ঘুরানোর জন্য প্যারামিটারগুলি সেট করুন।
def main(): # দূরত্ব সেন্সর কি দুর্গ সনাক্ত করে? যদি front_distance.found_object(): # একটি দূরত্ব সেন্সর দ্বারা ক্র্যাশ দুর্গ সনাক্ত করা হয় drivetrain.drive(FORWARD) অন্যথায়: # দূরত্ব সেন্সর ব্যবহার করে একটি দুর্গ খুঁজে পেতে ঘুরুন drivetrain.turn(RIGHT)
আপনার তথ্যের জন্য
if elseস্টেটমেন্টের 'else' শাখাটি শুধুমাত্র একটি প্রকল্পেif elseস্টেটমেন্টের অংশ হিসেবে কাজ করে। যদিওস্টেটমেন্ট একা থাকলেথাকতে পারে, VEXcode VR Python-এ 'অন্য' স্টেটমেন্ট নেই। 'যদি' শাখার শর্ত পূরণ না হলে 'অন্য' শাখাটি পরিচালিত হয়। একটি নির্দিষ্ট শর্ত ('যদি' শাখা) ছাড়া, 'অন্য' শাখাটি কখনই চলবে না। 
একটি লুপ যোগ করুন এবং প্রকল্পটি পরীক্ষা করুন
- প্রকল্পটি পরীক্ষা করার আগে, আরও একটি কমান্ড যোগ করতে হবে। If else স্টেটমেন্টটি স্টেটমেন্টের বাইরে পরবর্তী কমান্ডে যাওয়ার আগে কেবল একবার শর্তটি পরীক্ষা করবে। ইউনিট ৭-এ, ভিআর রোবটকে বারবার ডাউন আই সেন্সরের অবস্থা পরীক্ষা করার নির্দেশ দেওয়ার জন্য প্রকল্পে একটি অসীমwhile লুপ যুক্ত করা হয়েছিল। দূরত্ব সেন্সরের অবস্থা বারবারপরীক্ষা করা হচ্ছে কিনা তা নিশ্চিত করতে, একটি infinite while লুপ টেনে আনুন বা টাইপ করুন, তারপর infinitewhile লুপের ভিতরেif elseস্টেটমেন্টটি কপি করুন। আপনার প্রকল্পটি এখন এইরকম দেখা উচিত:
-
লুপে কমান্ড কপি এবং পেস্ট করার সময় ইন্ডেন্টেশনের কথা মনে রাখবেন, যাতে প্রকল্পটি চালানোর সময় উদ্দেশ্য অনুসারে কাজ করে।
def main(): while True: # দূরত্ব সেন্সর কি দুর্গ সনাক্ত করে? যদি front_distance.found_object(): # একটি দূরত্ব সেন্সর দ্বারা ক্র্যাশ দুর্গ সনাক্ত করা হয় drivetrain.drive(FORWARD) অন্যথায়: # দূরত্ব সেন্সর ব্যবহার করে একটি দুর্গ খুঁজে পেতে ঘুরুন drivetrain.turn(RIGHT) wait(5, MSEC)
-
- যদি খেলার মাঠের উইন্ডোটি ইতিমধ্যে খোলা না থাকে তবে তা খুলুন। নিশ্চিত করুন যেDynamic Castle Crasher Playgroundখোলা আছে, এবং প্রকল্পটি চালান।

- ভিআর রোবটটি কমপক্ষে দুটি দুর্গে আঘাত করার পরে, খেলার মাঠটি পুনরায় লোড করুন এবং ডাইনামিক ক্যাসল ক্র্যাশার খেলার মাঠটির অন্য একটি লেআউটে প্রকল্পটি চালান।

- প্রকল্পের প্রতিটি ধাপে, ভিআর রোবটটি ঘুরবে যতক্ষণ না দূরত্ব সেন্সর দ্বারা একটি দুর্গ সনাক্ত করা হয়, তারপর সেই ভবনটিকে ধাক্কা দেওয়ার জন্য সেই ভবনের দিকে গাড়ি চালাবে।

- প্রকল্পটি চালানোর সময়, VR রোবট একটি দুর্গের টুকরোকে পুরোটা প্রান্তে ঠেলে দিতে পারে এবং খেলার মাঠ থেকে পড়ে যেতে পারে। এর কারণ হল found_objectকমান্ডটি এখনও রিপোর্ট করছে যে VR রোবটের সামনে একটি বস্তু রয়েছে। যখন এই কমান্ডটি True রিপোর্ট করে, তখন VR রোবট এগিয়ে যায়, যার ফলে VR রোবটটি খেলার মাঠ থেকে পড়ে যায়।
একটি যদি অন্যথায় স্টেটমেন্ট সহ প্রজেক্ট ফ্লো
if else বিবৃতিটি ব্যবহার করা হয় যাতে VR রোবট সিদ্ধান্ত নিতে পারে। যদি বুলিয়ান শর্ত সত্য হয়, তাহলে 'if' শাখার ভিতরের কমান্ডগুলি চলবে। যদি বুলিয়ান কন্ডিশন False হয়, তাহলে 'else' শাখার ভিতরের কমান্ডগুলি চলবে।
উদাহরণস্বরূপ, Dynamic Castle Crasher Playground-এর এই পুনরাবৃত্তিতে, যখন প্রকল্পটি শুরু হয় তখন দূরত্ব সেন্সর একটি বস্তু সনাক্ত করে -found_objectকমান্ডের অবস্থা True রিপোর্ট করে। এখন প্রকল্পের 'যদি'শাখাটি চলবে, এবং VR রোবট এগিয়ে যাবে। ভিআর রোবটটি প্রকল্পের 'অন্য' শাখাটি এড়িয়ে যাবে।
- লক্ষ্য করুন যে দূরত্ব সেন্সর ডেটা ড্যাশবোর্ডেও রিপোর্ট করা হয়েছে। যখন একটি বস্তু সনাক্ত করা হয়, দূরত্ব মান প্রদর্শিত হবে।
তবে, ডাইনামিক ক্যাসেল ক্র্যাশার প্লেগ্রাউন্ডের এই পুনরাবৃত্তিতে, যখন প্রকল্পটি শুরু হয় তখন দূরত্ব সেন্সর কোনও বস্তু সনাক্ত করে না -found_object কমান্ডের অবস্থা মিথ্যা বলে রিপোর্ট করে। এখন VR রোবটটি প্রকল্পের 'যদি' শাখাটি এড়িয়ে যাবে, এবং প্রকল্পের 'অন্য' শাখাটি চলবে, তাই VR রোবটটি ডানদিকে ঘুরবে।
- লক্ষ্য করুন যে ড্যাশবোর্ডে দূরত্ব সেন্সরের মান > 3000 মিমি হিসাবে রিপোর্ট করা হয়েছে। দূরত্ব সেন্সর 3000 মিলিমিটার (মিমি) সীমার মধ্যে থাকা বস্তু সনাক্ত করতে পারে, তাই যখন কোনও বস্তু সনাক্ত করা যায় না, তখন মানটি (>) 3000 মিমি এর চেয়ে বেশি হিসাবে রিপোর্ট করা হয়।
যেহেতু if else স্টেটমেন্টটি একটি অসীম while লুপের ভিতরে, তাই প্রজেক্টটি অসীমwhile লুপের উপরে ফিরে আসে যাতে if else স্টেটমেন্টের অবস্থা বারবার পরীক্ষা করা যায়। এই লুপটি চিরকাল চলতে থাকবে, যা VR রোবটকে প্রতি সেকেন্ডে শত শত বার if elseঅবস্থা ক্রমাগত পরীক্ষা করার নির্দেশ দেবে।
- মনে রাখবেন যে if elseস্টেটমেন্টের ভিতরে থাকা ড্রাইভ এবং turn কমান্ডগুলি নন-ওয়েটিং কমান্ড। নন-ওয়েটিং কমান্ডগুলি কোনও প্রকল্প চলমান থাকাকালীন তার প্রবাহকে থামায় না। if else স্টেটমেন্টে (যেমন 'অবজেক্ট সনাক্ত হলে এগিয়ে যান') একটি নন-ওয়েটিং আচরণ কার্যকর করা হলে শর্তটি পরীক্ষা করা হলে তা অব্যাহত থাকবে এবং শর্তটি পরিবর্তন হলেই কেবল পরিবর্তন হবে।
আপনার তথ্যের জন্য
শর্তটি পরীক্ষা করার সময় প্রকল্পের শুধুমাত্র একটি শাখা চালানো হচ্ছে তা নিশ্চিত করার জন্য একটিif elseস্টেটমেন্ট ব্যবহার করা হয়। শুধুমাত্র একটি উদাহরণ বা শর্ত যেকোনো সময় সত্য হতে পারে। এটি প্রকল্পটিকে আরও দক্ষ করে তোলে।

বর্তমান প্রকল্পের সাথে ইউনিট ৭-এ তৈরি প্রকল্পের তুলনা করুন। ইউনিট ৭ প্রকল্পে চারটি যদি বিবৃতি ব্যবহার করা হয়েছে।

একাধিক if স্টেটমেন্ট সহ একটি প্রকল্প চালানোর সময়, এটি সম্ভব হতে পারে যে প্রকল্পটি লুপের সাথে অসীম কমান্ডের মধ্য দিয়ে চলার সময় একাধিক শর্ত সত্য (অথবা মিথ্যা) রিপোর্ট করবে। এই ধরণের দ্বন্দ্বের কারণে প্রকল্পটি বন্ধ হয়ে যেতে পারে অথবা আরও ধীর গতিতে চলতে পারে।
অন্য কথায়, একটি প্রকল্পে একাধিক ifবিবৃতি একাধিক প্রস্থান র্যাম্প সহ একটি রাস্তা দিয়ে ভ্রমণ করার মতো। আপনি যেখানে যাওয়ার চেষ্টা করছেন তার উপর নির্ভর করে আপনি বিভিন্ন জায়গায় ঘুরবেন। উদাহরণস্বরূপ,যদিতুমি স্কুলে যাও, তাহলে তুমি বাম দিকে ঘুরবে; যদি তুমি দোকানে যাও, তাহলে তুমি ডান দিকে ঘুরবে। কিন্তু আপনি যদি স্কুলে বা দোকানে না যান? উভয় শর্ত মিথ্যা রিপোর্ট করবে, এবং আপনি সরল পথে থাকবেন। অথবা যদি আপনি স্কুল এবং দোকান উভয়ই যাচ্ছেন? উভয় শর্তই সত্য রিপোর্ট করবে, কিন্তু আপনি একই সময়ে দুটি অবস্থানে ঘুরতে পারবেন না। 
উপমাটি আরও জোরদার করার জন্য, একটি if elseবিবৃতি রাস্তার একটি কাঁটায় ভ্রমণের মতো - এটি আপনাকে সিদ্ধান্ত নিতে বাধ্য করে। যদিতুমি স্কুলে যাও, তাহলে বাম দিকে ঘুরো; অন্যথায়, ডান দিকে ঘুরো। তুমি যেখানেই যাও না কেন, তুমি হয় বাম দিকে ঘুরবে, না হয় ডানে। if elseস্টেটমেন্ট ব্যবহার করলে উপরের মতো বাগ এড়ানো যাবে, কারণ এটি আপনাকে সিদ্ধান্ত নিতে বাধ্য করবে, কারণ একটি নির্দিষ্ট মুহূর্তে শুধুমাত্র একটি শর্ত সত্য হতে পারে।