تابع Range در پایتون — توضیح کاربرد به زبان ساده + کد
گاهی نیاز است در برنامه نویسی پایتون دنبالههایی ایجاد شوند و نوشتن دستی آنها از برنامه نویس زمان زیادی را میگیرد. بنابراین ترفندهایی در پایتون وجود دارند که با استفاده از توابع خاص میتوان به هدف خود رسید و دنباله مورد نظر را ایجاد و چاپ کرد. در چنین مواردی از تابع Range در پایتون استفاده میشود. در این مطلب آموزش تابع Range در پایتون به طور جامع و همراه با مثال ارائه شده است. همچنین، تابع دیگری نیز وجود دارد که رویکرد و سینتکسی بسیار شبیه به تابع Range در پایتون دارد، به این تابع Slice گفته میشود و برای برش بخشی از یک دنباله مورد استفاده قرار میگیرد. تابع Slice در پایتون نیز در این مطلب به طور جامع و همراه با مثال بررسی شده است.
تابع Range در پایتون چیست؟
تابع Range در پایتون، یکی از توابع استاندارد و داخلی این زبان برنامه نویسی به حساب میآید. این تابع «دنبالهای» (Sequence) از اعداد را برمیگرداند که از صفر شروع میشوند. گامهای حرکت در تابع Range پایتون به طور پیشفرض یکبهیک پیش میروند و بازه انتهایی دنباله شامل عدد توقف نمیشود. برای درک بهتر این موضوع در ادامه به شرح سینتکس تابع Range در پایتون پرداخته شده است.
سینتکس تابع Range در پایتون چگونه است؟
سینتکس تابع Range در پایتون به صورت زیر نوشته میشود:
1range(start, stop, step)
در سینتکس تابع فوق نشان داده شده است که تابع Range سه پارامتر دریافت میکند که دو تا از این پارامترها اختیاری یا همان Optional هستند. هر کدام از این پارامترها در ادامه فهرست شده و شرح داده میشوند:
- start : از این پارامتر به صورت اختیاری میتوان استفاده کرد. از پارامترstart برای تعریف نقطه شروع دنباله استفاده میشود. اما اگر این پارامتر در تابع Range تعریف نشود، به صورت پیشفرض صفر در نظر گرفته خواهد شد.
- stop : این پارامتر باید حتماً در تابع تعریف شود و به عنوان پارامتر اجباری تابع Range در پایتون در نظر گرفته میشود. از پارامترstop برای تعریف نقطه پایانی دنباله تابع Range استفاده شده است.
- step : این پارامتر نیز به صورت اختیاری در تابع Range استفاده میشود و گامهای عبور افزایشی از هر تکرار دنباله را نشان میدهد. اگر این پارامتر توسط برنامه نویس مشخص نشود، به صورت پیشفرض عدد یک برای آن در نظر گرفته میشود.
در ادامه این مطلب، روش استفاده از تابع Range در پایتون را یاد میگیریم.
چگونه از تابع Range در پایتون استفاده می کنیم؟
به دلیل اینکه تابع Range در پایتون دنبالهای از اعداد را برمیگرداند، بیشتر توسعه دهندگان از آن برای نوشتن «حلقههای» (Loop) برنامه خود استفاده میکنند و این موضوع یکی از ترفندهای پایتون در برنامه نویسی به حساب میآید. این روش زمانی کاربردی است که برنامه نویس «لیست» (List) یا «تاپل» (Tuple) نداشته باشد و فقط از مقدارهایی خاص برای پیادهسازی در حلقه استفاده کند. در ادامه با استفاده از مثالهایی روش استفاده از تابع Range در پایتون را با داشتن پارامترهای اختیاری و اجباری آن بررسی میکنیم. ابتدا این تابع پایتون با دریافت تنها یک پارامتر بررسی میشود.
پیاده سازی با دریافت یک پارامتر
در ادامه کدهایی نمایش داده شدهاند که تابع Range را تنها با دریافت یک پارامتر یعنی همان پارامتر اجباریstop پیادهسازی میکنند.
1x = range(5)
2for n in x:
3 print(n)
4
5#OutPut
61
72
83
94
با استفاده از تابع range در پایتون، دنبالهای از اعداد متوالی با شروع از عدد یک تا ۴ در متغیر X ذخیره شده است. سپس از متغیر x در یک حلقه for برای تکرار استفاده شده است که n در این حلقه شمارنده به حساب میآید. خروجی کدهای فوق نشان میدهد که پاسخ خروجی تا قبل از رسیدن به مقدارstop چاپ میشود و مقدار خودstop در خروجی وجود ندارد. مقدار توقف هیچگاه شامل گامهای تکرار در تابع Range پایتون نمیشود. عملکرد تابعlist.size() نیز دقیقاً به همین صورت است. بخش بعدی به مثالی برای استفاده از تابع Range با دو پارامتر اختصاص دارد.
پیاده سازی با دریافت دو پارامتر
در این بخش از مطلب «تابع Range در پایتون» مثالی ارائه شده است که در آن این تابع دو پارامترstart وstop را دریافت میکند.
1x = range(10,15)
2for n in x:
3 print(n)
4
5#OutPut
610
711
812
913
1014
در کدهای فوق عدد ۱۰ نشاندهنده نقطه شروع دنباله و عدد ۱۵ نشاندهنده نقطه پایانی دنباله است. به صورت پیشفرضstep نیز یک در نظر گرفته میشود. در بخش بعدی به مثالی برای استفاده از تابع Range با سه پارامتر میپردازیم.
پیاده سازی با دریافت سه پارامتر
حال در این بخش از هر سه پارامترstart ،stop وstep تابع Range در پایتون استفاده میشود. مثالی برای نشان دادن این روش در ادامه نمایش داده شده است:
1for i in range(10, 20, 2):
2 print(i)
3
4#OutPut
510
612
714
816
918
در کدهای فوق، مقدار پارامترstep عدد ۲ است و به جای افزایش گامها با عدد پیشفرض یک، از عدد ۲ استفاده میشود. یکی از مهمترین نکتههایی که باید درباره این پارامتر به خاطر سپرد، این است که پارامترstep هیچگاه نباید عدد صفر باشد. اگر این پارامتر صفر در نظر گرفته شود، در برنامه استثنایValueError رخ میدهد. در ادامه این مطلب پیش از پرداختن به استفاده از تابع Range در انواع لیست پایتون، به معرفی و شرح مختصری از برخی دورههای آموزش برنامه نویسی پایتون فرادرس برای علاقهمندان و دانشجویان پرداخته شده است.
فیلم های آموزش برنامه نویسی پایتون
دورههای آموزش ویدیویی در وب سایت فرادرس بر اساس موضوع در مجموعههای آموزشی مختلفی دستهبندی میشوند. یکی از این مجموعهها مربوط به آموزش زبان پایتون در سطحهای مقدماتی تا پیشرفته همراه با انواع آموزشهای کاربردی و پروژهمحور است. با توجه به اینکه این زبان برنامه نویسی در حوزههای مختلف علوم کامپیوتر مورد استفاده قرار میگیرد، این بخش به معرفی مجموعه آموزشهای ویدیویی پایتون برای یادگیری بیشتر این زبان در کاربردهای مختلف اختصاص داده شده است. در زمان تدوین این مطلب، مجموعه دورههای برنامه نویسی فرادرس حاوی ۳۱۰ ساعت محتوای ویدیویی است و شامل ۵۷ دوره میشود. در ادامه برخی از دورههای این مجموعه آموزشی به طور خلاصه معرفی شدهاند:
- فیلم آموزش برنامه نویسی پایتون Python - مقدماتی (طول مدت: ۱۹ ساعت و ۵۳ دقیقه، مدرس: پژمان اقبالی شمس آبادی): در این فرادرس زبان برنامه نویسی پایتون از پایهایترین مباحث تدریس میشود و برای دانشجویان و علاقهمندان به پایتون مناسب است. برای مشاهده فیلم آموزش برنامه نویسی پایتون Python - مقدماتی + کلیک کنید.
- فیلم آموزش ترفندهای برنامه نویسی پایتون (طول مدت: 9 ساعت و 9 دقیقه، مدرس: دکتر سید مصطفی کلامی هریس): در این فرادرس، سعی شده است مهمترین و کاربردیترین نکات در خصوص استفاده از زبان برنامهنویسی پایتون و کتابخانههای استاندارد آن، بررسی شوند. با آموختن نکات و ترفندهایی که در این آموزش ارائه شده است، دانش برنامهنویسی فرد به سطح بالاتر از متوسط میرسد و میتواند برای آموختن نکات پیشرفتهتر، برنامهریزی کند. برای مشاهده فیلم آموزش ترفندهای برنامه نویسی پایتون + کلیک کنید.
- فیلم آموزش برنامه نویسی شی گرا در پایتون Python (طول مدت: ۷ ساعت و ۲۹ دقیقه، مدرس: دکتر فرشید شیرافکن): در این فرادرس مفاهیم شی گرایی در پایتون با سادهترین روش و همراه با ذکر مثال آموزش داده شده است. برای مشاهده فیلم آموزش برنامه نویسی شی گرا در پایتون Python + کلیک کنید.
- فیلم آموزش کتابخانه های NumPy و Matplotlib در پایتون (طول مدت: ۴ ساعت و ۴۶ دقیقه، مدرس: میترا تجربه کار): این دوره آموزشی برای تکمیل مباحث موجود در دوره پایتون مقدماتی ارائه شده است. همچنین آشنایی با کتابخانه NumPy، بخش جدیدی از برنامه نویسی پایتون را در این دوره به دانشجویان و علاقهمندان معرفی میکند. برای مشاهده فیلم آموزش کتابخانه های NumPy و Matplotlib در پایتون + کلیک کنید.
- فیلم آموزش پایتون گرافیکی - رابط های گرافیکی پایتون (طول مدت: ۵ ساعت و ۳ دقیقه، مدرس: سید رضا دهقان): برای برنامه نویسان پایتون، یادگیری حداقل یک واسط گرافیکی (Graphical User Interface | GUI) این زبان برنامه نویسی اهمیت بسیاری دارد. به همین دلیل، در این دوره آموزشی به بررسی واسطهای گرافیکی پایتون پرداخته شده است. برای مشاهده فیلم آموزش پایتون گرافیکی - رابطهای گرافیکی پایتون + کلیک کنید.
- فیلم آموزش پروژه محور Python پایتون - ساخت نرم افزار برای ویندوز و لینوکس در Python (طول مدت: ۹ ساعت و ۳۴ دقیقه، مدرس: محمد حسینی): ابزار توسعه در این دوره آموزشی بر مبنای PyQt است. با استفاده از این فرادرس، علاقهمندان با نحوه تولید نرم افزار آشنا میشوند و میتوانند برای هر زمینهای نرم افزار مورد نیازشان را بسازند. برای مشاهده فیلم آموزش پروژه محور Python پایتون - ساخت نرم افزار برای ویندوز و لینوکس در Python + کلیک کنید.
اکنون پس از معرفی برخی از دورههای آموزش زبان برنامه نویسی پایتون، بخش بعدی این مطلب، به روش استفاده از تابع Range در پایتون همراه با انواع لیست در پایتون اختصاص دارد.
استفاده از تابع Range در انواع لیست پایتون
زمانی که از تابع Range در یک حلقه استفاده میشود، این تابع میتواند برای تکرار روی انواع لیست در پایتون به وسیله تابعlen استفاده شود. دسترسی به مقادیر لیست با استفاده از «اندیس» (Index) آنها امکانپذیر است. توجه کنید که متغیر index با تابع Index در پایتون فرق دارد. در ادامه مثالی برای درک بهتر این روش استفاده از لیست با تابع Range ارائه میشود.
1
2listType = ['US', 'UK', 'India', 'China']
3for i in range(len(listType)):
4 print(listType[i]) # Output : US, UK, India, China
تابع Range معکوس در پایتون
در پارامترهای تابع Range پایتون میتوان هم از عدد مثبت و هم از اعداد منفی استفاده کرد. میتوان با استفاده از این ویژگی، فرصتی برای پیادهسازی حلقههای معکوس به دست آورد. در این روش، بزرگترین عدد به عنوان پارامترstart ، کوچکترین عدد به عنوان پارامترstop و عدد منفی برای مقدارstep در نظر گرفته میشود. در ادامه مثالی برای درک بهتر این روش ارائه شده است.
1for i in range(10, 5, -1):
2 print(i) #OutPut : 10, 9, 8, 7, 6
با استفاده از کدهای فوق، اعداد از بزرگ به کوچک چاپ میشوند. بخش بعدی به روش ایجاد ساختمان دادههای لیست، «مجموعه» (Set) و تاپل با استفاده از تابع Range در پایتون اختصاص دارد.
ایجاد لیست، مجموعه و تاپل با استفاده از تابع Range در پایتون
تابع Range فقط در حلقهها کاربرد ندارد و در بسیاری از بخشهای دیگر نیز مورد استفاده قرار میگیرد. برای مثال، میتوان ساختمان داده Set ،List و Tuple را به وسیله این تابع ایجاد کرد. در این روش از کدهای «Boilerplate» نیز جلوگیری میشود؛ به عبارت دیگر کدهای اضافی برای ساخت لیست، مجموعه و تاپل نوشته نمیشوند. در ادامه مثالهایی برای ایجاد این ساختمان دادهها با استفاده از تابع Range ارائه شده است.
1print(list(range(0, 10, 2))) #OutPut : [0, 2, 4, 6, 8]
2print(set(range(0, 10, 2))) #OutPut : {0, 2, 4, 6, 8}
3print(tuple(range(0, 10, 2))) #OutPut : (0, 2, 4, 6, 8)
اگر از پارامتر منفی برای گامهای توابع فوق استفاده کرد و جایstop وstart را تغییر داد، اعداد فوق معکوس میشوند و خروجیهای زیر تولید خواهند شد.
1print(list(range(10, 0, -2))) #OutPut : [10, 8, 6, 4, 2]
2print(tuple(range(10, 0, -2))) #OutPut : (10, 8, 6, 4, 2)
بخش بعدی به بررسی روشی میپردازیم که با آن میتوان از تابع Range در پایتون همراه با اندیس استفاده کرد.
استفاده از تابع Range در پایتون با اندیس
دقیقاً مانند زمانی که میتوان با استفاده از اندیسها به مقادیر لیستی دسترسی داشت، میتوان به طور مشابه از اندیس در تابع Range نیز استفاده کرد. سینتکس و مثال استفاده از اندیس در تابع Range به صورت زیر نوشته میشود:
1A = range(10,100)[29]
2print(A) # Output: 39
در بخش بعدی استفاده یا عدم استفاده از آرگومانهای اعشاری در تابع Range را بررسی میکنیم.
آرگومان اعشاری در تابع Range
به صورت پیشفرض تابع Range در پایتون فقط نوع «اعداد صحیح» (Integer) را دریافت میکند. اگر نوع عددی دیگری مانند «اعداد اعشاری» (Float) به عنوان پارامتر وارد این تابع شود، خطای زیر در خروجی چاپ میشود:
TypeError: 'float' object cannot be interpreted as an integer
اما برای جلوگیری از این خطا، یک راه حل وجود دارد. میتوان یک تابع به روش معمولی و استاندارد در پایتون نوشت که همان وظیفه تابع Range را انجام میدهد. در ادامه این تابع مشاهده میشود. در این تابع امکانی وجود دارد که میتوان مقدار آرگومانstep را به صورت اعشاری وارد تابع کرد.
1def float_range(start, stop, step):
2 while start < stop:
3 yield float(start)
4 start += decimal.Decimal(step)
5
6print(list(float_range(0, 1, '0.3'))) #OutPut : [0.0, 0.3, 0.6, 0.9]
به دلیل شباهت سینتکسی و روش استفاده تابع Range و Slice در پایتون، در بخش بعدی چگونگی استفاده از تابع Slice را یاد میگیریم.
چگونه از تابع Slice در پایتون استفاده کنیم؟
شی Slice برای تعیین نحوه برش یک دنباله استفاده میشود. با استفاده از تابع Slice در پایتون میتوان تعیین کرد که این برش از کجا شروع شود و با چه گامهایی و تا کجا ادامه داشته باشد. در ادامه به بررسی روش نوشتن و سینتکس تابع Slice در پایتون پرداخته شده است.
سینتکس تابع Slice در پایتون چگونه است؟
سینتکس این تابع دقیقاً مانند تابع Range در پایتون به صورت زیر است:
1slice(start, end, step)
هر کدام از پارامترهای تابع فوق در ادامه شرح داده شدهاند:
- start : این پارامتر برای تابع Slice اختیاری است. پارامترstart محل شروع برش از دنباله را نشان میدهد. اگر عددی برای این پارامتر در نظر گرفته نشود، به صورت پیشفرض صفر در نظر گرفته خواهد شد.
- end : این پارامتر همان پارامترstop در تابع Range است و باید وجود داشته باشد. پارامترend محل اتمام برش از دنباله را مشخص میکند.
- step : پارامتری اختیاری در تابع Slice پایتون است. گامهای بین اعداد دنباله را نشان میدهد و اگر تعریف نشود به صورت پیشفرض عدد یک در نظر گرفته میشود.
در ادامه مثالهایی برای درک بهتر تابع Slice در پایتون ارائه شده است.
مثال های تابع Slice در پایتون
در این بخش برای درک کامل تابع Slice در پایتون دو مثال ساده جهت مشاهده روش استفاده از آن نمایش داده میشود. ابتدا در مثال زیر، تاپلی با اشیا Slice ایجاد شده است که از مکان سوم دنباله داده شده تا مکان پنجم آن قرار دارند:
1a = ("a", "b", "c", "d", "e", "f", "g", "h")
2x = slice(3, 5)
3print(a[x])
خروجی مثال فوق تاپل('d', 'e') است. در ادامه مثال دیگری ارائه شده است که در آن اعداد کل دنباله برای برش در نظر گرفته میشوند و با گامهای سهتایی چاپ میشوند.
1a = ("a", "b", "c", "d", "e", "f", "g", "h")
2x = slice(0, 8, 3)
3print(a[x])
خروجی برنامه فوق، به صورت('a', 'd', 'g') نمایش داده شده است.
جمعبندی
زبان پایتون دارای انواع ترفندها و قابلیتهای مختلف برای حل مسائل متفاوت است. با استفاده از این ترفندها میتوان کدهای خواناتر و سادهتری ایجاد کرد؛ یادگیری انواع ترفندهای پایتون در توابع و بسیاری از بخشهای دیگر میتواند به پیشرفت مهارت برنامه نویسی فرد بینجامد. تابع Range در پایتون و تابع Slice از جمله ترفندهایی هستند که در این مطلب به آنها و روش استفاده آنها در برنامهها پرداختیم.
تابع Range در پایتون دارای سه پارامتر ساده Start ،Stop و Step است که میتوان با تعریف این سه پارامتر دنباله مورد نظر خود را در هر برنامه یا حلقهای ایجاد کرد. خروجی این تابع یک دنباله است و میتوان با استفاده از ترفند اعداد منفی در جایگاه پارامتر Step دنبالهای معکوس نیز با تابع Range در پایتون ایجاد کرد.
تابع Slice هم دقیقاً پارامترهایی مانند تابع Range در پایتون دارد، فقط با این تفاوت که در آن به جای کلمه Stop از End استفاده شده است. به وسیله این تابع میتوان بخشی از یک دنباله را که در مکانی مشخص وجود دارد با گامهای منحصربهفرد برش زد و در خروجی چاپ کرد.
سپاس
خیلی مفید ساده و روان توضیح دادید
یک جهان سپاس
بسیار عالی و قابل فهم