بسیاری از محاسبات، با استفاده از پردازش تکتک کاراکترهای موجود در یک رشته صورت میپذیرد. اغلب از ابتدا آغاز میشود، هر کاراکتر را به صورت جداگانه انتخاب میکند، کاری بر روی آن انجام میدهد و به سراغ کاراکتر بعدی تا انتهای رشته میرود. به این الگوی پردازشی، «پیمایش» میگویند. یکی از راههای نوشتن یک پیمایش استفاده از حلقه while است:
1 2 3 4 5 |
index = 0 while index < len(fruit): letter = fruit[index] print(letter) index = index + 1 |
این حلقه، پیمایشی را در رشته آغاز کرده و هر حرف را به صورت مستقل در یک خط به نمایش میگذارد. شرطِ حلقه index < len(fruit) است، در نتیجه به محضی که index مساوی با طول رشته شد، شرط غلط از آب در آمده و بدنهی حلقه اجرا نخواهد شد. آخرین کاراکتری که عملیات در این حلقه بر روی آن انجام میشود، با شاخص len(fruit)-1 خواهد بود که خب آخرین کاراکتر رشته نیز محسوب میشود.
تمرین ۱: یک حلقه while بنویسید که از آخرین کاراکتر موجود در یک رشته شروع کرده و بالعکسِ حلقهی بالا، به سمت ابتدای حلقه حرکت کند و هر حرف را در یک خط جداگانه به مانند حلقهی بالا چاپ میکند. با این تفاوت که چاپ کردنِ حروف از حرف آخر شروع شود و به اول برسد.
یک راه دیگر برای نوشتن یک پیمایش استفاده از حلقه for است:
1 2 |
for char in fruit: print(char) |
هر باری که حلقه اجرا میشود، کاراکتر بعدی به متغیر char نسبت داده خواهد شد. این حلقه تا زمانی که کاراکتری باقی نمانده باشد، ادامه پیدا میکند.
قاچهایی از رشته
یک بخش از یک رشته را «قاچ» یا «قطعه» میگوییم. انتخاب یک قطعه از رشته، مشابه با انتخاب یک کاراکتر است. به مثال زیر نگاه کنید:
1 2 3 4 5 |
>>> s = 'Monty Python' >>> print(s[0:5]) Monty >>> print(s[6:12]) Python |
عملگر، قسمتی از رشته که از کاراکتر nام شروع شده و به کاراکتر mام میرسد را برمیگدارند. با این قاعده که حاصلْ شاملِ کاراکتر nام میشود، ولی شامل کاراکتر mام نخواهد شد.
اگر شما شاخص اول (قبل از دو نقطه) را از قلم بیندازید، قطعه از ابتدای رشته شروع خواهد شد. اگر شاخص دوم (بعد از دو نقطه) را از قلم بیندازید، قطعه تا پایان رشته خواهد بود:
1 2 3 4 5 |
>>> fruit = 'banana' >>> fruit[:3] 'ban' >>> fruit[3:] 'ana' |
اگر اولین شاخص، بزرگتر و یا برابر با شاخص دوم بود، حاصلْ یک رشتهی خالی میشود که با دو علامت نقل قول مشخص خواهد شد:
1 2 3 |
>>> fruit = 'banana' >>> fruit[3:3] '' |
یک رشتهی خالی، شامل هیچ کاراکتری نشده و طول آن 0 خواهد بود، ولی در سایر موارد شبیه به یک رشتهی معمولی میباشد.
تمرین ۲: فرض کنید که fruit یک رشته است. fruit[:] چه معنیای را میدهد؟
رشتهها قابل تغییر نیستند
شاید وسوسه شده باشید که با استفاده از عملگر گمارش (=) یک کاراکتر در رشته را درآورده و تغییر دهید. مثلا:
1 2 3 |
>>> greeting = 'Hello, world!' >>> greeting[0] = 'J' TypeError: 'str' object does not support item assignment |
آبجکت در این حالت یک رشته است و آیتم، کاراکتریست که شما میخواهید آن را به رشته اختصاص دهید. در اینجا آبجکت مثل یک مقدار است؛ ولی در آینده معنای دقیقتری از آن را برایتان خواهیم گفت. یک آیتم، یکی از مقادیر موجود در یک زنجیر به حساب میآید.
دلیل خطای مثال بالا، این است که رشتهها تغییر ناپذیرند، به این معنی که شما یک رشتهی موجود را نمیتوانید تغییر دهید. بهترین کاری که میتوانید انجام دهید، ساخت یک رشتهی جدید با استفاده از رشتهی قبلی و جایگزینی کاراکتر با بهرهگیری از شاخصهاست:
1 2 3 4 |
>>> greeting = 'Hello, world!' >>> new_greeting = 'J' + greeting[1:] >>> print(new_greeting) Jello, world! |
در این مثال ما حرف اول را با استفاده از قطعه کردن greeting و چسباندن یک کاراکتر به آن، تغییر دادیم. به یاد داشته باشید که رشتهی اصلی همان Hello, World سابق است.
حلقهزنی و شمارش
برنامهی زیر، تعداد دفعالتی که حرف a در رشته ظاهر شده را حساب میکند:
1 2 3 4 5 6 |
word = 'banana' count = 0 for letter in word: if letter == 'a': count = count + 1 print(count) |
در این برنامه ما الگوی دیگری از محاسبه، به اسم «شمارش» را به شما نشان دادیم. متغیر count با 0 مقداردهی اولیه شده و سپس هر بار که a در رشته پدیدار شد، یک عدد به آن اضافه گردید. زمانی که برنامه از حلقه خارج میشود، count حاوی نتیجهای از تعداد aهای موجود در رشته خواهد بود.
تمرین ۳: این کد را در تابعی به اسم count قرار دهید که دو آرگیومنت دریافت میکند. آرگیومنتها یکی رشته و دیگری حرفی که قرار است تعدادِ تکرارش را تابع پیدا کند و برگرداند.
این نوشته تحت مجوز کرییتیو کامنز BY – NC و حمایت موسسه تحقیقاتی رامونا ارائه میشود. شما میتوانید با توجه به مفاد این گواهی از آن استفاده کنید.