تابع range؛ تولید دنبالهی عددی برای کنترل تکرار
آشنایی با سه شکل تابع range
تابع range در برنامهنویسی، مانند یک خطکش اعداد عمل میکند که میتواند اعداد را از جایی شروع کند، به جایی ختم شود و حتی پلهپله جلو برود. این تابع به سه شکل متفاوت در کدنویسی نوشته میشود که هرکدام کاربرد خاص خود را دارند. در شکل اول، فقط عدد پایان را مشخص میکنیم و تابع بهطور خودکار از صفر شروع میکند و یکیکی تا یک عدد کمتر از پایان جلو میرود. شکل دوم، هم شروع و هم پایان را تعیین میکند و شکل سوم، علاوه بر شروع و پایان، اندازهی گام یا پرش را هم مشخص میکند. برای درک بهتر، جدول زیر را ببینید که هر سه حالت را با هم مقایسه کرده است.
| نوع نوشتار | مقدار شروع | مقدار پایان | مقدار گام | دنبالهی تولیدی |
|---|---|---|---|---|
| range(پایان) | ۰ | ۵ | ۱ | ۰، ۱، ۲، ۳، ۴ |
| range(شروع، پایان) | ۲ | ۷ | ۱ | ۲، ۳، ۴، ۵، ۶ |
| range(شروع، پایان، گام) | ۱ | ۱۰ | ۲ | ۱، ۳، ۵، ۷، ۹ |
کاربرد range در زندگی روزمره
فرض کن میخواهی پنج بار نام بهترین دوستت را روی کاغذ بنویسی. اگر از تابع range استفاده کنی، میتوانی با نوشتن range(۵) دقیقاً مشخص کنی که این کار پنج بار انجام شود. یا وقتی میخواهی از بین کتابهای قفسهی کتابخانه، کتابهای شمارهی ۳ تا ۸ را بررسی کنی، از range(۳، ۹) استفاده میکنی. حتی اگر بخواهی فقط اعداد زوج بین ۲ تا ۲۰ را پیدا کنی، با range(۲، ۲۱، ۲) به راحتی به هدف میرسی. این تابع در بازیهای کامپیوتری هم کاربرد دارد؛ مثلاً برای حرکت دادن یک کاراکتر به تعداد مشخصی خانه در صفحهی بازی.
یکی از جالبترین کاربردهای range در رسم اشکال هندسی با استفاده از حلقههاست. فرض کن میخواهی یک مربع با خطوط مستقیم بکشی. با استفاده از range میتوانی چهار بار دستور رسم خط را تکرار کنی و هر بار جهت آن را تغییر دهی. یا وقتی میخواهی جدول ضرب را چاپ کنی، با دو حلقهی تو در تو که هرکدام از range استفاده میکنند، میتوانی تمام حاصلضربهای اعداد ۱ تا ۱۰ را تولید کنی.
چالشهای مفهومی با range
پرسش اول: چرا در range عدد پایان هرگز در دنباله قرار نمیگیرد؟
این قانون به این دلیل است که range مانند یک خطکش از نقطهی شروع تا قبل از نقطهی پایان را اندازه میگیرد. به عنوان مثال، وقتی میگویی range(۳) یعنی اعداد ۰، ۱ و ۲ که دقیقاً سه عدد هستند. این قاعده به برنامهنویسان کمک میکند تا تعداد دفعات تکرار را به راحتی محاسبه کنند.
پرسش دوم: اگر گام را منفی بنویسم، چه اتفاقی میافتد؟
با گام منفی، دنباله به سمت عقب حرکت میکند. مثلاً range(۱۰، ۰، -۱) اعداد ۱۰ تا ۱ را به ترتیب نزولی تولید میکند. این ویژگی برای شمارش معکوس یا حرکت از انتهای یک لیست به ابتدای آن بسیار مفید است.
پرسش سوم: تفاوت range با لیست اعداد در چیست؟
range یک دنبالهی تولیدی در لحظه است و همهی اعداد را یکجا در حافظه ذخیره نمیکند، در حالی که لیست همهی اعداد را نگه میدارد. این ویژگی باعث میشود range برای تعداد زیادی تکرار بسیار بهینه و کممصرف باشد.
نکتههای کلیدی
- با range میتوانی تعداد دفعات تکرار حلقه را به دقت کنترل کنی.
- این تابع به سه شکل مختلف نوشته میشود: فقط پایان، شروع و پایان، و شروع و پایان و گام.
- عدد پایان هرگز در دنبالهی تولیدی قرار نمیگیرد و این یک قاعدهی اساسی است.
- با گام منفی میتوانی دنبالههای نزولی بسازی.
- range برای تکرارهای سنگین، حافظهی کمتری نسبت به لیست مصرف میکند.