تابع، ( )range در پایتون
تعریف و کاربرد تابع range
در اصل range یک تابع برای تولید دنباله ای از اعداد صحیح است که یکی از کاربرد های اصلی آن استفاده در شمارنده حلقه ها (for , while و غیره) می باشد. تابع range یک دنباله از اعداد صحیح تولید می کند که می توانیم نقطه شروع و پایان و حتی گام های حرکت دنباله را مشخص کنیم. با چند مثال شما را بیشتر با تابع range و کاربرد های آن آشنا خواهیم کرد. در ابتدا لازم است با نحوه تعریف range آشنا شویم :
شکل کلی تابع
range(start, stop, step)
فهرست مطالب این مقاله
همانطور که در نمایش سینتکس تابع range در بالا نیز مشاهده می کنید، این تابع می تواند سه آرگومان ورودی داشته باشد البته هر سه آرگومان اجباری نیستند و تابع range می تواند تنها با یک آرگومان نیز دنباله ای از اعداد تولید کند، برای درک بهتر به مثال های زیر توجه کنید:
>>> my_range = range(1, 10, 1)
>>> my_range[0]
1
>>> my_range[1]
2
>>> my_range[8]
9
تابع range فقط با یک آرگومان (stop)range :
اولین روش فراخوانی با یک آرگومان است، وقتی range را با یک آرگومان صدا می زنیم منظور ما مشخص نمودن مقدار پایان دنباله است، در این حالت مقدار شروع به صورت پیشفرض 0 و مقدار مربوط به گام دنباله به شکل پیش فرض 1 می باشد.
>>> range(6)
range(0, 6)
همانطور که مشاهده کردیید، اگر تابع range را تنها با یک آرگومان، یعنی مقدار پایان دنباله استفاده کنیم، مانند مثال بالا تابع یک دنباله به طول 6 با شروع 0 و پایان 5 برای شما تولید خواهد کرد. و از آنجایی که شما مقدار گام را مشخص نکرده بودید گام رشد مقادیر دنباله را یک واحدی در نظر خواهد گرفت. به شکلی که در اولین خانه دنباله یعنی a[0] مقدار 0 در دومین خانه دنباله یعنی a[1] مقدار 1 و به همین ترتیب برای ششمین خانه دنباله یعنی a[5] مقدار 5 را در نظر می گیرد.حال به چند مثال از این نوع تعریف دقت فرمایید:
>>> a = range(5)
>>> a
range(0, 5)
>>> a[0]
0
>>> a[2]
2
>>> a[4]
4
>>>a[5]
Traceback (most recent call last):
File "", line 1, in
IndexError: range object index out of range
>>> for i in range(20):
print(i, end=" ")
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
>>> for i in range(20):
print(i, end=" ")
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
تابع range با دو آرگومان (start, stop)range :
دومین روش برای فراخوانی با دو آرگومان می باشد، در این حالت آرگومان اول نشان دهنده نقطه شروع و دومین آرگومان نشان دهنده نقطه پایان خواهد بود، در این شرایط گام دنباله به صورت پیش فرض 1 در نظر گرفته خواهد شد.
>>> range(0, 6)
range(0, 6)
به چند مثال از این نوع تعریف دقت فرمایید:
>>> for i in range(1, 20):
print(i, end=" ")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
>>> for i in range(5, 20):
print(i, end=" ")
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
تابع range با سه آرگومان (start, stop, step)range :
در این حالت هر سه آرگومان باید توسط کاربر مشخص شوند، یعنی نقطه شروع، نقطه پایان و گام حرکت دنباله باید مقادیر مشخصی داشته باشند.
>>> range(0, 10, 2)
range(0, 10, 2)
به چند مثال از این نوع تعریف دقت فرمایید:
>>> for i in range(0, 30, 3):
print(i, end=" ")
0 3 6 9 12 15 18 21 24 27
>>> for i in range(0, 50, 5):
print(i, end=" ")
0 5 10 15 20 25 30 35 40 45
در تمام مثال هایی که تا کنون از آن ها استفاده کردیم همیشه گام حرکتی مثبت و رو به جلو بوده است، به عبارتی دیگر تا کنون ما همواره دنباله هایی صعودی را تولید کرده ایم، ممکن است این سوال برای شما به وجود آمده باشد آیا این امکان وجود دارد که ما دنباله ای نزولی داشته باشیم، پاسخ این سوال مثبت است، این قابلیت برای range ها وجود دارد که دنباله ای نزولی را نیز تولید کنند، حال به بررسی تولید انواع دنباله های صعودی و نزولی خواهیم پرداخت.
نکته: باید توجه داشت که دنباله، تا زمانی که کوچکتر از مقدار پایانی تایین شده باشد ادامه خواهد داشت.
استفاده با مشخص کردن بازه صعودی
همانطور که در مثال بالا نیز مشاهده کردید پایتون (Python) اجازه دسترسی به مقداری خارج از بازه تعریف شده توسط تابع range را به شما نخواهد داد. حال با مثالی که در آن گام حرکت مشخص شده است شما را با این موضوع بیشتر آشنا خواهیم کرد.
فرض کنید به دنبال تولید دنباله از اعداد بین 1 تا 10 با گام 2 هستیم :
[ 1 , 3 , 5 , 7 , 9 ]
>>> b = range(1, 10, 2)
>>> b
range(1, 10, 2)
>>> b[0]
1
>>> b[1]
3
>>> b[2]
5
>>> b[3]
7
>>> b[4]
9
استفاده با مشخص کردن بازه نزولی
فرض کنید میخواهیم دنباله قبل را به صورت صعودی تعریف کرده بودیم این بار به صورت نزورلی تولید کنیم. آیا این امکان در تابع range وجود دارد، پاسخ مثبت است به مثال زیر که یک دنباله به طول 5 می باشد توجه فرمایید:
[ 9 , 7 , 5 , 3 , 1 ]
>>> c = range(9, 1, -2)
>>> c
range(9, 1, -2)
>>> c[0]
9
>>> c[1]
7
>>> c[2]
5
>>> c[3]
3
>>> c[4]
1
>>> len(c)
5
همانطور که در مثال بالا مشاهده می کنید با منفی کردن مقدار گام می توانیم رو به عقب نیز حرکت کنیم. در این شرایط برای کاربرد صحیح باید حتمی مقدار شروع دنباله از پایان آن بزرگتر باشد تا گام منفی یا همان حرکت به عقب معنی پیدا کند. در صورتی که این نکته رعایت نشود یعنی مقدار شروع کوچکتر از پایان آن باشد دنباله هیچ مقداری را تولید نخواهد کرد، به مثال زیر توجه کنید:
>>> d = range(9, 1, 2)
>>> d
range(9, 1, 2)
>>> len(d)
0
استفاده برای بازه های اعشاری
سوالی که در این مرحله ذهن را مشغول می کند این است که آیا از تابع range برای تولید بازه های اعشاری نیز می توام استفاده کرد، برای پاسخ به این سوال مثال زیر را برای تولید یک بازه اعشاری مشاهده نمایید :
[ 1 , 1.5 , 2 , 2.5 , 3 , 3.5 , 4 ]
>>> e = range(1, 4.5, 0.5)
Traceback (most recent call last):
File "", line 1, in
TypeError: 'float' object cannot be interpreted as an integer
همانطور که مشاهده می کنید پاسخ منفی است، تابع range فقط برای تولید دنباله های صحیح کاربرد دارد و نمی توان با این تابع دنباله های اعشاری، رشته ای و یا هر نوع دیگری را تولید نمود.
استفاده در تعریف لیست
همان طور که می دانید اگر بخواهیم به صورت دستی یک لیست 50 تایی تولید کنیم کار بسیار سخت و زمان بری است، اما با کمک تابع range به راحتی می توان یک لیست 0 تا 50 تولید کرد. به مثال زیر توجه فرمایید:
>>> in_range = (1, 51)
>>> in_list = list(in_range)
>>> print(in_list)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
استفاده در حلقه ها
از تابع range می توان در حلقه ها نیز استفاده کرد، برای مثال کاربدی این تابع را در حلقه for در مثال زیر شرح می دهیم:
>>> for i in range(0, 10):
>>> print(i)
0
1
2
3
4
5
6
7
8
9
دیدگاهتان را بنویسید