آموزش پایتون python قسمت هفتم

1395/1/12 پوریا جهانبخش 3491

سلام. پوریا جهانبخش هستم و با قسمت هفتم از سری آموزش های پایتون از 0 تا 100 در خدمتتون هستم.

دوستان برای بار چندم تاکید میکنم که اگر مطالب قبلی رو خوب یاد نگرفتید برگردید به عقب و دوباره بخونید و تمرین کنید تا حتما یاد بگیرید و بعدش سراغ قسمت های جدید بیاید.
در این قسمت قصد دارم مفهوم حلقه ها در پایتون رو بهتون آموزش بدم.
به طرز ساده اگه بخوام تعریفش کنم به عملیاتی گفته میشه که تکرار میشه اما این تکرار قوائدی هم داره.

برای مثال فرض کنید بخوایم اعداد بین 1 تا 5 رو به توان 2 برسونیم و چاپ کنیم. برنامه بدون حلقه ی این الگوریتم میشه:

 print(1**2)
 print(2**2)
 print(3**2)
 print(4**2)

اما شاید بخوایم این عمل رو برای یک میلیون عدد (یا بیشتر) انجام بدیم.

این یکی از مواردیه که حلقه ها به دادمون میرسن.

پایتون 3 مدل حلقه داره.
1. حلقه while
2. حلقه for
3. حلقه توابع بازگشتی
با تشریح حلقه ی while شروع میکنم.

این حلقه یک شرط لازم داره و همچنین یک بدنه شامل دستورات پایتون هم داره.
تا زمانی که شرط حلقه برقرار باشه ( مقدار شرط True یا عددی به جز 0 باشه ) دستورات داخل بدنه ی شرط انجام میشن.

به مثال ساده ی زیر دقت کنید:

> > > test = 1
> > > while test < 5:
                print(test)
                test = test + 1

1
2
3
4
> > >

 

به دقت این توضیحات رو بخونید.

 

اولا که بعد از دستور while که باید تماما به حروف کوچک لاتین بنویسینش با رعایت یک فاصله یا space باید شرط مورد نظر رو بنویسید.

دوما دستور while چون آخرش (یعنی بعد از شرط) دو نقطه داره و بدنه داره، بدنه ی دستور نسبت به دستور تو رفتگی داره که باید رعایت کنید.

سوما test = test + 1:
تو این عبارت  test سمت چپ مساوی، یه متغیر جدیده که قراره با مقدار سمت راست ساخته بشه.
اما test سمت راست مساوی، متغیری هست که از قبل وجود داره.

پس اینجا test شد مقدار test قبلی، به علاوه ی یک. یعنی یه دونه بهش اضافه شد.

حالا توضیح نحوه عملکرد حلقه.

اول از همه شرط مورد بررسی قرار میگیره و مقدار test از 5 کوچک تره و شرط برقراره، چون شرط برقراره وارد بدنه ی حلقه میشه و test رو چاپ میکنه و یه دونه به test اضافه میکنه.
دوباره به بالای حلقه برمیگرده و شرط رو بررسی میکنه  ( اصلا واسه همین بهش میگن حلقه)، اینبار مقدار test عدد 2 هستش چون تو دور اول حلقه یکی بهش اضافه شد ولی چون 2 هم از 5 کوچکتره باز هم شرط برقراره و دوباره بدنه حلقه رو انجام میده، تو دور بعد بعد از چاپ مقدار test باز یکی بهش اضافه میکنه.
این کار رو مجددا و مجددا انجام میده تا اونجا که یه دونه به test اضافه میکنه و مقدار test برابر با 5 میشه.
اینجا وقتی میره بالای حلقه تا شرط رو بررسی کنه دیگه 5 از 5 کوچکتر نیست و شرط برقرار نیست و به همین علت از حلقه خارج میشه.
حالا همون مثال توان دوم اعداد بین 1 و 5 رو مینویسیم.

به این قسمت توجه کنید

موقع نوشتن حلقه به این موارد باید توجه کنید:
بازه ی شما از کجا شروع میشه؟ ( مثلا تو این مثال از 1 شروع میشه)
بازه ی شما کجا تموم میشه؟ (مثلا اینجا به 5 که برسیم تموم میشه)
و به دنبال یک راه حل باشید که بتونید در بدنه ی حلقه بازه رو از ابتدا به انتها برسونید ( مثل اینجا که من تو هر دور از حلقه میخوام یه عدد جلوتر برم تا به 5 برسم و بازه تموم بشه)

number = 1
while number < 5:
        print(number**2)
        number = number + 1


همونطور که دیدید ما نیاز داریم تا با استفاده از عملیات داخل بدنه ی حلقه شرط حلقه رو بشکنیم تا اجرای حلقه خاتمه پیدا کنه. و اگر این کار رو نکنید برنامتون وارد یک حلقه ی بی پایان میشه.
حلقه ای که تا ابد میچرخه

البته بعضی وقتها لازمه. مثلا سرور های اینترنتی یک حلقه ی اصلی دارن که اون داخل بدنه ی خودش به درخواست کاربران جواب میده و بعد از هر جواب به ابتدای حلقه میره و منتظر درخواست جدید میمونه !
بهتره قبل از رفتن به سراغ برنامه بعدی
شمارو با یه تابع توکار دیگه آشنا کنم.
همونطور که قبلا با ()print آشنا شدید.

len("string")

این تابع تعداد حروف رشته ای رو که بهش میدین بهتون بر میگردونه.
میتونین مستقیم خود رشته رو بهش بدین یا اینکه رشته رو تو یه متغیر ذخیره کنید و متغیر رو بهش بدین.
خروجی این تابع یه عدده از ساختار داده ای int یا اعداد صحیح که قبلا باش آشنا شدین.
برای مثال:

> > > len("persian")
7
> > > test = "developers"
> > > number = len(test)
> > > number
10
> > >

نگران تعریف دقیق تابع و نحوه ی ساختنش نباشید. به اونجا هم میرسیم!
باید حواستون باشه که زمان برش از رشته ها باید عدد اول رو از 0 شروع کنید ولی تابع ()len این کار رو نمیکنه و تعداد حروف رو از 1 حساب میکنه.
حالا میخوام یه حلقه بنویسم که تو هر خط هر حرف از رشته "puriya" رو چاپ کنه.

قبل از هر چیز راه حلمو توضیح میدم.
میخوام با استفاده از برش از رشته ها این کار رو انجام بدم. یعنی اول [0]"puriya" رو چاپ کنم و بعد [1]"puriya" رو و بعد ... .

خوب بازه ی من اینجا میشه اعداد بین 0 تا 6 (که 6 جزوش نیست)
چون قراره در بدنه ی حلقه هر بار یکی به 0 اضافه کنم پس باید قبل از ورود به حلقه مقدار دهیش کنم.

index = 0
while index < 6:
        print("puriya"[index])
        index = index + 1

خروجی:

p
u
r
i
y
a

 

خوب چرا من قبلش ()len رو توضیح دادم؟
اینجا ما عدد 6 رو که در شرط حلقه نوشتیم از کجا آوردیم؟
خوب مجبور بودیم تعداد حروف رشته که "puriya" بود رو بشماریم.
حالا اگر رشته ما خیلی طولانی بود و یا اصلا نمیدونستیم چند حرف داره؟ خوب با استفاده از ()len دیگه کارمون آسونه.

 

اینم ورژن جدیدش:

index = 0
while number < len("puriya"):
        print("puriya"[index])
        index = index + 1

همچنین تو این برنامه ما داریم دو بار از رشته "puriya" استفاده میکنیم.
بهتره هروقت دیدیم قراره در برنامه چند بار از یک چیز استفاده کنیم، برای راحتی کار اون رو به یه متغیر نسبت بدیم و از متغیر استفاده کنیم:

ورژن آخر:

name = "puriya"
index = 0

while index < len(name):
        print(name[index])
        index = index + 1

 


برای این جلسه یادگیری کافیه.
حالا با استفاده از عکس یک نمونه حلقه با دستور while مثال میزنم.

 

آموزش پایتون


ساختار شرطی هارو در فصل های قبل یاد گرفتید.
در این حلقه در بدنه ی حلقه بررسی میشه که اگر باقیمانده تقسیم عدد بر 2 برابر است با 0، پس عدد زوج هست و عدد رو چاپ میکنیم.
تعریف دستور while به همین جا ختم نمیشه، بلکه هنوز ادامه داره، ولی بهتر میدونم بقیش رو وقتی بگم که مفهوم حلقه رو به درستی درک کرده باشید !

از این قسمت به بعد کم کم مباحث (برای صفر کیلومتر ها) یه ذره سخت میشه !
پس بهترین راه برای غلبه به این سختی تمرینه.

مثلا با وجود این آموزش ها، شما الان باید بتونید حلقه ای بنویسید که حروف یک رشته رو از آخر به اول در هر خط چاپ کنه ! کار سختی نیست فقط یه ذره فکر میخواد.

جلسه اول هم گفتم فقط 50% دانش برنامه نویسی به درد شما میخوره. 50% دیگه که شمارو تو برنامه نویسی 100% میکنه، هوش شما در نحوه ی به کار گیریه دانشتونه !