پرهیز از حلقههای بیپایان
هر حلقهی while به روشی برای توقّف اجرا نیاز دارد تا اجرای آن برای همیشه ادامه نیابد. برای مثال این حلقهی شمارنده باید از ۱ تا ۵ بشمارد:
امّا اگر همانطور که در ادامه میآید، سهواً خط x += 1 را حذف کنید حلقه تا ابد اجرا میشود:
اکنون مقدار x از ۱ شروع میشود امّا هرگز تغییر نمیکند. در نتیجه آزمون شرطی x <= 5 همواره True ارزیابی میشود و حلقهی while برای همیشه اجرا شده و دنبالهای از ۱ها چاپ میکند:
هر برنامهنویسی گاه به گاه و به صورت اتّفاقی حلقهی while بیپایان مینویسد، به ویژه زمانی که حلقههای برنامه شرطهای خروج ظریف و دیرفهمی دارند. اگر برنامهی شما در یک حلقهی بیپایان گیر کرد CTRL-C را فشار دهید یا به سادگی پنجرهی ترمینالی را که خروجی برنامه را نشان میدهد ببندید.
برای پرهیز از نوشتن حلقههای بیپایان، هر حلقهی while را بیازمایید و مطمئن شوید اجرای آن در زمانی که شما انتظار دارید متوقّف میشود. اگر از برنامه میخواهید که با دریافت یک ورودی مشخّص پایان یابد، آن را اجرا کنید و آن مقدار را وارد کنید. اگر برنامه پایان نیافت، روش برنامه را پایان دادنِ به حلقه، موشکافانه مورد بررسی قرار دهید.
خودآزمایی
مواد روی پیتزا
حلقهای بنویسید که از کاربران بخواهد پیش از وارد کردن مقدار ‘quit’، مجموعهای از مواد روی پیتزا را وارد کنند. همزمان که موارد را وارد میکنند، پیامی چاپ کنید که میگوید شما آن مورد را به پیتزا اضافه خواهید کرد.
بلیتهای سینما
یک سالن سینما قیمت بلیتها را بر اساس سنّ فرد تعیین میکند. اگر فرد کمتر از ۳ سال سن داشته باشد، بلیت او رایگان است؛ اگر بین ۳ تا ۱۲ سال داشته باشند باید ۱۰ دلار بپردازند و اگر بیش از ۱۲ سال سن داشته باشند بلیت آنها ۱۵ دلار خواهد بود. حلقهای بنویسید که در آن سن کاربران پرسیده شده و سپس قیمت بلیت آنها اعلام میشود.
سه خروجی
نسخههای متفاوتی از تمرین ۷-۴ یا ۷-۵ بنویسید که کارهای زیر را حدّاقل یک بار انجام دهد:
- در عبارت while یک آزمون شرطی بیاورید که اجرای حلقه را متوقّف کند.
- از یک متغیّر فعّال بودن استفاده کنید تا مدّت زمان اجرای حلقه را کنترل کنید.
- هنگامی که کاربر مقدار ‘quit’ را وارد میکند، از یک عبارت break برای خروج از حلقه استفاده کنید.
بیپایانی
حلقهای بنویسید که هیچگاه پایان نمییابد و آن را اجرا کنید. (برای پایان دادن به این حلقه CTRL+C را فشار دهید یا پنجرهای که خروجی را نشان میدهد ببندید.)