Pamphlet (Session02)

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

‫به نام خدایی که بیدریغ ستّار العیوب است‪...

‬‬

‫مؤلف‪ :‬سجّاد رحمانی‬

‫هرگونه کپی برداری غیرقانونی و حرام است و هیچ گونه رضایت مولف را در بر ندارد‬

‫فصل چهارم‬
‫لیست (‪)list‬‬

‫لیست دقیقاً همون چیزی است که در واقعیت ازش میشناسیم‪ .‬مثالً لیستی از اعداد زوج کمتر از ‪.10‬‬
‫]‪a=[2,4,6,8‬‬
‫نکته‪ :‬لیست میتواند شامل انواع و اقسام چیزها (‪ Boolean ،float ،integer ،string‬و ‪ )...‬باشد‪ .‬به مثال زیر‬
‫توجه کنید‪.‬‬
‫]‪b=[1,2,"Sajjad",True,2+5j‬‬
‫نکته‪ :‬برای تعریف لیست تهی به صورت زیر عمل میکنیم‪:‬‬
‫][=‪a‬‬
‫نکته‪ :‬در لیست ترتیب مهم است و تکرار نیز پذیرفته میشود‪.‬‬
‫نکته‪ :‬جمع کردن دو لیست‪ ،‬یعنی کنار هم قرار دادن آنها‪:‬‬
‫]‪a=[1,2,3‬‬
‫]"‪b=["A","B","C‬‬
‫)‪print(a+b‬‬
‫که خروجی میشه‪:‬‬
‫]'‪[1, 2, 3, 'A', 'B', 'C‬‬
‫توجه کنید که اگر همینو بجای ‪ a+b‬بنویسیم‪ ،b+a ،‬چون در ‪ list‬ترتیب مهمه‪ ،‬خروجی برعکس این مورد باال میشه و‬
‫اول لیست ‪ b‬نوشته خواهد شد و بعد لیست ‪.a‬‬
‫نکته‪ :‬اگر یک لیست رو در یک عدد ضرب کنیم‪ ،‬به همون اندازه تکرارش میکنه‪.‬‬
‫مثال‪:‬‬
‫]‪a=[1,2,3‬‬
‫)‪print(a*2‬‬
‫خروجی میشه‪:‬‬
‫]‪[1, 2, 3, 1, 2, 3‬‬
‫لیستهای تو در تو (‪)nested lists‬‬

‫یعنی شما می تونید داخل یک لیست‪ ،‬مجدداً لیست تعریف کنید! و داخل اون لیست داخلی هم باز مجدداً میتونید‬
‫لیست تعریف کنید و الی آخر‪...‬‬
‫]]]"‪a=["Sajjad",84,[2+6j,[2,4,5,"Koolac‬‬
‫دسترسی به مولفههای یک لیست‬

‫لیست زیر رو در نظر بگیرید‪:‬‬


‫]]]"‪a=["Sajjad",84,[2+6j,[2,4,5,"Koolac‬‬
‫می دونیم که پایتون اندیس گذاری رو از صفر شروع میکنه! پس اگر بخوایم مولفه صفرم این لیست (یعنی "‪)"Sajjad‬‬
‫رو فراخوانی کنیم‪ ،‬میگیم‪:‬‬
‫]‪a[0‬‬
‫حاال اگر بخوایم به اون مولفهای که ‪ highlight‬کردم اشاره کنیم میگیم‪:‬‬
‫]‪a[2][1‬‬
‫تذکر‪ :‬اگر بخوایم به مولفه آخر این لیست اشاره کنیم‪ ،‬میگیم‪:‬‬
‫]‪a[-1‬‬
‫که در واقع لیست زیر مولفه آخرش حساب میشه‪:‬‬
‫]]'‪[(2+6j), [2, 4, 5, 'Koolac‬‬
‫برش ردن (‪)slicing‬‬
‫اگر بگیم‪:‬‬
‫]]]"‪a=["Sajjad",84,[2+6j,[2,4,5,"Koolac‬‬
‫)]‪print(a[0:2‬‬
‫اون ]‪ a[0:2‬یعنی از اندیس صفرم تا اندیس یکم لیست ‪( .a‬توجه کنید که خود ‪ 2‬لحاظ نمیشه و یکی کمترش لحاظ‬
‫میشه‪ ).‬و این یعنی‪:‬‬
‫]‪['Sajjad', 84‬‬
‫اگر بخوایم بگیم از مولفه با اندیس ‪ 1‬تا آخر [هرچی که هست] میگیم‪:‬‬
‫)]‪print(a[1:‬‬
‫که خروجیش میشه‪:‬‬
‫]]]'‪[84, [(2+6j), [2, 4, 5, 'Koolac‬‬
‫اگر بخوایم بگیم از مولفه با اندیس ‪ 2‬به قبل‪ ،‬میگیم‪:‬‬
‫]]]"‪a=["Sajjad",84,[2+6j,[2,4,5,"Koolac‬‬
‫)]‪print(a[:3‬‬
‫شاید بپرسید پس چرا نوشتیم ‪3‬؟ مگه نگفتیم از اندیس ‪ 2‬به قبل؟ دوباره یادآوری میکنم‪ ،‬که این آخری رو لحاظ‬
‫نمیکنه و یکی کمترش رو حساب میکنه‪ .‬پس ما ‪ 3‬وارد میکنیم که یکی کمترش بشه ‪.2‬‬
‫خروجی این هم میشه‪:‬‬
‫]]]'‪['Sajjad', 84, [(2+6j), [2, 4, 5, 'Koolac‬‬
‫چالش‪ :‬اگر بگیم ]‪ a[0:500‬به نظرتون خطا میده؟ جواب اینه که خیر! پایتون به میزانی از شعور رسیده که میاد از اول‬
‫تا جایی که وجود داره رو بهمون نشون میده!‬
‫متدهای لیست‬

‫سه لیست زیر رو در نظر بگیرید‪:‬‬


‫]‪a=[1,4,3,2‬‬
‫]"‪b=["D","A","C","B‬‬
‫]"‪c=[1,"Sajjad",2,3,"A","A","A‬‬
‫متد ‪ :append‬میاد به لیست‪ ،‬مولفهای که میگیم رو اضافه میکنه‪.‬‬
‫مثال‪:‬‬
‫)"‪a.append("Sajjad‬‬
‫بعد از اینکار لیست ‪ a‬میشه‪:‬‬
‫]'‪[1, 4, 3, 2, 'Sajjad‬‬
‫با متد ‪ append‬نمیشه چندتا چیز اضافه کرد‪ ،‬ولی با متد ‪( extend‬متد بعدی) میشه!‬
‫متد ‪ :extend‬در قالب یک لیست میایم بهش میگیم چه چیز‪/‬چیزهایی رو به لیست اضافه کن‪.‬‬
‫)]‪a.extend([11,12,13‬‬
‫که خروجیش میشه‪:‬‬
‫]‪[1, 4, 3, 2, 11, 12, 13‬‬
‫لطفاً در قالب ‪ list‬مولفههایی که میخواید اضافه کنید رو بیان کنید‪ .‬اگر خدایی نکرده مثالً بگید‪:‬‬
‫)"‪a.extend("Sajjad‬‬
‫خروجی میشه‪:‬‬
‫]'‪[1, 4, 3, 2, 'S', 'a', 'j', 'j', 'a', 'd‬‬
‫و این اون چیزی نیست که شما میخواید‪.‬‬
‫متد ‪ :insert‬در یک اندیس خاص‪ ،‬مولفهای را درج میکند‪.‬‬
‫)"‪a.insert(1,"Sajjad‬‬
‫بهش داریم میگیم در اندیس ‪ ،1‬عبارت "‪ "Sajjad‬رو درج کن‪.‬‬
‫خروجی میشه‪:‬‬
‫]‪[1, 'Sajjad', 4, 3, 2‬‬
‫دستور ‪ :del‬این متد نیست!‬
‫میاد چیزی که بهش میگیم رو پاک میکنه‪.‬‬
‫]‪del a[0‬‬
‫مثالً اینجا میاد مولفه با اندیس صفر رو پاک میکنه و خروجی میشه‪:‬‬
‫]‪[4, 3, 2‬‬
‫متد ‪ :remove‬میاد چیزی که بهش میگیم رو پاک میکنه‪.‬‬
‫)"‪c.remove("Sajjad‬‬
‫که میاد اون "‪ "Sajjad‬رو از لیست ‪ c‬پاک میکنه و خروجی میشه‪:‬‬
‫]'‪[1, 2, 3, 'A', 'A', 'A‬‬
‫سوال‪ :‬اگر بگیم "‪ "A‬رو پاک کن‪ ،‬کدومو پاک میکنه؟ همشو یا اولینی که ببینه؟ جواب اینه که‪ :‬اولینی که ببینه‪.‬‬
‫متد ‪ :pop‬بهش شماره اندیس میدیم تا بیاد مولفه با اون اندیس رو پاک کنه‪.‬‬
‫)‪c.pop(1‬‬
‫مثالً اینجا میگیم مولفه با اندیس ‪ 1‬از لیست ‪ c‬رو پاک کن (یعنی همون ‪ Sajjad‬خودمون که اندیسش برابر ‪ 1‬است)‪.‬‬
‫نکته‪ :‬اگر به ‪ pop‬هیچ مولفه یا آرگومانی ندید‪ ،‬میاد آخرین مولفه لیست رو پاک میکنه‪.‬‬
‫تذکر‪ :‬اگر بیاید چیزی بجز شماره اندیس به ‪ pop‬بدید‪ ،‬قطعاً بهتون خطا میده‪ ،‬مثالً اگر عبارت زیر رو بنویسید‪ ،‬قطعاً‬
‫بهتون خطا میده‪:‬‬
‫)"‪c.pop("Sajjad‬‬
‫متد ‪ :index‬میاد شماره اندیس رو برمیگردونه‪.‬‬
‫) )"‪print( c.index("Sajjad‬‬
‫یعنی بهش داریم میگیم بیا شماره اندیس "‪ "Sajjad‬رو در لیست ‪ c‬بهمون بگو‪ .‬که خروجی میده‪1 :‬‬
‫نکته‪ :‬اگر چندتا چیز وجود داشته باشه (مثل لیست ‪ c‬که چند تا "‪ "A‬وجود داره) و بخوایم اندیس این بنده خدا رو‬
‫فراخوانی کنیم‪ ،‬اندیس اولینش رو میاد خروجی میده‪.‬‬
‫متد ‪ :count‬میاد میشماره ببینه اون چیزی که بهش میدیم چندبار تکرار شده‪ .‬مثالً عبارت زیر میاد نگاه میکنه تا ببینه‬
‫"‪ "A‬چندبار در لیست ‪ c‬اومده‪.‬‬
‫) )"‪print( c.count("A‬‬
‫که طبیعتاً خروجی میده‪3 :‬‬
‫متد ‪ :sort‬میاد یک لیست رو به صورت صعودی مرتب میکنه‪.‬‬
‫)(‪a.sort‬‬
‫)‪print(a‬‬
‫خروجی‪:‬‬
‫]‪[1, 2, 3, 4‬‬
‫متد ‪ :reverse‬میاد یک لیست رو چپه میکنه‪ .‬یعنی مثالً لیست ]‪ [1,2,3‬رو تبدیل میکنه به ]‪.[3,2,1‬‬
‫)(‪c.reverse‬‬
‫)‪print(c‬‬
‫خروجی‪:‬‬
‫]‪['A', 'A', 'A', 3, 2, 'Sajjad', 1‬‬
‫تمرین‪ :‬به هر ضرب و زوووری که شده‪ ،‬لیست ‪ a‬که در زیر تعریف شده است رو نزولی مرتب کنید‪.‬‬
‫]‪a=[1,4,3,2‬‬
‫جواب‪:‬‬
‫)(‪a.sort‬‬
‫)(‪a.reverse‬‬
‫)‪print(a‬‬
‫خروجی‪:‬‬
‫]‪[4, 3, 2, 1‬‬
‫تابع ‪ :len‬این متد نیست‪ ،‬تابعه! کارش هم اینه که تعداد مولفههای یک لیست رو بر میگردونه‪( .‬البته صرفاً برای‬
‫لیست استفاده نمیشه و بعداً میخونیم و میبینیم که برای چیزهای دیگه هم استفاده میشه)‬
‫) )‪print( len(c‬‬
‫خروجی‪7 :‬‬
‫تاپل (‪)tuple‬‬

‫مثالً چیزی که در خط زیر نوشتیم‪ ،‬یک تاپل است‪.‬‬


‫)‪a=(1,2,3‬‬
‫تذکر‪ :‬نشووونه تاپل ‪ ,‬است و نه اون پرانتزها‪ .‬میگید نه بیاید اصالً پرانتز نذاریم و بعد ‪ type‬اِش رو فراخوانی کنیم‪.‬‬
‫‪a=1,2,3‬‬
‫)‪print(a‬‬
‫))‪print(type(a‬‬
‫خروجی‪:‬‬
‫)‪(1, 2, 3‬‬
‫>'‪<class 'tuple‬‬
‫برای تعریف تاپل تک عضوی به صورت زیر عمل میکنیم‪:‬‬
‫‪a=1,‬‬
‫یا به صورت زیر‪:‬‬
‫)‪a=(1,‬‬
‫خالصه اینکه ‪( comma‬یعنی همین ‪ ),‬نشووونه تاپل است و نه پرانتز‪ .‬اما به صورت سنتی مرسوم است که پرانتز هم‬
‫گذاشته بشه‪.‬‬
‫نکته‪ :‬توی یک تاپل هم میتونه انواع و اقسام چیزها وجود داشته باشه‪:‬‬
‫)"‪a=(1,True,7+5j,[1,2,3],"www.Koolac.Org‬‬
‫نکته‪ :‬دقیقاً مشابه لیستها‪ ،‬میتونیم تاپلهای تو در تو تعریف کنیم‪:‬‬
‫))‪a=(1,True,7+5j,[1,2,3],"www.Koolac.Org",(4,(5,6),6‬‬
‫نکته‪ :‬دسترسی به مولفهها هم دقیقاً مثل لیست است‪.‬‬
‫))‪a=(1,True,7+5j,[1,2,3],"www.Koolac.Org",(4,(5,6),6‬‬
‫مثالً در لیست باال‪ ،‬اون چیزی که ‪ highlight‬کردیم‪ ،‬به صورت زیر باید بهش دسترسی پیداکنیم‪:‬‬
‫]‪a[5][1‬‬
‫یا‪:‬‬
‫]‪a[-1][1‬‬
‫تابع ‪ :tuple‬میاد چیزی که بهش میدیم رو به تاپل تبدیل میکنه‪.‬‬
‫))‪a=tuple(range(5‬‬
‫)‪print(a‬‬
‫خروجی‪:‬‬
‫)‪(0, 1, 2, 3, 4‬‬
‫نکته‪ :‬تاپل یک ساختار داده تغییر ناپذیر است‪ .‬یعنی نمیشه بهش مولفه اضافه کرد‪ ،‬ازش مولفه کم کرد‪ ،‬مولفهای ازش‬
‫رو بروزرسانی کرد و ‪!...‬‬
‫مثالً میدونیم توی لیست (چون یک ساختارداده تغییر پذیر است) میشه گفت‪:‬‬
‫]‪a=[1,2,3‬‬
‫"‪a[0]="Sajjad‬‬
‫اما اگر همینو در مورد تاپل بگیم‪:‬‬
‫)‪a=(1,2,3‬‬
‫"‪a[0]="Sajjad‬‬
‫بهمووون خطا میده‪.‬‬
‫متدهای تاپل‬

‫تاپل زیر رو در نظر بگیرید‪:‬‬


‫)"‪a=("A",47,"www.Koolac.Org","A",True,"A‬‬
‫متد ‪ :index‬میاد اندیس اون چیزی که ما بهش میگیم رو خروجی میده‪.‬‬
‫(‪print‬‬ ‫)"‪a.index("www.Koolac.Org‬‬ ‫)‬
‫خروجی‪ :‬چون اندیس "‪ "www.Koolac.Org‬برابر ‪ 2‬است‪ ،‬خروجی قطعاً برابر ‪ 2‬خواهد بود‪.‬‬
‫متد ‪ :count‬میاد میشماره ببینه مولفهای که ما بهش میگیم‪ ،‬چندبار تکرار شده‪:‬‬
‫(‪print‬‬ ‫)"‪a.count("A‬‬ ‫)‬
‫خروجی‪ :‬چون "‪ 3 "A‬بار تکرار شده‪ ،‬خروجی ‪ 3‬خواهد بود‪.‬‬

‫فصل چهارم‬
‫دیکشنری‬

‫مثالی از تعریف یک دیکشنری را در نظر بگیرید‪:‬‬

‫}‪a={"name":"Sajjad","age":10‬‬
‫این دیکشنری را به صورت زیر نیز میتوان نوشت [برای خوانایی بیشتر]‪:‬‬

‫{=‪a‬‬
‫‪"name":"Sajjad",‬‬
‫‪"age":10‬‬
‫}‬
‫درواقع پایتون به اون فاصلههایی که میذاریم حساس نیست!‬
‫چرا بهش میگین دیکشنری؟ چون شبیه ‪ dictionary‬خودمون در دنیای واقعی است‪ .‬یک لغت‬
‫وجود داره و متناظراً براش یک معنی وجود داره!‬

‫{=‪b‬‬
‫‪",‬پاککن" ‪"eraser" :‬‬
‫"‪"pen‬‬ ‫"خودکار" ‪:‬‬
‫}‬
‫فقط اینجا (یعنی در پایتون) دیگه نمیگیم لغت و معنی‪ .‬بلکه میگیم ‪( key‬یا اندیس) و ‪value‬‬
‫(مقدار)‬

‫مثالً در دیکشنری ‪ a‬داریم‪:‬‬

‫"‪ "name‬و "‪"age‬‬ ‫‪( key‬یا اندیس) ←‬


‫"‪ "Sajjad‬و ‪10‬‬ ‫‪( value‬یا مقدار) ←‬
‫تذکر‪ :‬در زبان انگلیسی معنی کلمه ‪ key‬برابر است با کلید‪.‬‬

‫توجه‪( key :‬یا اندیس) میتونه عدد‪ string ،‬و ‪ tuple‬باشه و از طرفی ‪( value‬یا مقدار) میتونه‬
‫عدد‪ tuple ،string ،‬و ‪ list‬باشه‪.‬‬

‫مثال‪ :‬یک مثال دیگر از تعریف دیکشنری را در نظر بگیرید‪:‬‬

‫{=‪c‬‬
‫‪1‬‬ ‫‪:‬‬ ‫‪"Koolac",‬‬
‫"‪"x‬‬ ‫‪:‬‬ ‫‪[1,2,3],‬‬
‫"‪"y‬‬ ‫‪:‬‬ ‫‪(4,7,10),‬‬
‫)‪(1,2‬‬ ‫‪:‬‬ ‫"‪"apple‬‬
‫}‬
‫دیکشنریهای تو در تو‬

‫مانند ساختار دادههای قبلی‪ ،‬شما میتونید دیکشنریهای تو در تو (‪)nested dictionaries‬‬


‫داشته باشید‪.‬‬

‫{=‪a‬‬
‫{ ‪"Sajjad Rahmani" :‬‬ ‫‪"Math":15,‬‬ ‫‪"English":10‬‬ ‫‪},‬‬
‫"‪"Milad Rangi‬‬ ‫{ ‪:‬‬ ‫‪"Math":20,‬‬ ‫‪"English":19‬‬ ‫}‬
‫}‬
‫پس میبینیم که ‪( value‬یا مقدار) دیکشنری هم میتونه باشه‪ ،‬که در این صورت دیکشنریهای تو در‬
‫تو خواهیم داشت‪.‬‬

‫دسترسی به مولفههای یک دیکشنری‬

‫مثال ‪ :1‬دیکشنری زیر رو در نظر بگیرید‪:‬‬


‫{=‪a‬‬
‫{ ‪"Sajjad Rahmani" :‬‬ ‫‪"Math":15,‬‬ ‫‪"English":10‬‬ ‫‪},‬‬
‫"‪"Milad Rangi‬‬ ‫{ ‪:‬‬ ‫‪"Math":20,‬‬ ‫‪"English":19‬‬ ‫}‬
‫}‬
‫فرض کنید میخوایم به نمره ریاضیِ ‪ Sajjad Rahmani‬دسترسی پیدا کنیم‪ .‬در این صورت میگیم‪:‬‬

‫(‪print‬‬ ‫]"‪a["Sajjad Rahmani"]["Math‬‬ ‫)‬


‫و مثالً برای دسترسی به نمره زبانِ ‪ Milad Rangi‬باید بگیم‪:‬‬

‫(‪print‬‬ ‫]"‪a["Milad Rangi"]["English‬‬ ‫)‬


‫مثال ‪ :2‬دیکشنری زیر رو در نظر بگیرید‪.‬‬

‫{=‪b‬‬
‫‪1‬‬ ‫‪:‬‬ ‫‪"Koolac",‬‬
‫"‪"x‬‬ ‫‪:‬‬ ‫‪[1,2,3],‬‬
‫"‪"y‬‬ ‫‪:‬‬ ‫‪(4,7,10),‬‬
‫)‪(1,2‬‬ ‫‪:‬‬ ‫"‪"apple‬‬
‫}‬
‫به ترتیب برای دسترسی به هر کدام از مولفهها داریم‪:‬‬

‫نحوه دسترسی به مولفه‬ ‫مولفه‬


‫(‪print‬‬ ‫]‪b[1‬‬ ‫)‬ ‫"‪"Koolac‬‬
‫(‪print‬‬ ‫]"‪b["x‬‬ ‫)‬ ‫]‪[1,2,3‬‬
‫(‪print‬‬ ‫]"‪b["y‬‬ ‫)‬ ‫)‪(4,7,10‬‬
‫(‪print‬‬ ‫])‪b[(1,2‬‬ ‫)‬ ‫"‪"apple‬‬
‫بروزرسانی و اضافهکردن مولفه به دیکشنری‬

‫دیکشنریهای زیر رو در نظر بگیرید‪:‬‬

‫{=‪a‬‬
‫‪1‬‬ ‫‪:‬‬ ‫‪"Koolac",‬‬
‫"‪"x‬‬ ‫‪:‬‬ ‫‪[1,2,3],‬‬
‫"‪"y‬‬ ‫‪:‬‬ ‫‪(4,7,10),‬‬
‫)‪(1,2‬‬ ‫‪:‬‬ ‫"‪"apple‬‬
‫}‬
‫{=‪b‬‬
‫{ ‪"Sajjad Rahmani" :‬‬ ‫‪"Math":15,‬‬ ‫‪"English":10‬‬ ‫‪},‬‬
‫"‪"Milad Rangi‬‬ ‫{ ‪:‬‬ ‫‪"Math":20,‬‬ ‫‪"English":19‬‬ ‫}‬
‫}‬

‫بروزرسانی‬

‫[مربوط به دیکنشری ‪ ]a‬فرض کنید میخوایم مقدارِ متناظر با اندیس ‪ 1‬رو از "‪ "Koolac‬به‬
‫"‪ "Koolac.Org‬عوض کنیم‪ ،‬در این صورت داریم‪:‬‬

‫"‪a[1]="Koolac.Org‬‬
‫[مربوط به دیکنشری ‪ ]b‬فرض کنید میخوایم نمره درس زبان سجّاد رحمانی رو از ‪ 10‬به ‪ 17‬عوض‬
‫کنیم‪ ،‬در این صورت داریم‪:‬‬

‫‪b["Sajjad Rahmani"]["English"]=17‬‬
‫اضافه کردن مولفه‬

‫[مربوط به دیکنشری ‪ ]a‬فرض کنید میخوایم مولفهای با اندیس ‪ 2‬و با مقدار "‪ "Sajjad‬اضافه کنیم‪،‬‬
‫در این صورت داریم‪:‬‬

‫"‪a[2]="Sajjad‬‬
‫[مربوط به دیکنشری ‪ ]b‬فرض کنید میخوایم نمرات دانشآموز دیگری با نام "محمّد امین احمدی" با‬
‫نمرات ریاضی‪ 20:‬و زبان‪ 20:‬رو اضافه کنیم‪ ،‬در این صورت داریم‪:‬‬

‫{=]"‪b["Mohammad Amin Ahmadi‬‬ ‫‪"Math":20,‬‬ ‫‪"English":20‬‬ ‫}‬

‫متدهای دیکشنری‬

‫دیکشنری زیر رو در نظر بگیرید‪:‬‬

‫{=‪a‬‬
‫‪1‬‬ ‫‪:‬‬ ‫‪"Koolac",‬‬
‫"‪"x‬‬ ‫‪:‬‬ ‫‪[1,2,3],‬‬
‫"‪"y‬‬ ‫‪:‬‬ ‫‪(4,7,10),‬‬
‫)‪(1,2‬‬ ‫‪:‬‬ ‫"‪"apple‬‬
‫}‬
‫متد ‪ : keys‬اندیسهای یک دیکشنری را میدهد‪.‬‬

‫))(‪print(a.keys‬‬
‫خروجی‪:‬‬

‫)])‪dict_keys([1, 'x', 'y', (1, 2‬‬

‫متد ‪ : values‬مقادیر (‪value‬های) یک دیکشنری را میدهد‪.‬‬

‫))(‪print(a.values‬‬
‫خروجی‪:‬‬

‫)]'‪dict_values(['Koolac', [1, 2, 3], (4, 7, 10), 'apple‬‬

‫متد ‪ : items‬میاد در قالب لیستی شامل تاپلهایی به صورت (مقدار ‪ ,‬اندیس) همهی اندیسها و‬
‫مقادیر دیکشنری را خروجی میدهد‪:‬‬
‫))(‪print(a.items‬‬
‫خروجی‪:‬‬

‫)])'‪dict_items([(1, 'Koolac'), ('x', [1, 2, 3]), ('y', (4, 7, 10)), ((1, 2), 'apple‬‬

‫متد ‪ : clear‬دیکشنری را خالی از مولفه میکند‪.‬‬

‫)(‪a.clear‬‬
‫)‪print(a‬‬
‫خروجی‪[ :‬یک دیکشنری تهی که به صورت زیر نمایش داده میشود]‬

‫}{‬

‫نکته‪ :‬یک دیکشنری تهی به صورت {} نمایش داده میشود‪.‬‬

‫متد ‪ : get‬اندیس (‪ )key‬را از ما دریافت میکند و مقدار (‪ )value‬آن را خروجی میدهد‪.‬‬

‫)"‪print( a.get("x‬‬ ‫)‬


‫خروجی‪:‬‬

‫]‪[1, 2, 3‬‬

‫متد ‪ : pop‬برای پاککردن مولفهای با اندیس (‪ )key‬خاص کاربرد دارد‪.‬‬

‫)"‪a.pop("x‬‬
‫)‪print(a‬‬
‫خروجی‪:‬‬

‫}'‪{1: 'Koolac', 'y': (4, 7, 10), (1, 2): 'apple‬‬

‫‪set‬‬

‫مثال زیر از تعریف یک ‪ set‬را در نظر بگیرید‪:‬‬

‫})‪a={1,"Sajjad",3,(54,58‬‬
‫)‪print(a‬‬
‫))‪print(type(a‬‬
‫خروجی‪:‬‬

‫}'‪{(54, 58), 1, 3, 'Sajjad‬‬


‫>'‪<class 'set‬‬
‫‪ -‬شاید بپرسید‪ :‬اِع! {} که عالمت دیکشنری بود! چی شد پس؟ ‪ set‬رو هم که داریم با {} تعریف‬
‫میکنیم که!‬

‫جواب‪ :‬در اصل عالمت دیکشنری {} و اووون ‪ :‬است‪[ .‬البته بجز دیکشنری تهی که {} است]‬

‫‪ -‬احتماالً میپرسید چرا توی خروجی‪ ،‬ترتیب مولفهها رعایت نشده و دقیقاً به همون شکلی که وارد‬
‫کردیم در خروجی چاپ نشده؟‬

‫جواب‪ set :‬هیچ اندیسی ندارد! (نه اندیسهایی که پایتون به صورت پیشفرض تعریف میکرد و مثالً‬
‫از صفر شروع میشد و نه اندیسهای خودساخته! [اگر یادتون باشه توی دیکشنری‪ ،‬اندیسهای پایتونی‬
‫نداشتیم‪ ،‬اما اندیسهای خودساخته داشتیم! ولی اینجا خبری از اندیسهای خودساخته هم نیست!])‪.‬‬
‫چون ‪ set‬هیچ اندیسی ندارد‪ ،‬پس ترتیبی هم قائل نیست! و هر دفعه ترتیب رو به صورت تصادفی‬
‫میچینه! (یعنی ممکنه دفعه بعدی‪ ،‬اون ‪ tuple‬رو بندازه آخر!)‬

‫نکته‪ :‬در داخل یک ‪ set‬میتوان عدد‪ string ،‬و تاپل تعریف کرد‪.‬‬

‫سوال‪ :‬آیا میتوان داخل ‪ ،set‬لیست قرار داد؟ خیر! دیکشنری چطور؟ بازهم خیر!‬

‫سوال‪ :‬آیا میتوان داخل ‪ ،set‬یک ‪ set‬دیگه تعریف کرد و عمالً ‪ set‬تو در تو ساخت؟ بازهم خیر!‬

‫یک سری نکات تکمیلی در مورد ‪set‬‬

‫نکته‪ set :‬مشاهدات تکراری را لحاظ نمیکند‪.‬‬

‫}‪a={1,2,2,2,3,3,3,4‬‬
‫)‪print(a‬‬
‫خروجی‪[ :‬همانطور که مشاهده میکنید‪ ،‬تکراریها رو فقط یکبار چاپ میکند]‬

‫}‪{1, 2, 3, 4‬‬

‫یادآوری‪ :‬دیکشنری تهی را به صورت {} تعریف میکردیم‪.‬‬

‫نکته‪ :‬برای تعریف ‪ set‬تهی به صورت زیر عمل میکنیم‪.‬‬

‫)(‪a=set‬‬

‫نکته‪ :‬تابع ‪ ،set‬ورودی داده شده را به ‪ set‬تبدیل میکند [البته اگر ممکن باشه!]‪.‬‬
‫مثال [تبدیل ‪ list‬به ‪:]set‬‬

‫]‪a=[1,2,3‬‬
‫)‪b=set(a‬‬
‫)‪print(b‬‬
‫خروجی‪:‬‬

‫}‪{1, 2, 3‬‬

‫مثال [تبدیل ‪ tuple‬به ‪:]set‬‬

‫)‪a=("Sajjad",2,3‬‬
‫)‪b=set(a‬‬
‫)‪print(b‬‬
‫خروجی‪:‬‬

‫}'‪{2, 3, 'Sajjad‬‬

‫متدهای ‪( set‬بخش اوّل)‬

‫‪ set‬زیر رو در نظر بگیرید‪:‬‬

‫}‪a={1,2,3,4,10‬‬
‫متد ‪ : add‬میاد یک مولفه رو اضافه میکنه‪.‬‬

‫)"‪a.add("A‬‬
‫)‪print(a‬‬
‫خروجی‪:‬‬

‫}‪{1, 2, 3, 4, 'A', 10‬‬

‫متد ‪ : remove‬میاد یک مولفه رو پاک میکنه‪.‬‬

‫)‪a.remove(10‬‬
‫)‪print(a‬‬
‫نکته‪ :‬اگر به متد ‪ ،remove‬مولفهای که وجود نداره رو بدیم‪ ،‬خطا میده‪.‬‬

‫متد ‪ : discard‬میاد یک مولفه رو پاک میکنه‪.‬‬

‫)‪a.discard(10‬‬
‫)‪print(a‬‬
‫نکته‪ :‬اگر به متد ‪ ،discard‬مولفهای که وجود نداره رو بدیم‪ ،‬خطا نمیده و خیلی جدیمووون نمیگیره!‬

‫متد ‪ : clear‬میاد ‪ set‬رو خالی از مولفه میکنه‪.‬‬


‫)(‪a.clear‬‬
‫)‪print(a‬‬
‫خروجی‪:‬‬

‫)(‪set‬‬

‫متدهای ‪( set‬بخش دوّم)‬

‫‪set‬های زیر رو در نظر بگیرید‪:‬‬

‫}‪a={1,2,3,4‬‬
‫}‪b={3,4,5,6‬‬
‫}‪c={1,2,3,4,5,6‬‬
‫}‪d={10,11‬‬
‫متد ‪ : isdisjoint‬میاد چک میکنه که آیا این حرف درسته که بگیم دو مجموعه کامالً از هم مجزا‬
‫هستن و هیچ عضو مشترکی باهم ندارن؟ (اگر این حرف درست باشه‪ ،‬میگه ‪ ،True‬اگر این حرف‬
‫غلط باشه‪ ،‬میگه ‪)False‬؟‬

‫مثالً قبول دارید که مجموعه ‪ a‬و ‪ d‬کامالً از هم مجزا هستن و هیچ عضو مشترکی ندارن؟ [باید بگید‬
‫آره قبول دارم!] پس این که بگیم دو مجموعه ‪ a‬و ‪ d‬هیچ عضو مشترکی ندارن‪ ،‬حرف درستی است‬
‫(پس باید ‪ True‬بده)‪:‬‬

‫))‪print(a.isdisjoint(d‬‬
‫خروجی‪:‬‬

‫‪True‬‬

‫ولی قبول دارید که مجموعه ‪ a‬و ‪ c‬باهم عضو مشترک دارن؟ [بله! مثالً ‪1‬و‪2‬و‪3‬و‪ 4‬بین این دو مجموعه‬
‫یکسانه!] پس این حرف که بگیم‪ :‬دومجموعه ‪ a‬و ‪ c‬از هم کامالً مجزا هستن و هیچ عضو مشترکی باهم‬
‫ندارن غلطه! (یعنی ‪)False‬‬

‫))‪print(a.isdisjoint(c‬‬
‫خروجی‪:‬‬

‫‪False‬‬

‫متد ‪ : issubset‬چک میکنه که آیا یک مجموعه‪ ،‬زیر مجموعه دیگری هست یا نه؟‬

‫یادآوری از ریاضیات [زیرمجموعه]‪ :‬مجموعه ‪ a‬زیرمجموعه ‪ b‬است‪ ،‬اگر همهی اعضای ‪ a‬در ‪b‬‬
‫باشد‪[ .‬در زبان انگلیسی به زیرمجموعه میگن ‪]subset‬‬
‫فرض کنید میخوایم چک کنیم که آیا مجموعه ‪ a‬زیرمجموعهی مجموعۀ ‪ c‬هست یا نه؟ [میدونیم که‬
‫جواب بله است]‬

‫(‪print‬‬ ‫)‪a.issubset(c‬‬ ‫)‬


‫خروجی‪:‬‬

‫‪True‬‬

‫متد ‪ :issuperset‬چک میکنه که آیا یک مجموعه‪ ،‬مجموعه باالدستی دیگری هست یا نه؟‬

‫یادآوری از ریاضیات [مجموعه باالدستی]‪ :‬مجموعه ‪ a‬باالدستی ‪ b‬است‪ ،‬اگر همهی اعضای ‪ b‬را در‬
‫خودش داشته باشد‪[ .‬در زبان انگلیسی به مجموعه باالدستی میگن ‪]superset‬‬

‫فرض کنید میخوایم ببینیم آیا ‪ a‬مجموعه باالدستی ‪ c‬هست یا خیر؟ [میدونیم که جواب خیر است]‬

‫(‪print‬‬ ‫)‪a.issuperset(c‬‬ ‫)‬


‫خروجی‪:‬‬

‫‪False‬‬

‫متد ‪ :union‬میاد اجتماع مجموعهها رو حساب میکنه‪.‬‬

‫به عنوان مثال میدونیم اجتماع ‪ a‬و ‪ b‬میشه }‪ .{1,2,3,4,5,6‬حاال میخوایم ببینیم آیا پایتون هم‬
‫همینو میفهمه یا نه؟‬

‫(‪print‬‬ ‫)‪a.union(b‬‬ ‫)‬


‫خروجی‪:‬‬

‫}‪{1, 2, 3, 4, 5, 6‬‬

‫متد ‪ :intersection‬میاد اشتراک مجموعهها رو حساب میکنه‪.‬‬

‫به عنوان مثال میدونیم اشتراک ‪ a‬و ‪ b‬میشه }‪ .{3,4‬حاال میخوایم ببینیم آیا پایتون هم همینو میفهمه‬
‫یا نه؟‬

‫(‪print‬‬ ‫)‪a.intersection(b‬‬ ‫)‬


‫خروجی‪:‬‬

‫}‪{3, 4‬‬
‫متد ‪ :symmetric_difference‬میاد تفاضل متقارن مجموعهها رو حساب میکنه‪.‬‬

‫یادآوری از ریاضیات [تفاضل متقارن]‪ :‬تفاضل متقارن دو مجموعه‪ ،‬مجموعهای از اعضای آنهاست‬
‫به گونهای که آن اعضا در یکی از دو مجموعه هست و در اشتراک آن دو وجود ندارد‪( .‬به زبووون‬
‫خودمونی‪ :‬منحصر به فردهای هر مجموعه رو جدا میکنه! نه اونایی که توی دوتاشووون هست!)‬

‫به عنوان مثال میدونیم تفاضل متقارن ‪ a‬و ‪ b‬میشه }‪ .{1,2,5,6‬حاال میخوایم ببینیم آیا پایتون هم‬
‫همینو میفهمه یا نه؟‬

‫(‪print‬‬ ‫)‪a.symmetric_difference(b‬‬ ‫)‬


‫خروجی‪:‬‬

‫}‪{1, 2, 5, 6‬‬

‫رشتهها ‪strings‬‬

‫قبالً هم میدونستیم که نوع متغیر زیر ‪ string‬است و اینو از قبل میدونستیم که چجوری ‪string‬‬
‫تعریف میکنن‪.‬‬

‫"‪a="Sajjad Rahmani‬‬
‫دسترسی به مولفه‪:‬‬

‫فرضکنید میخوایم به آخرین مولفه از رشتهی ‪( Sajjad Rahmani‬آخرین مولفهش میشه ‪ )i‬دسترسی‬
‫پیدا کنیم‪ .‬در این صورت داریم‪:‬‬

‫"‪a="Sajjad Rahmani‬‬
‫)]‪print(a[-1‬‬
‫برای دسترسی پیدا کردن به ‪( ajj‬مولفههایی با اندیس ‪ 1‬تا ‪ )3‬باید بگیم‪:‬‬

‫"‪a="Sajjad Rahmani‬‬
‫)]‪print(a[1:4‬‬
‫اگر دوباره دارید میپرسید که چرا میگیم ‪ 1‬تا ‪ 3‬و مینویسیم ‪ 1‬تا ‪ ،4‬مشخصه که مباحث قبلی رو‬
‫درست نخوندید! چون چندین هزار بار [!] تا االن روی این موضوع تاکید کردیم که اون ‪ 4‬آخر رو لحاظ‬
‫نمیکنه و یکی کمترش رو لحاظ میکنه!‬

‫نکته‪ :‬رشته (‪ )string‬هم ساختاردادهای تغییر ناپذیر است! یعنی نمیتونیم به عنوان مثال بگیم‪:‬‬

‫"‪a[0]="R‬‬
‫نکته‪ :‬عملگر ‪ +‬در مورد ‪string‬ها میاد اونها رو بهم میچسبونه و میذاره کنار هم!‬

‫"‪a="Sajjad‬‬
‫"‪b="Rahmani‬‬
‫)‪print(a+b‬‬
‫خروجی‪:‬‬

‫‪SajjadRahmani‬‬

‫اگر بخوایم بین ‪ Sajjad‬و ‪ Rahmani‬فاصله بذاریم‪ ،‬میتونیم بگیم‪:‬‬

‫)‪print(a+" "+b‬‬
‫نکته‪ :‬عملگر * در مورد ‪string‬ها میاد اون ‪ string‬رو به تعدادی که اون ‪ string‬رو دَرِش ضرب‬
‫میکنیم‪ ،‬تکرار میکنه‪.‬‬

‫مثالً‪:‬‬

‫"‪a="Sajjad‬‬
‫)‪print(a*3‬‬
‫میاد ‪ 3‬بار ‪ Sajjad‬رو تکرار میکنه و خروجی میشه‪:‬‬

‫‪SajjadSajjadSajjad‬‬

‫متدهای ‪string‬‬

‫متد ‪ :upper‬حروف رو به ‪( upper case‬یعنی حروف بزرگ) تبدیل میکنه‪.‬‬

‫"‪a="SajjadRahmani‬‬
‫))(‪print(a.upper‬‬
‫خروجی‪:‬‬

‫‪SAJJADRAHMANI‬‬

‫متد ‪ :lower‬حروف رو به ‪( lower case‬یعنی حروف کوچیک) تبدیل میکنه‪.‬‬


‫"‪a="SajjadRahmani‬‬
‫))(‪print(a.lower‬‬
‫خروجی‪:‬‬

‫‪sajjadrahmani‬‬

‫متد ‪ :find‬میاد اندیس مولفهای که بهش میدیم رو بر میگردونه‪.‬‬

‫"‪a="SajjadRahmani‬‬
‫))"‪print(a.find("S‬‬
‫خروجی‪0 :‬‬

‫نکته‪ :‬اگر چیزی که وارد میکنید وجود نداشته باشه‪ ،‬عدد ‪ -1‬رو خروجی میده‪.‬‬

‫"‪a="SajjadRahmani‬‬
‫))"‪print(a.find("s‬‬
‫خروجی‪[ :‬توجه کنید که ‪ S‬داریم‪ ،‬ولی ‪ s‬نداریم]‬

‫‪-1‬‬

‫نکته‪ :‬اگر چیزی که وارد میکنیم چندتا اَزَش وجود داشته باشه (مثل ‪ j‬در عبارت باال)‪ ،‬اندیس اولین‬
‫چیزی که میبینه رو اعالم میکنه!‬

‫"‪a="SajjadRahmani‬‬
‫))"‪print(a.find("j‬‬
‫خروجی‪:‬‬

‫‪2‬‬

‫این فایلها صرفاً برای خریدار این آموزشها تهیهشدهاست و هرگونه کپی برداری‪ ،‬به اشتراکگذاری و ‪ ...‬این فایلها‬
‫غیرقانونی و حرام است و هیچ گونه رضایت مولف را در بر ندارد‪.‬‬

You might also like