0% found this document useful (0 votes)
4 views85 pages

Demo v2

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views85 pages

Demo v2

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 85

‫فصل دوم‪ :‬مبانی و دستور نحو‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :1‬مفهوم ‪ syntax‬و سطرها‬

‫‪ :Syntax‬به مجموعه قواعد و دستورات نگارشی یک زبان گفته میشود‪.‬‬

‫‪ :Physical row‬سطر فیزیکی که با عدد نمایش داده میشود‪.‬‬

‫‪ :Logical row‬آنچه مفسر تحت عنوان بک سطر قبول دارد (سطر منطقی)‪.‬‬

‫* زمانی که دو متغیر را در یک خط مینویسیم گذاشتن سمیکالن ( ; ) الزامی است‪.‬‬


‫‪f = 5; m = 7‬‬

‫* زمانی که میخواهیم یک خط کد منطقی را در یک خط فیزیکی دیگر قرار دهیم گذاشتن بک اسلش ( \ ) الزامی است‪.‬‬
‫\ '‪f = 'hello‬‬
‫'‪'guys‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :2‬کامنت (‪ )Comment‬و داک استرینگ (‪)Doc string‬‬

‫* قوانین ‪ pep8‬توصیه میکند که پس از کامنت یک خط فاصله گذاشته شود‪.‬‬

‫* از ‪ #‬برای کامنت کردن استفاده میکنیم‪ ،‬کامنت توسط مفسر نادیده گرفته میشود‪.‬‬
‫‪# this is a comment‬‬

‫* از ‪ Docstring‬در ابتدای یک تابع و یا کالس برای توضیح دادن استفاده میشود‪ ،‬توسط مفسر نادیده گرفته میشود‪.‬‬
‫"""‪"""This is a docstring‬‬
‫''' ‪''' This is a docstring‬‬

‫* در پایتون کتیشن ( ‘ ) و دابل کتیشن ( “ ) فرقی ندارند‪.‬‬

‫* کامنت برای خود برنامه نویس است‪.‬‬

‫* داک استرینگ برای کاربری است که استفاده میکند‪.‬‬

‫* داک استرینگ برای توابع و کالسهاست‪.‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ : 3‬تورفتگی و بالک بندی‬

‫* برای تو رفتگی باید از ‪ 4‬فاصله استفاده شود و بهتر است از ‪ Tab‬استفاده نشود‪ ،‬مگر اینکه کدها از شخص دیگریست و او از تب استفاده کرده‬
‫است‪.‬‬
‫‪x = 0‬‬
‫‪if x == 0:‬‬
‫)'‪print('x‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ : 4‬آشنایی با ورودی و خروجی‬

‫* برای نمایش اطالعات از دستور ‪ print‬استفاده میکنیم‪.‬‬


‫‪print('hi') # -> hi‬‬

‫* برای نوشتن رشتهها از کتیشن ( ‘ ) یا دابل کتیشن ( “ ) استفاده میکنیم و گذاشتن آن الزامی است‪.‬‬
‫'‪s = 's‬‬
‫"‪x = "s‬‬

‫* برای جدا سازی در ‪ print‬از دستور ‪ sep‬استفاده میکنیم‪.‬‬


‫)'*'=‪print('ali', 'reza', sep‬‬ ‫‪# -> ali*reza‬‬

‫* برای مشخص کردن پایان دستور در ‪ print‬از ‪ end‬استفاده میکنیم‪.‬‬

‫)'*'=‪print('ali', 'reza', end‬‬ ‫*‪# -> ali reza‬‬

‫* برای گرفتن ورودی از کاربر از دستور ‪ input‬استفاده میکنیم‪.‬‬


‫)' ‪s = input('x:‬‬
‫)‪print(s‬‬

‫* برای رفتن به خط بعدی در ‪ print‬از ”‪ “\n‬استفاده میکنیم‪.‬‬

‫)'‪print('This is an example', '\n', 'for print‬‬


‫)'‪print(20 * '-‬‬
‫)"‪print("This is an example\nfor print‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :5‬متغیر(‪)variable‬‬

‫‪ : str‬کلمهها‪ ،‬متن و ‪...‬‬

‫‪False،True : bool‬‬

‫‪ : int‬اعداد صحیح‬

‫* در پایتون نیاز به مشخص کردن نوع متغیر نیست‪.‬‬

‫* متغیرها در واقع مکانهایی از حافظه هستندکه نوعی داده خاص را در خود ذخیره میکنند‪.‬‬

‫* برای مشخص کردن آدرس داده در حافظه از دستور ‪ id‬استفاده میکنیم‪.‬‬


‫‪a = 5‬‬
‫))‪print(id(a‬‬ ‫‪# -> 140705652073384‬‬

‫* برای پاک کردن یک متغیر از دستور ‪ del‬استفاده میکنیم‪.‬‬


‫‪a = 5‬‬
‫‪del a‬‬
‫)‪print(a‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :6‬شناسه(‪)identifier‬‬

‫* به اسامی که برای متغیر و اشیای دیگر تعریف میکنیم شناسه (‪ )identifier‬گفته میشود‪.‬‬

‫* در مثال زیر ‪ MyClass‬و ‪ a‬شناسه هستند‪.‬‬


‫‪a = 5‬‬

‫‪class MyClass:‬‬
‫‪pass‬‬

‫* شناسهی یک متغیر فقط میتواند با یکی از حروف انگلیسی (‪ )a-z, A-Z‬و یا با ‪ ) _ ( underscore‬شروع شود‪.‬‬
‫‪_a = 4‬‬ ‫‪‬‬ ‫‪#a = 3‬‬ ‫‪‬‬
‫‪ab2 = 6‬‬ ‫‪‬‬ ‫‪2a = 5‬‬ ‫‪‬‬

‫* پایتون ‪ case sensitive‬است پس ‪ a‬با ‪ A‬فرق دارد‪.‬‬

‫* برای طول یک شناسه هیچ محدودیتی وجود ندارد‪.‬‬

‫* در شناسه از کاراکترهای خاص نمیشود استفاده کرد (فاصله‪ # ،% ،! ،$ ،‬و ‪)...‬‬


‫* بهتر است برای شروع شناسه از ( _ ) استفاده نکنیم زیرا جز شناسههای خصوصی ماژول و کالس میباشند‪.‬‬

‫شناسه خصوصی ماژول‪ :‬شروع با ( _ ) = ‪_Ali‬‬

‫شناسه خصوصی کالس‪ :‬شروع با ( __ ) = ‪__Ali‬‬

‫* در پایتون از شناسه های از پیش تعریف شده پایتون نمیشود استفاده کرد‪.‬‬
‫‪def = 5‬‬

‫* بهتر است از ‪( l‬ال کوچک) و ‪( I‬آی بزرگ) استفاده نشود زیرا در بعضی ‪ IDE‬ها مثل هماند‪.‬‬

‫* بهتر است کالس ها پاسکال کیس (‪ )Pascal Case‬نام گذاری شوند‪( .‬اول هر کلمه حرف بزرگ)‪.‬‬

‫‪class MyClass:‬‬
‫‪pass‬‬

‫* برای توابع‪ ،‬متدها و متغیرها بهتر است از حروف کوچک انگلیسی استفاده شود و با ( _ ) کلمات مختلف جدا شوند‪.‬‬
‫‪binary_search = 4‬‬

‫‪def func():‬‬
‫‪...‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :7‬کلمات کلیدی‬

‫* از کلمات کلیدی (کلماتی که مختص پایتون است) نباید بهعنوان شناسه استفاده کرد‪.‬‬
‫‪if = 4‬‬

‫* برای نمایش کلمات کلیدی میتوان از دستور ‪ help‬استفاده کرد‪.‬‬


‫)'‪help('keywords‬‬
‫* برای استفاده از کلمات کلیدی میشود آنها را تغییر داد ولی بهتر است این کار را نکنیم و از کلمات دیگر استفاده کنیم‪.‬‬
‫‪def_ = 5‬‬
‫‪Def = 5‬‬

‫* برای اینکه مشخص کنیم کلمه کلیدی هست یا نه ابتدا کتابخانه ‪ keyword‬را فرا میخوانیم و سپس از ‪ iskeyword‬استفاده‬
‫میکنیم‪.‬‬
‫‪import keyword‬‬

‫‪print(keyword.iskeyword('def')) # -> True‬‬


‫‪print(keyword.iskeyword('string')) # -> False‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :8‬عملگرهای حسابی‬

‫باقیمانده‪% :‬‬ ‫توان‪** :‬‬ ‫جمع‪+ :‬‬ ‫تفریق‪- :‬‬ ‫ضرب‪* :‬‬

‫تقسیم بدون قسمت اعشار‪// :‬‬ ‫تقسیم‪/ :‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :9‬عملگرهای مقایسه ای‬

‫* از این عملگرها بیشتر در شرطها‪ ،‬حلقهها و ‪ ...‬استفاده میشود‪.‬‬

‫* نتیجه این عملگرها یا ‪ True‬میباشد و یا ‪.False‬‬

‫عملگر == ‪ :‬مقایسه انجام میدهد که آیا دو مقدار دو متغیر برابرند یا خیر‪ .‬این عملگر با مساوی ( = ) تفاوت دارد‪.‬‬

‫‪x = 5‬‬
‫)‪print(x == 4‬‬ ‫‪# -> False‬‬
‫)‪print(x == 5‬‬ ‫‪# -> True‬‬

‫عملگر =! (نامساوی) ‪ :‬برعکس == می باشد‪.‬‬

‫‪x = 5‬‬
‫‪print(x != 4) #-> True‬‬
‫‪print(x != 5) #-> False‬‬

‫عملگر >< (کوچکتر بزرگتر) ‪:‬‬

‫‪x = 5‬‬
‫)‪print(3 > 4‬‬ ‫‪# -> True‬‬
‫)‪print(3 < 5‬‬ ‫‪# -> False‬‬
‫عملگر => (بزرگتر مساوی) ‪:‬‬

‫‪x = 5‬‬
‫)‪print(3 >= 4‬‬ ‫‪# -> False‬‬
‫)‪print(6 >= 5‬‬ ‫‪# -> True‬‬
‫)‪print(5 >= 5‬‬ ‫‪# -> True‬‬

‫عملگر =< (کوچکتر مساوی) ‪:‬‬

‫‪x = 5‬‬
‫)‪print(3 <= 4‬‬ ‫‪# -> True‬‬
‫)‪print(6 <= 5‬‬ ‫‪# -> False‬‬
‫)‪print(5 <= 5‬‬ ‫‪# -> True‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :10‬عملگرهای انتساب‬

‫عملگر = (مساوی) ‪ :‬نسبت دادن دو عملوند چپ و راست به هم‪.‬‬

‫‪x = 5‬‬
‫‪y = x‬‬
‫‪z = 2 + 6‬‬
‫‪print(x) # -> 5‬‬
‫‪print(y) # -> 5‬‬
‫‪print(z) # -> 8‬‬

‫عملگر =‪ : +‬ابتدا جمع و سپس مقداردهی به عملوند سمت چپ‪.‬‬

‫* عملگرهای =<<‪ += ,-= ,*= ,/= ,%= ,//= ,**= ,\= ,&= ,^= , >>= ,‬نیز به همین صورت عمل میکنند‪.‬‬
‫‪x = 6‬‬
‫‪x += 2‬‬ ‫‪# -> x = x + 2 -> x = 6 + 2 -> 8‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :11‬عملگرهای منطقی‬

‫* عمده کاربرد این عملگرها در عبارتهای شرطی و حلقههاست و برای بررسی همزمان دو یا چند شرط با یکدیگر استفاده میشوند و نتیجه‬
‫این عملگرها یا ‪ True‬است یا ‪.False‬‬

‫عملگر ‪َ ( and‬و )‪ :‬باید همه شرطها درست باشند تا نتیجه ‪ True‬باشد‪.‬‬

‫‪x = 4‬‬
‫‪y = 5‬‬

‫)‪print(x < 5 and y > 4‬‬ ‫‪# -> True‬‬


‫)‪print(x < 5 and y < 5‬‬ ‫‪# -> False‬‬
‫عملگر ‪ ( or‬یا )‪ :‬فقط یکی از شرطها درست باشد کافیست تا نتیجه ‪ True‬باشد‪.‬‬

‫‪x = 4‬‬
‫‪y = 5‬‬

‫)‪print(x < 5 or y < 5‬‬ ‫‪# -> True‬‬


‫)‪print(x > 5 or y < 5‬‬ ‫‪# -> False‬‬

‫عملگر ‪ ( not‬برعکس)‪ :‬باید شرط غلط باشد تا نتیجه ‪ True‬باشد‪.‬‬

‫‪x = 4‬‬
‫‪y = 5‬‬

‫))‪print(not (x < 3‬‬ ‫‪# -> True‬‬


‫))‪print(not (x > 3‬‬ ‫‪# -> False‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :12‬عملگرهای عضویت‬

‫* برای تست عضویت استفاده میشوند (آیا چیزی داخل چیزی میباشد؟) و نتیجه این عملگرها یا ‪ True‬است یا ‪.False‬‬

‫عملگر ‪ : in‬اگر عضو باشد نتیجه ‪ True‬است‪.‬‬

‫عملگر ‪ : not in‬اگر عضو نباشد نتیجه ‪ True‬است‪.‬‬

‫]'‪d = [1, 2, 3, 9, 'm‬‬


‫‪print(3 in d) # -> True‬‬
‫‪print('z' not in d) # -> False‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :13‬عملگرهای هویت‬

‫* برای بررسی بودن یکی بودن دوتا شی استفاده میشود و با برابری متفاوت است‪ ،‬مثالً دوتا هزارتومانی برابرند ولی یکسان نیستند‪.‬‬

‫عملگر ‪ : is‬اگریکی باشند نتیجه ‪ True‬است‪.‬‬

‫عملگر ‪ : is not‬اگر یکی نباشد نتیجه ‪ True‬است‪.‬‬

‫‪x = 5‬‬
‫‪y = 5‬‬
‫‪z = 7‬‬
‫‪print(x is y) # -> True‬‬
‫‪print(x is not z) # -> True‬‬

‫* لیستها با مقادیر یکسان در خانههای متفاوتی از حافظه ذخیره میشوند‪ ،‬پس یکی نیستند‪.‬‬
‫]‪x = [1, 2, 4‬‬
‫]‪y = [1, 2, 4‬‬
‫‪print(x is y) # -> False‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :14‬عملگرهای بیتی‬

‫* این عملگرها روی بیتها کار میکنند‪.‬‬

‫* به مکانهایی در حافظه که فقط مقدار ‪ 0‬و ‪ 1‬میگیرند را بیت میگویند‪.‬‬


‫‪ 0‬یا ‪1‬‬ ‫بیت‬

‫* هشت بیت = ‪ ۱‬بایت‬

‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬

‫* برای تبدیل عدد باینری به دسیمال از روش زیر استفاده میکنیم‪.‬‬

‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪2^7‬‬ ‫‪+ 2^6‬‬ ‫‪+‬‬ ‫‪2^5 +‬‬ ‫‪2^4 +‬‬ ‫‪2^3 +‬‬ ‫‪2^2 +‬‬ ‫‪2^1 + 2^0‬‬
‫‪0‬‬ ‫‪+‬‬ ‫‪64‬‬ ‫‪+‬‬ ‫‪0‬‬ ‫‪+‬‬ ‫‪0‬‬ ‫‪+‬‬ ‫‪8‬‬ ‫‪+‬‬ ‫‪0‬‬ ‫‪+‬‬ ‫‪0‬‬ ‫‪+‬‬ ‫‪1 = 73‬‬

‫* در پایتون میتوانیم عدد را بهصورت باینری بنویسیم‪ ،‬به اینصورت که قبل از آن باید ‪ 0b‬گذاشت‪.‬‬
‫‪x = 0b000111‬‬

‫* برای اینکه مشخص کنیم باینری یک عدد چیست از تابع ‪ bin‬استفاده میکنیم‪.‬‬
‫))‪print(bin(5‬‬ ‫‪# -> 0b101‬‬

‫* عملگر & (‪ :)and‬اگر هردو بیت یک باشند‪ ،‬یک بیت تعیین میکند‪.‬‬

‫‪x = 3‬‬ ‫‪# 0b011‬‬


‫‪y = 4‬‬ ‫‪# 0b100‬‬
‫‪# x & y = 0b000‬‬
‫‪print(x & y) # -> 0‬‬

‫‪x = 11‬‬ ‫‪#‬‬ ‫‪0b1011‬‬


‫‪y = 13‬‬ ‫‪#‬‬ ‫‪0b1101‬‬
‫‪# x & y‬‬ ‫=‬ ‫‪0b1001‬‬
‫‪print(x‬‬ ‫&‬ ‫‪y) # -> 9‬‬

‫* عملگر | (‪ :)or‬اگر حداقل یک بیت یک باشد‪ ،‬یک بیت تعیین میکند‪.‬‬

‫‪x = 50‬‬ ‫‪#‬‬ ‫‪0b110010‬‬


‫‪y = 29‬‬ ‫‪#‬‬ ‫‪ob011101‬‬
‫‪# x | y‬‬ ‫=‬ ‫‪0b111111‬‬
‫‪print(x‬‬ ‫|‬ ‫‪y) # -> 63‬‬
‫* عملگر ^ (‪ :)xor‬درصورتیکه فقط یکی از بیتها یک باشد‪ ،‬یک بیت تعیین میکند‪.‬‬

‫‪x = 50‬‬ ‫‪#‬‬ ‫‪0b110010‬‬


‫‪y = 29‬‬ ‫‪#‬‬ ‫‪ob011101‬‬
‫‪# x ^ y‬‬ ‫=‬ ‫‪0b101111‬‬
‫‪print(x‬‬ ‫^‬ ‫‪y) # -> 47‬‬

‫* عملگر << (‪ :)shift to left‬به سمت چپ هل (شیفت) میدهد‪.‬‬

‫‪x = 5‬‬ ‫‪# 0b00000101‬‬


‫‪y = 4‬‬
‫‪# x << y = 0b01010000‬‬
‫‪print(x << y) # -> 80‬‬

‫* راه حل ذهنی‪x * (2 ** y) :‬‬

‫‪print(5 << 4) #-> 5 * (2 ** 4) = 80‬‬

‫* عملگر >> (‪ :)shift to right‬به سمت راست هل (شیفت) میدهد‪.‬‬

‫‪x = 15‬‬ ‫‪# 0b1111‬‬


‫‪y = 2‬‬
‫‪# x >> y = 0b0011‬‬
‫‪print(x >> y) # -> 3‬‬

‫* راه حل ذهنی‪x // (2 ** y) :‬‬

‫‪print(15 >> 2) #-> 15 // (2 ** 2) = 3‬‬

‫* عملگر ~ (‪ :)Not‬همهی بیتها را برعکس میکند و مشخص میکند عدد بهدست آمده منفی چه عددی است‪.‬‬

‫روشهای رایج منفی ساز‪:‬‬

‫‪ ‬نمایش مقدار عالمت‪ :‬اولین عدد از چپ را بهعنوان عالمت در نظر میگیرد (‪ 1‬منفی است)‪.‬‬
‫‪ ‬روش متمم یک‪ :‬همهی صفرها به یک و همهی یکها به صفر تبدیل میشوند‪.‬‬
‫‪ ‬روش متمم دو‪ :‬همهی اعداد را برعکس میکند ولی از سمت راست تا اولین ‪ 1‬نباید تغییر داد و بقیه را برعکس کرد‪ ،‬منفی عدد بهدست‬
‫آمده پاسخ است‪.‬‬
‫‪print(~9) -> -10‬‬
‫‪# 9‬‬ ‫>‪-‬‬ ‫‪00001001‬‬
‫>‪ -‬برعکس ‪#‬‬ ‫‪11110110‬‬
‫‪ -> 00001010 -> 10 -> -10‬روش متمم دو ‪#‬‬

‫* راه حل ذهنی‪- x - 1 :‬‬

‫‪print(~9) # -> - 9 - 1 = -10‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :15‬عملگر والروس‬

‫* این عملگر همزمان مقدار دهی میکند و در شرطها‪ ،‬لیست و حلقهها کاربرد دارد‪.‬‬
‫‪print(x := 5) # -> 5‬‬

‫)‪print(x = 5‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :16‬اولویت عملگرها‬

‫)‪) -> (*, /, %‬مثبت و منفی( ‪() -> f() -> [index:index] -> [] -> ** -> ~ -> + -‬‬

‫‪) -> (<< , >>) -> & -> ^ -> | -> (in, not in, is, is not, <,‬جمع و تفریق( ‪-> + -‬‬
‫‪<=, >, >=, ==, !=) -> not -> and -> or -> lambda‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :17‬عبارات و دستورات‬

‫* عبارت (‪ :)expression‬حداقل یک مقدار برای تولید میکند و باید ارزیابی شود و یک نتیجه میدهد‪ ،‬معموال چیزی تولید میکند‬
‫(شناسه‪ ،‬لیترال (مقداری که به متغیر میدهیم)‪ ،‬عملگرهای حسابی و ‪.)...‬‬
‫‪x + 7 * 9‬‬

‫* دستور (‪ :)statement‬از عبارتها و کلمات کلیدی تشکیل میشود و یک وظیفهی خاص را انجام میدهد و نیاز نیست ارزیابی شوند و‬
‫میتوانند چیزی تولید نکنند‪ ،‬دو نوع دستور ساده و مرکب داریم‪.‬‬

‫* دستورات ساده در یک سطر منطقی پیاده سازی میشوند‪.‬‬


‫)(‪print‬‬

‫* دستورات مرکب معموالً با یک کلمهی کلیدی شروع میشوند و با دو نقطه (‪ ):‬تمام میشوند و در ادامه بدنه نوشته میشود و طبق قواعد‬
‫فرورفتگی بدنه باید جلوتر باشد‪.‬‬

‫* دستور یک بخشی مرکب‪:‬‬


‫‪def f():‬‬
‫‪pass‬‬

‫* دستور چند بخشی مرکب‪:‬‬


‫‪if x > 4:‬‬
‫)'‪print('bigger‬‬
‫‪elif x == 4:‬‬
‫)"‪print("even‬‬
‫‪else:‬‬
‫)"‪print("smaller‬‬
‫* عبارت را میشود به متغیر اختصاص داد و پرینت کرد‪.‬‬
‫‪x = 2 + 3‬‬
‫‪print(x) # -> 5‬‬

‫* دستور را نمیشود به متغیر داد و نمیشود پرینت کرد‪.‬‬


‫‪x = if‬‬
‫)‪print(if‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :18‬مروری بر مفاهیم شیگرایی‪ ،‬متدها و صفتها‬

‫شی‪ :‬یک نمونه (‪ )instance‬از یک کالس است‪.‬‬

‫متد (‪ )method‬در شی گرایی‪ :‬انجام دادن یک وظیفهی خاص را برعهده دارد‪.‬‬

‫کالس (‪ )class‬در شی گرایی‪ :‬برنامهی ما از یک سری واحدها تشکیل میشود به نام کالس که هرکدام یک از این کالسها تعدادی متد‬
‫دارد که وظیفهی خاصی انجام می دهند‪.‬‬

‫* ‪ class‬همان طرح و نقشه است‪.‬‬

‫وراثت در شی گرایی‪ :‬ایجاد یک کالس جدید با ویژگیهای کالس قبلی و دارا بودن قابلیتهای جدید را وراثت در شی گرایی گویند‪.‬‬

‫* از روی یک کالس میشود به تعداد دلخواه شی ساخت‪.‬‬

‫* هریک از این شیها میتواند خصوصیت داشته باشد‪.‬‬

‫* متدها رفتار را نشان میدهند‪.‬‬

‫* خصوصیت ها توصیف میکنند‪.‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ : 19‬قوانین نگارشی (‪ )pep8‬و ذن پایتون (‪)pep20‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :20‬تکالیف مبحث مبانی و دستور نحو‬

‫‪ .1‬دو متغیر ‪ x‬و ‪ y‬را تعریف کنید و به آنها مقادیری اختصاص دهید‪ .‬سپس‪ ،‬مقادیر ‪ x‬و ‪ y‬را بدون استفاده از متغیر سوم عوض‬
‫کنید‪.‬‬

‫‪ .2‬برنامهای بنویسید تا مساحت یک مستطیل را با استفاده از متغیرها محاسبه کند‪ .‬طول و عرض را در متغیرها ذخیره کنید‪.‬‬
‫سپس مساحت را محاسبه و چاپ کنید‪.‬‬

‫‪ .3‬برنامهای ایجاد کنید که دما را از سانتیگراد به فارنهایت تبدیل کند‪ .‬دما را بر حسب سانتیگراد در یک متغیر ذخیره کنید‪،‬‬
‫تبدیل را انجام دهید و نتیجه را چاپ کنیدو‬

‫‪ .4‬مساحت و محیط دایره را محاسبه کنید‪ .‬شعاع را در یک متغیر ذخیره کنید و سپس مساحت و محیط را محاسبه و چاپ کنید‪.‬‬

‫‪ .5‬برنامهای بسازید که مجموع‪ ،‬تفاوت‪ ،‬حاصلضرب و توان دو عدد را محاسبه کند‪ .‬دو متغیر ‪ x‬و ‪ y‬را تعریف کنید‪ ،‬آنها را در‬
‫متغیرها ذخیره کنید‪ ،‬محاسبات را انجام دهید و نتایج را چاپ کنید‪.‬‬

‫‪ .6‬برنامهای بسازید که میانگین سه عدد را محاسبه کند‪ .‬سه متغیر ‪ y ،x‬و ‪ z‬را تعریف کنید‪ ،‬آنها را متغیرها ذخیره کنید‪،‬‬
‫میانگین را محاسبه کنید و نتیجه را چاپ کنید‪.‬‬

‫‪ .7‬یک برنامه پایتون بنویسید تا مساحت یک مثلث را با توجه به قاعده و ارتفاع آن محاسبه کند‪ .‬قاعده و ارتفاع را در دو متغیر‬
‫ذخیره کنید‪ ،‬مساحت را محاسبه کنید و نتیجه را چاپ کنید‪.‬‬

‫‪ .8‬یک متغیر ایجاد کنید و سن خود را در آن بنویسید‪ .‬سالی که در آن ‪ 100‬ساله خواهید شد را محاسبه کنید و نتیجه را چاپ‬
‫کنید‪.‬‬

‫‪ .9‬نام متغیرها را در قطعه کد داده شده را مطابق با قراردادهای نامگذاری ‪ pep 8‬تغییر دهید‪:‬‬

‫‪num1 = 42‬‬
‫‪Num2 = 13‬‬
‫‪ReSuLt = num1 Num2‬‬
‫)‪print(ReSuLt‬‬

‫ــــــــــــــــــــــــــــــــــــــــ پایان فصل دوم ـــــــــــــــــــــــــــــــــــــــــ‬


‫فصل سوم‪ :‬انواع داده (سطح یک)‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :1‬انواع داده در پایتون‬

‫* با تابع ‪ type‬میتوانیم نوع داده را مشخص کنیم‪.‬‬

‫* اعداد در پایتون سه نوع اعداد صحیح (‪ ،)integer‬اعداد اعشاری (‪ )float‬و اعداد مختلط (‪ )complex No.‬هستند‪.‬‬
‫>'‪print(type(5)) # -> <class 'int‬‬
‫>'‪print(type(5.1)) # -> <class 'float‬‬
‫>'‪print(type(3 + 2j)) # -> <class 'complex‬‬

‫* اگر تابع داخل کالس باشد به آن متد میگویند و معموالً متد بهصورت زیر نمایش داده میشود‪.‬‬
‫)(‪x.method‬‬

‫* نوع داده دیکشنری (‪ )dictionary‬همانند دیکشنری عمل میکند و معنی و مفهوم را میرساند‪.‬‬
‫}‪x = {'Ali': 'ugly', 'x': 5‬‬
‫>'‪print(type(x)) # -> <class 'dict‬‬

‫* نوع داده بولین (‪ )boolean‬که یا ‪ True‬و یا ‪ False‬است‪.‬‬


‫‪x = True‬‬
‫‪y = False‬‬
‫))‪print(type(x‬‬ ‫>'‪# -> <class 'bool‬‬
‫))‪print(type(y‬‬ ‫>'‪# -> <class 'bool‬‬

‫* نوع داده مجموعه (‪ )set‬که در آن تکراری ها حذف میشوند‪.‬‬


‫}‪x = {1, 2, 2, 3, 4, 4‬‬
‫}‪print(x) # -> {1, 2, 3, 4‬‬
‫>'‪print(type(x)) # -> <class 'set‬‬

‫* توالیها عبارتند از رشته (‪ ،)string‬لیست (‪ )list‬و تاپل (‪ ،)tuple‬که در توالیها میتوانیم بین عناصر بچرخیم به این معنی که‬
‫میتوانیم به عنوان مثال به عنصر بعدی و یا عناصر اول‪ ،‬دوم و ‪ ....‬دست یابیم‪.‬‬
‫'‪s = 'Reza‬‬
‫]‪lst = [1, 2, 3, 4‬‬
‫)‪t = (1, 2, 3, 4‬‬
‫>'‪print(type(s)) # -> <class 'str‬‬
‫>'‪print(type(lst)) # -> <class 'list‬‬
‫>'‪print(type(t)) # -> <class 'tuple‬‬
‫* در پایتون شمارش از صفر شروع میشود‪.‬‬
‫'‪s = 'Reza Dolati‬‬
‫‪#‬‬ ‫‪012345678910‬‬
‫‪print(s[2: 6]) # -> za D‬‬

‫* لیست قابل تغییر است‪.‬‬


‫]‪lst = [1, 2, 3, 4‬‬
‫‪lst[2] = 10‬‬
‫]‪print(lst) # -> [1, 2, 10, 4‬‬

‫* تاپل قابل تغییر نیست‪.‬‬


‫)‪t = (1, 2, 3, 4‬‬
‫‪t[2] = 10‬‬

‫* نوع داده ‪ None‬زمانی استفاده میشود که نمیدانیم چه نوع مقداری به متغیر بدهیم و همچنین زمانی که در توابع نمیخواهیم چیزی‬
‫برگردانده شود از ‪ None‬استفاده میکنیم‪.‬‬
‫‪x = None‬‬
‫))‪print(type(x‬‬ ‫>'‪# -> <class 'NoneType‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :2‬اعداد در پایتون‬

‫* اعداد در پایتون سه نوع اعداد صحیح (‪ ،)integer‬اعداد اعشاری (‪ )float‬و اعداد مختلط (‪ )complex No.‬هستند‪.‬‬
‫>'‪print(type(5)) # -> <class 'int‬‬
‫>'‪print(type(5.1)) # -> <class 'float‬‬
‫>'‪print(type(3 + 2j)) # -> <class 'complex‬‬

‫* اعداد مختلط معموال در پایتون استفادهای ندارند‪.‬‬

‫* اعداد مبنای مختلفی دارند و اعدادی که در زندگی روزمره استفاده میکنیم بر مبنای ‪ 10‬هستند‪.‬‬

‫* حافظهی کامپیوتر بر اساس مبنای ‪( 2‬باینری = ‪ )0, 1‬کار میکند‪.‬‬

‫* در کامپیوتر و وب مبناهای ‪ 8 ،2‬و ‪ 16‬بسیار معروف و پر استفاده هستند‪.‬‬

‫* در مبنای ‪ 0 ( 10‬تا ‪ )9‬ده عدد استفاده میشود‪.‬‬

‫* در مبنای ‪ 0 ( 2‬و ‪ ) 1‬دو عدد استفاده میشود‪.‬‬

‫* در مبنای ‪ 0 ( 8‬تا ‪ ) 7‬هشت عدد استفاده میشود‪.‬‬

‫* در مبنای ‪ 0 ( 16‬تا ‪ a + 9‬تا ‪ ) f‬شانزده عدد استفاده میشود‪.‬‬

‫* در مبنای ‪ 16‬بعد از ‪ 9‬از حروف انگلیسی استفاده میکنیم‪.‬‬


‫‪a = 10‬‬ ‫‪b = 11‬‬ ‫‪c = 12‬‬ ‫‪d = 13‬‬
‫‪e = 14‬‬ ‫‪f = 15‬‬

‫* اعدادی که در کامپیوتر مینویسیم به صورت پیشفرض بر مبنای ‪ 10‬میباشند‪.‬‬

‫* برای اینکه بتوانیم عدد را بر مبنای ‪( 2‬باینری) بنویسیم‪ ،‬باید ابتدای عدد از ‪ 0b‬استفاده کنیم‪.‬‬
‫‪x = 0b1011‬‬
‫‪print(x) # -> 11‬‬

‫* برای اینکه بتوانیم عدد را بر مبنای ‪ 8‬بنویسیم‪ ،‬باید ابتدای عدد از ‪ 0o‬استفاده کنیم‪.‬‬
‫‪x = 0o7235‬‬
‫‪print(x) # -> 3741‬‬

‫* برای اینکه بتوانیم عدد را بر مبنای ‪ 16‬بنویسیم‪ ،‬باید ابتدای عدد از ‪ 0x‬استفاده کنیم‪.‬‬
‫‪x = 0xf6e2a‬‬
‫‪print(x) # -> 1011242‬‬

‫* از تابع ‪ bin‬برای بهدست آوردن مبنای ‪ 2‬یک عدد استفاده میکنیم‪.‬‬


‫‪x = 10‬‬
‫))‪print(bin(x‬‬ ‫‪# -> 0b1010‬‬
‫* از تابع ‪ oct‬برای بهدست آوردن مبنای ‪ 8‬یک عدد استفاده میکنیم‪.‬‬
‫‪x = 10‬‬
‫))‪print(oct(x‬‬ ‫‪# -> 0o12‬‬

‫* از تابع ‪ hex‬برای بهدست آوردن مبنای ‪ 16‬یک عدد استفاده میکنیم‪.‬‬


‫‪x = 10‬‬
‫))‪print(hex(x‬‬ ‫‪# -> 0xa‬‬

‫* برای تبدیل عدد صحیح به عدد اعشاری از تابع ‪ float‬استفاده میکنیم‪.‬‬


‫‪x = 10‬‬
‫)‪x = float(x‬‬
‫‪print(x) # -> 10.0‬‬

‫* برای تبدیل عدد اعشاری به عدد صحیح از تابع ‪ int‬استفاده میکنیم‪.‬‬


‫‪x = 1.9‬‬
‫)‪x = int(x‬‬
‫‪print(x) # -> 1‬‬

‫* برای تبدیل به عدد کامپلکس از تابع ‪ complex‬استفاده میکنیم‪.‬‬


‫‪x = 1‬‬
‫)‪x = complex(x‬‬
‫)‪print(x) # -> (1+0j‬‬

‫* اگر رشته فقط از عدد تشکیل شده باشد میتوان آن را به عدد صحیح تبدیل کرد‪.‬‬
‫'‪x = '234‬‬
‫))‪print(int(x‬‬ ‫‪# -> 234‬‬

‫* در حافظهی کامپیوتر اعداد بهصورت باینری ذخیره میشوند و ممگن است گاهی در محاسبات اعشاری دقت کافی حاصل نشود‪.‬‬
‫)‪print(0.6 - 0.4‬‬ ‫‪# -> 0.19999999999999996‬‬

‫* این مشکل در حلقهها و شرطها خودش را نشان میدهد‪.‬‬


‫)‪print(0.6 - 0.4 == 0.2‬‬ ‫‪# -> False‬‬

‫* برای حل این مشکل میتوانیم از ‪ Decimal‬که آن را باید از ماژول ‪ decimal‬وارد کنیم‪ ،‬استفاده کنیم‪.‬‬
‫‪from decimal import Decimal‬‬

‫))'‪print(Decimal('0.6') - Decimal('0.4‬‬ ‫‪# -> 0.2‬‬


‫* برای اینکه بتوانیم اعداد اعشاری را بهصورت کسری نمایش بدهیم‪ ،‬میتوانیم از ‪ Fraction‬که آن را باید از ماژول ‪ fractions‬وارد‬
‫کنیم‪ ،‬استفاده کنیم‪.‬‬
‫‪from fractions import Fraction‬‬

‫))‪print(Fraction(1.5‬‬ ‫‪# -> 3/2‬‬

‫* برای جداسازی ارقام بزرگ میتوانیم از ‪ ) _ ( underscore‬استفاده کنیم‪.‬‬


‫‪x = 1_000_000_000‬‬

‫* عدد اعشاری که بسیار بزرگ باشد به نحوهی دیگری نمایش داده میشود‪.‬‬
‫)‪print(1e+7‬‬ ‫‪# -> 10000000.0‬‬
‫* ‪# 1e+7 = 1‬‬ ‫‪10 ** 7‬‬
‫)‪print(1e-7‬‬ ‫‪# -> 0.0000001‬‬
‫* ‪# 1e-7 = 1‬‬ ‫‪10 ** -7‬‬

‫* ‪ inf‬به معنی بینهایت و ‪ –inf‬به معنی منفی بینهایت میباشد‪.‬‬

‫* اعداد صحیح محدودیت ندارند اما اعداد اعشاری محدودیت دارند‪.‬‬


‫)‪print(2e+400‬‬ ‫‪# -> inf‬‬

‫)'‪f = float('inf‬‬
‫‪print(f) # -> inf‬‬

‫* برای نمایش بخش حقیقی اعداد ‪ complex‬از ‪ real‬و برای نمایش بخش مجهول از ‪ imag‬استفاده میکنیم‪.‬‬
‫‪c = 1 + 3j‬‬
‫)‪print(c.real‬‬ ‫‪# -> 1.0‬‬
‫)‪print(c.imag‬‬ ‫‪# -> 3.0‬‬

‫* برای نمایش مزدوج اعداد ‪ complex‬از متد ‪ conjugate‬استفاده میکنیم‪.‬‬


‫‪c = 1 + 3j‬‬
‫))(‪print(c.conjugate‬‬ ‫)‪# -> (1-3j‬‬

‫‪p = 2 - 3j‬‬
‫))(‪print(p.conjugate‬‬ ‫)‪# -> (2+3j‬‬

‫* برای گرد کردن اعداد اعشاری از تابع ‪ round‬استفاده میکنیم‪ ،‬در ورودی اول عدد را ارسال میکنیم و در ورودی دوم مشخص میکنیم تا‬
‫چند رقم اعشار باید رند شود‪.‬‬
‫‪c = 3.2564543565‬‬
‫))‪print(round(c, 2‬‬ ‫‪# -> 3.26‬‬
‫* برای به دست آوردن قدر مطلق یک عدد از تابع ‪ abs‬استفاده میکنیم‪.‬‬
‫‪print(abs(3.25)) # -> 3.25‬‬
‫‪print(abs(-4.32)) # -> 4.32‬‬

‫* برای به توان رساندن از تابع ‪ pow‬استفاده میکنیم‪ ،‬در ورودی اول عدد را ارسال میکنیم و در ورودی دوم توان را مینویسیم‪.‬‬
‫))‪print(pow(3, 2‬‬ ‫‪# -> 9‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ : 3‬حل مثال برای مبحث اعداد‬

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

‫))' ‪kg = int(input('Enter kg:‬‬


‫‪g = kg * 100‬‬
‫)‪print('g:', g‬‬

‫* در دستور ‪ print‬با ‪ sep‬میتوانیم مشخص کنیم چه چیزی در میان عناصر قرار گیرد‪.‬‬
‫)'‪print(25, 'Ali', 'car', sep='/‬‬ ‫‪# -> 25/Ali/car‬‬

‫‪ .2‬برنامهای بنویسید که مساحت یک مثلث را حساب کند‪.‬‬

‫))' ‪height = int(input('height:‬‬


‫))' ‪base = int(input('base:‬‬
‫‪area = 1 / 2 * height * base‬‬
‫)‪print('The area of triangle is:', area‬‬

‫‪ .3‬طراحی یک ماشین حساب ساده که جمع‪ ،‬تفریق‪ ،‬ضرب و تقسیم را انجام میدهد‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫))' ‪y = int(input('y:‬‬
‫‪print(x, '+', y, '=',‬‬ ‫‪x‬‬ ‫‪+‬‬ ‫)‪y‬‬
‫‪print(x, '-', y, '=',‬‬ ‫‪x‬‬ ‫‪-‬‬ ‫)‪y‬‬
‫‪print(x, '*', y, '=',‬‬ ‫‪x‬‬ ‫*‬ ‫)‪y‬‬
‫‪print(x, '/', y, '=',‬‬ ‫‪x‬‬ ‫‪/‬‬ ‫)‪y‬‬
‫‪ .۴‬یک عدد را از کاربر گرفته و ارقامش را جدا کنیم و چاپ کنیم (به فرض اینکه میدانیم عدد چند رقمی است‪).‬‬

‫* هر عددی باقیماندهاش به ‪ 10‬میشود رقم آخرش‪.‬‬


‫)‪print(45903 % 10‬‬ ‫‪# -> 3‬‬

‫* هر عددی را بهصورت تقسیم بدون اعشار به ‪ 10‬تقسیم کنیم‪،‬رقم آخرش حذف میشود‪.‬‬
‫)‪print(45903 // 10‬‬ ‫‪# -> 4590‬‬

‫))' ‪x = int(input('x:‬‬
‫‪y = x % 10‬‬
‫)‪print(y‬‬
‫‪x = x // 10‬‬
‫‪y = x % 10‬‬
‫)‪print(y‬‬
‫‪x = x // 10‬‬
‫‪y = x % 10‬‬
‫)‪print(y‬‬

‫‪ .۵‬یک زاویه را برحسب درجه بگیریم و آن را تبدیل به رادیان کنیم‪.‬‬

‫))' ‪degree = int(input('degree:‬‬


‫‪radians = (degree * 3.14) / 180‬‬
‫)‪print('radians:', radians‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ ۴‬و ‪ : ۵‬تکالیف مبحث اعداد و حل آنها‬

‫‪ .1‬برنامهای بنویسید که شعاع دایره را از کاربر گرفته و محیط و مساحت دایره را حساب کند‪.‬‬

‫‪p = 3.14‬‬
‫))' ‪r = float(input('r:‬‬
‫))‪print(environment:', round(2 * p * r, 3‬‬
‫))‪print(area:', round(p * (r ** 2), 2‬‬

‫‪ .2‬برنامهای بنویسید که یک عدد از کاربر گرفته و مربع (توان دوم) و مکعب (توان سوم) آن را چاپ کند‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫)‪print('x ^ 2 =', x ** 2‬‬
‫)‪print('x ^ 3 =', x ** 3‬‬

‫‪ .3‬برنامه ای بنویسید که دو عدد از کاربر گرفته‪ ،‬اولی را به توان دومی برساند و نتیجه را چاپ کند‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫))' ‪y = int(input('y:‬‬
‫)‪print('x ^ y =', x ** y‬‬

‫‪ .۴‬برنامه ای بنویسید که سه عدد گرفته و میانگین آنها را محاسبه و چاپ کند‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫))' ‪y = int(input('y:‬‬
‫))' ‪z = int(input('z:‬‬
‫‪ave = (x + y + z) / 3‬‬
‫))‪print('ave:', round(ave, 2‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :۶‬رشتهها در پایتون بخش (اول)‬

‫* برای بررسی اینکه مقدار متغیر از نوع خاصی هست یا خیر از تابع ‪ isinstance‬استفاده میکنیم‪ ،‬ورودی اول مقدار و ورودی دوم نوع‬
‫میباشد‪.‬‬
‫‪x = 2‬‬
‫))‪print(isinstance(x, int‬‬ ‫‪# -> True‬‬
‫))‪print(isinstance(x, str‬‬ ‫‪# -> False‬‬

‫* برای نمایش متن‪ ،‬جمالت و تک کاراکترها از رشتهها استفاده میکنیم‪.‬‬

‫* در پایتون رشتهها را داخل کتیشن ( ‘ ) و یا دابل کتیشن ( “ ) قرار میدهیم‪.‬‬

‫* رشته میتواند حروف انگلیسی‪ ،‬حروف و نمادهای سایر زبانها‪ ،‬عدد‪ ،‬کاراکترهای خاص مانند ‪ & ،#‬و ‪ ...‬باشد‪.‬‬

‫* اعداد هم بهتر است بهصورت رشته دخیره شوند مگر در مواردی که نیاز به انجام محاسبات است‪.‬‬

‫* اگر یک رشته را با کتیشن آغاز کنیم باید با کتیشن ببندیم و همچنین اگر با دابل کتیشن آغاز کنیم باید با دابل کتیشن ببندیم‪.‬‬
‫'‪s = 'reza‬‬
‫"‪z = "ali‬‬

‫* زمانی که رشته را داخل کتیشن یا دابل کتیشن قرار دادیم‪ ،‬میتوانیم داخل آن نیز از کتیشن یا دابل کتیشن استفاده کنیم اما باید دقت‬
‫کنیم که اگر رشته داخل کتیشن باشد باید داخل رشته از دابل کتیشن استفاده کنیم و اگر رشته داخل دابل کتیشن باشد‪ ،‬باید داخل رشته از‬
‫کتیشن استفاده کنیم‪.‬‬
‫'‪s = 'ali, "reza", ahmad‬‬
‫"‪z = "ali, 'reza', ahmad‬‬

‫* اگر بخواهیم داخل رشته از کتیشن یا دابل کتیشن همانند کتیشن یا دابل کتیشنی که رشته در آن قرار دارد استفاده کنیم باید قبل از آن از‬
‫بک اسلش (\) استفاده کنیم‪ ،‬بک اسلش (\) وظیفهی لغو یک دستور را دارد‪.‬‬
‫"‪s = "ali, \"reza\", ahmad‬‬
‫'‪z = 'ali, \'reza\', ahmad‬‬

‫* در رشتهها با استفاده از ‪ \n‬میتوانیم به خط بعدی برویم‪.‬‬


‫)'‪print('ali\nreza‬‬

‫* برای لغو تاثیر بک اسلش (\) از یک بک اسلش دیگر قبلش استفاده میکنیم‪.‬‬
‫)'‪print('c:\Downloads\\new‬‬ ‫‪# -> c:\Downloads\new‬‬

‫* در رشتهها با استفاده از ‪ \t‬میشود یک ‪ tab‬فاصله انداخت‪.‬‬


‫)'‪print('ali\treza‬‬ ‫‪# -> ali‬‬ ‫‪reza‬‬
‫* گاهی تعداد دستوراتی که باید لغو کنیم بسیار زیاد است‪ ،‬در این حالت اگر از ‪ r‬قبل از رشته استفاده کنیم‪ ،‬همهی دستورات داخل رشته لغو‬
‫میشوند‪.‬‬
‫)'‪print(r'c:\Download\new\telegram‬‬ ‫‪# -> c:\Download\new\telegram‬‬

‫* در صورت طوالنی شدن رشته میتوانیم رشته را ببندیم‪ ،‬یک بک اسلش بگذاریم و ادامه رشته را در خط بعد بنویسیم‪.‬‬
‫\ ' ‪print(r'ali‬‬
‫‪'reza') # -> ali reza‬‬
‫* بهتر است بک اسلش را نگذاریم‪.‬‬
‫' ‪print(r'ali‬‬
‫)'‪'reza‬‬ ‫‪# -> ali reza‬‬

‫* استفاده از سه کتیشن ( ’’‘ ) بهجای یک کیتشن‪ ،‬رشته را همانگونه که مینویسیم نمایش میدهد‪.‬‬
‫‪print('''ali‬‬
‫)'''‪reza‬‬

‫* رشتهها را با ‪ +‬به یکدیگر متصل میکنیم‪.‬‬


‫)'‪print('ali' + 'reza‬‬ ‫‪# -> alireza‬‬

‫* رشتهها را با * تکرار میکنیم‪.‬‬


‫)‪print('ali-' * 3‬‬ ‫‪# -> ali-ali-ali-‬‬

‫* اگر هردو رشته باشند میتوان بدون کاما ( ‪ ) ,‬و یا جمع آنها را کنار هم قرار داد‪.‬‬
‫)'‪print('ali''reza‬‬ ‫‪# -> alireza‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :۷‬رشتهها در پایتون بخش (دوم)‬

‫* رشتهها چون توالیاند به راحتی میتوان شماره گذاری کرد و عناصر مختلف آن را نمایش داد‪.‬‬

‫* در شماره گذاری رشتهها‪ ،‬شمارش از ‪ 0‬آغاز میشود‪.‬‬

‫* اگر بخواهیم از آخر شمارش کنیم‪ ،‬شمارش از ‪ -1‬آغاز میشود‪.‬‬


‫'‪x = 'reza‬‬
‫)]‪print(x[3‬‬ ‫‪# -> a‬‬
‫)]‪print(x[-3‬‬ ‫‪# -> r‬‬
‫)]‪print(x[2‬‬ ‫‪# -> z‬‬
‫)]‪print(x[0‬‬ ‫‪# -> r‬‬
‫)]‪print(x[-2‬‬ ‫‪# -> z‬‬
‫)]‪print(x[-4‬‬ ‫‪# -> r‬‬
‫)]‪print(x[1‬‬ ‫‪# -> e‬‬

‫* در رشتهها برای مشخص کردن یک بخش از تکه بندی (‪ )slicing‬استفاده میکنیم‪.‬‬

‫* در ‪ slicing‬اگر ابتدا خالی باشد یعنی از اول و اگر انتها خالی باشد یعنی تا آخر و اگر کامال خالی باشد یعنی کل رشته را مشخص کند‪.‬‬
‫'‪s = 'ali reza‬‬
‫‪#‬‬ ‫‪01234567‬‬
‫‪#‬‬ ‫‪...-2-1‬‬
‫)]‪print(s[2: 3‬‬ ‫‪# -> i‬‬
‫)]‪print(s[2:‬‬ ‫‪# -> i reza‬‬
‫)]‪print(s[: 3‬‬ ‫‪# -> ali‬‬
‫)]‪print(s[:‬‬ ‫‪# -> ali reza‬‬
‫)]‪print(s[: 2] + s[2:‬‬ ‫‪# -> ali reza‬‬

‫* در ‪ slicing‬میتوانیم گام مشخص کنیم‪.‬‬


‫'‪s = 'ali reza‬‬
‫‪#‬‬ ‫‪01234567‬‬
‫)]‪print(s[2: 7: 2‬‬ ‫‪# -> irz‬‬

‫* رشتهها برخالف لیستها قابل تغییر نیستند و نمیتوانیم یک کاراکتر را عوض کنیم‪.‬‬
‫'‪s = 'ali reza‬‬
‫'‪s[2] = 'q‬‬

‫* از تابع ‪ len‬میتوانیم برای مشخص کردن سایز رشته استفاده کنیم‪.‬‬


‫'‪s = 'ali‬‬
‫‪print(len(s)) # -> 3‬‬
‫‪print(s[:len(s)]) # -> ali‬‬
‫* اگر در ‪ slicing‬گام را ‪ -1‬بدهیم رشته را برعکس نمایش میدهد‪.‬‬
‫'‪s = 'ali reza‬‬
‫)]‪print(s[::-1‬‬ ‫‪# -> azer ila‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :۸‬متدهای مهم رشته‬

‫* تابع ‪ len‬تعداد کاراکترهای یک رشته را مشخص میکند ( فاصله نیز کاراکتر محسوب میشود‪.‬‬
‫'م‪s = 'ali #6‬‬
‫))‪print(len(s‬‬ ‫‪# -> 7‬‬

‫* متد ‪ upper‬حروف کوچک انگلیسی را به بزرگ تبدیل میکند‪.‬‬


‫'‪s = 'aLi reza‬‬
‫‪print(s.upper()) # -> ALI REZA‬‬
‫‪print(s) # -> aLi reza‬‬
‫* در این حالت تغییرات روی رشته اعمال نشده اند‪ ،‬برای اعمال تغییرات بهصورت زیر میتوانیم عمل کنیم‪.‬‬
‫'‪s = 'aLi reza‬‬
‫)(‪s = s.upper‬‬
‫‪print(s) # -> ALI REZA‬‬

‫* متد ‪ lower‬حروف بزرگ انگلیسی را به کوچک تبدیل میکند‪.‬‬


‫'‪s = 'ALI REZA‬‬
‫)(‪s = s.lower‬‬
‫‪print(s) # -> ali reza‬‬

‫* از متد ‪ count‬برای شمارش یک یا چند کاراکتر در یک رشته استفاده میکنیم‪.‬‬


‫'‪s = 'ali reza‬‬
‫‪print(s.count('a')) # -> 2‬‬
‫‪print(s.count('za')) # -> 1‬‬

‫* از متد ‪ endswith‬برای بررسی اینکه یک رشته با کاراکتر یا رشتهی خاصی به پایان رسیده است یا خیر‪ ،‬استفاده میکنیم‪.‬‬
‫'‪s = 'ali ahmadi‬‬
‫‪print(s.endswith('i')) # -> True‬‬
‫‪print(s.endswith('adi')) # -> True‬‬
‫‪print(s.endswith('h')) # -> False‬‬

‫* از متد ‪ starstwith‬برای بررسی اینکه یک رشته با کاراکتر یا رشتهی خاصی آغاز شده است یا خیر‪ ،‬استفاده میکنیم‪.‬‬
‫'‪s = 'ali ahmadi‬‬
‫‪print(s.startswith('a')) # -> True‬‬
‫‪print(s.startswith('ali ')) # -> True‬‬
‫‪print(s.startswith('d')) # -> False‬‬

‫* از متد ‪ find‬برای پیدا کردن موقعیت یک کاراکتر در رشته استفاده میکنیم‪ ،‬اگر چند عدد از آن کاراکتر در رشته باشد این متد موقعیت‬
‫اولین کاراکتر را از سمت چپ مشخص میکند‪.‬‬
‫'‪s = 'ali mohammadi‬‬
‫‪print(s.find('a')) # -> 0‬‬
‫‪print(s.find('m')) # -> 4‬‬
‫* از متد ‪ rfind‬برای پیدا کردن موقعیت یک کاراکتر در رشته از سمت راست استفاده میکنیم‪.‬‬
‫'‪s = 'ali mohammadi‬‬
‫))'‪print(s.rfind('a‬‬ ‫‪# -> 10‬‬
‫))'‪print(s.rfind('m‬‬ ‫‪# -> 9‬‬

‫* از متد ‪ isalnum‬برای بررسی اینکه یک رشته تماماً از عدد و حرف تشکیل شده باشد استفاده میکنیم‪.‬‬
‫'‪s = 'alimohammadi‬‬
‫'‪n = 'a li‬‬
‫'‪435li‬بهار‪m = 'a‬‬
‫'‪c = '$kb@v‬‬
‫))(‪print(s.isalnum‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫‪True‬‬
‫))(‪print(n.isalnum‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫‪False‬‬
‫))(‪print(m.isalnum‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫‪True‬‬
‫))(‪print(c.isalnum‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫‪False‬‬

‫* از متدهای ‪ isnumeric‬و ‪ isdigit‬رای بررسی اینکه یک رشته فقط از عدد تشکیل شده باشد استفاده میکنیم‪.‬‬
‫'‪x = '3535467‬‬
‫‪y = '45‬‬ ‫'‪445‬‬
‫'‪z = '35h‬‬
‫))(‪print(x.isnumeric‬‬ ‫‪# -> True‬‬
‫‪print(x.isdigit()) #‬‬ ‫‪-> True‬‬
‫‪print(y.isdigit()) #‬‬ ‫‪-> False‬‬
‫‪print(z.isdigit()) #‬‬ ‫‪-> False‬‬

‫* از متد ‪ join‬برای قرار دادن یک رشته در بین عناصر یک لیست و یا تاپل در صورتیکه رشته باشند‪ ،‬استفاده میکنیم‪.‬‬
‫'‪s = '#‬‬
‫]'‪lst = ['A', '5', 'me‬‬
‫‪print(s.join(lst)) # -> A#5#me‬‬

‫* از متد ‪ split‬برای جداسازی عناصر یک رشته براساس یک رشتهی خاص و قرار دادن آن در یک لیست استفاده میکنیم‪.‬‬
‫'‪s = 'reza-ali-435‬‬
‫))'‪print(s.split('-‬‬ ‫]'‪# -> ['reza', 'ali', '435‬‬

‫* از متد ‪ replace‬برای جایگزینی یک کاراکتر با یک کاراکتر استفاده میکنیم‪.‬‬


‫'‪s = 'ali reza‬‬
‫))'‪print(s.replace('a', 'b‬‬ ‫‪# -> bli rezb‬‬

‫* از متد ‪ strip‬برای حذف یک کاراکتر از ابتدا و انتهای رشته استفاده میکنیم‪ ،‬مقدار پیشفرض آن فاصله است‪.‬‬
‫' = ‪s‬‬ ‫‪ali reza‬‬ ‫'‬
‫'**‪x = '**ali reza‬‬

‫‪print(s.strip()) # -> ali reza‬‬


‫‪print(x.strip('*')) # -> ali reza‬‬
‫* از متد ‪ ltrip‬برای حذف یک کاراکتر از ابتدای رشته و از ‪ rstrip‬برای حذف یک کاراکتر از انتهای رشته استفاده میکنیم‪ ،‬مقدار‬
‫پیشفرض آن فاصله است‪.‬‬
‫'**‪s = '**ali reza‬‬

‫))'*'(‪print(s.lstrip‬‬ ‫**‪# -> ali reza‬‬


‫))'*'(‪print(s.rstrip‬‬ ‫‪# -> **ali reza‬‬

‫* با استفاده از متد ‪ capitalize‬حرف اول رشته بزرگ و بقیه کوچک میشوند‪.‬‬


‫'‪s = 'aLI Reza‬‬

‫))(‪print(s.capitalize‬‬ ‫‪# -> Ali reza‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :۹‬کاراکترهای ویژه و آشنایی با یونیکد‬

‫* هر کاراکتر با یک کد خاص در حافظه ذخیر میشود‪ ،‬که این کد میتواند اسکی (‪ )ASCII‬و یا یونیکد (‪ )unicode‬باشد‪.‬‬

‫* اسکی (‪ )ASCII‬بسیار محدود است ام یونیکد (‪ )unicode‬بسیار گسترده است‪.‬‬

‫* با استفاده از تابع ‪ ord‬میتوانیم اسکی یا یونیکد یک کاراکتر را مشاهده کنیم‬


‫))'‪print(ord('%‬‬ ‫‪# -> 37‬‬

‫* با استفاده از تابع ‪ chr‬میتوانیم مشخص کنیم که یک کد به چه کاراکتری اختصاص دارد‪.‬‬


‫))‪print(chr(457‬‬ ‫‪# -> lj‬‬

‫* اگر یونیکد بر مبنای ‪( 10‬دسیمال) باشد‪ ،‬با قرار دادن ‪ \u‬میتوانیم مشخص کنیم که به چه کاراکتری اختصاص دارد‪.‬‬
‫)'‪print('\u0489‬‬ ‫҉ >‪# -‬‬
‫)'‪print('\u2DBB‬‬ ‫ⶻ >‪# -‬‬

‫* اگر یونیکد بر مبنای ‪ 8‬باشد‪ ،‬با قرار دادن ‪ \0‬میتوانیم مشخص کنیم که به چه کاراکتری اختصاص دارد‪.‬‬
‫)'‪print('\052‬‬ ‫* >‪# -‬‬

‫* اگر یونیکد بر مبنای ‪ 16‬باشد‪ ،‬با قرار دادن ‪ \x‬میتوانیم مشخص کنیم که به چه کاراکتری اختصاص دارد‪.‬‬
‫)'‪print('\x2a‬‬ ‫* >‪# -‬‬

‫* از یونیکد ‪ \n‬میتوان برای رفتن به خط بعد استفاده کرد‪ ،‬از یونیکد سایر موارد نیز میتوان استفاده کرد‪ ،‬اما بهتر است از دستورات‬
‫اختصاصی آنها استفاده شود‪.‬‬
‫)'‪print('reza\u000Aali‬‬

‫* اگر از ‪ \b‬در رشته استفاده کنیم‪،‬کاراکتر قبل از خودش را پاک میکند‪.‬‬


‫)'‪print('ali\breza‬‬ ‫‪# -> alreza‬‬

‫* اگر از ‪ \r‬در رشته استفاده کنیم‪ ،‬همهی کاراکترهای قبل از خودش را پاک میکند‪.‬‬
‫)'‪print('ali\rreza‬‬ ‫‪# -> reza‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :1۰‬فرمتدهی رشته با روش سنتی (روش اول)‬

‫* این روش نسبت به روشهای دیگر قدیمیتر است‪ ،‬در آن از ‪ %‬استفاده میکنیم و مقادیر را باید به ترتیب ارسال کنیم‪.‬‬
‫‪x = 2‬‬
‫‪y = 3.6‬‬
‫))‪print('x is: %i\ny is: %i\nz is: %i' % (x, y, 5‬‬

‫* در این روش پس از ‪ %‬از این موارد استفاده میکنیم‪ type ( .‬اجباری میباشد و بقیه موارد اختیاری اند‪).‬‬
‫‪% [(key)] [flag] [W] [.p] type‬‬

‫* ‪ type‬نوع رشته را مشخص میکند و استفاده از آن اجباری میباشد‪.‬‬

‫* برای اعداد صحیح از ‪ i‬و یا ‪ d‬استفاده میکنیم و قسمت اعشار حذف می شود‪.‬‬
‫‪print('%i' % 2) # -> 2‬‬
‫‪print('%i' % 4.554) # -> 4‬‬
‫‪print('%d' % 6.34) # -> 6‬‬

‫* اگر از ‪ c‬استفاده کنیم‪ ،‬کاراکتر یک یونیکد را نمایش میدهد و اگر یونیکد نباشد خود کاراکتر را نمایش میدهد‪.‬‬
‫)‪print('%c' % 674‬‬ ‫‪# -> ʢ‬‬
‫)'‪print('%c' % 'y‬‬ ‫‪# -> y‬‬

‫* از ‪ s‬برای رشتهها استفاده میکنیم‪.‬‬


‫)'‪rint('%s' % 'reza‬‬ ‫‪# -> reza‬‬

‫* از ‪ o‬برای نمایش مبنای ‪ 8‬یک عدد استفاده میکنیم‪.‬‬


‫)‪print('%o' % 356‬‬ ‫‪# -> 544‬‬

‫* از ‪ x‬برای نمایش مبنای ‪ 16‬یک عدد استفاده میکنیم‪ ،‬اگر از ‪ X‬استفاده کنیم‪ ،‬نتیجه نیز با حرف بزرگ نمایشداده میشود‪.‬‬
‫)‪print('%x' % 436547567‬‬ ‫‪# -> 1a052fef‬‬
‫)‪print('%X' % 436547567‬‬ ‫‪# -> 1A052FEF‬‬

‫* از ‪ e‬برای نمایش نماد علمی یک عدد استفاده میکنیم‪ ،‬اگر از ‪ E‬استفاده کنیم‪ ،‬نتیجه نیز با حرف بزرگ نمایش داده میشود‪.‬‬
‫)‪print('%e' % 436547567‬‬ ‫‪# -> 4.365476e+08‬‬
‫)‪print('%E' % 436547567‬‬ ‫‪# -> 4.365476E+08‬‬

‫* از ‪ f‬برای نمایش اعداد اعشار استفاده میکنیم‪ ،‬تا ‪ 6‬رقم اعشار نمایش داده میشود‪.‬‬
‫)‪print('%f' % 2.6‬‬ ‫‪# -> 2.600000‬‬
‫* از ‪ r‬برای نمایش رشته بهکار میرود و برخالف ‪ s‬رشته را همانگونه که هست و با کتیشن نمایش میدهد‪.‬‬
‫)'‪print('%r' % 'reza‬‬ ‫'‪# -> 'reza‬‬

‫* از ]‪ [.p‬برای کنترل تعداد ارقام اعشار استفاده می کنیم‪ ،‬به اینصورت که پس از ‪ .‬مشخص میکنیم تا چند رقم اعشار را نمایش دهد‪.‬‬
‫)‪print('%.2f' % 3.54355653545‬‬ ‫‪# -> 3.54‬‬

‫* از ]‪ [w‬برای مشخص کردن طول میدان استفاده میکنیم‪ ،‬اگر طول میدان را بزرگتر از تعداد کاراکترها مشخص کنیم‪ ،‬به جای طول میدان‬
‫اضافی‪ ،‬قبل از کاراکترها فاصله گذاشته میشود‪.‬‬
‫)‪print('%9.2f' % 3.5435‬‬ ‫>‪# -‬‬ ‫‪3.54‬‬

‫* از ‪ +‬در ]‪ [flag‬نمایش عالمتها استفاده میکنیم‪.‬‬


‫)‪print('%+9.2f' % 3.5435‬‬ ‫>‪# -‬‬ ‫‪+3.54‬‬

‫* از ‪ -‬در ]‪ [flag‬برای انتقال فضاهای خالی به سمت راست استفاده میکنیم‪.‬‬


‫)‪print('%-9.2f' % 3.5435‬‬ ‫>‪# -‬‬ ‫‪3.54‬‬

‫* از ‪ 0‬در ]‪ [flag‬برای پر کردن فضاهای خالی با ‪ 0‬استفاده میکنیم‪ ،‬نمیتوانیم ‪ 0‬و – را در کنارهم به کار ببریم‪.‬‬
‫)‪print('%09.2f' % 3.5435‬‬ ‫‪# -> 000003.54‬‬

‫* از ])‪ [(key‬برای نمایش مقادیر کلیدها در دیکشنری استفاده میشود‪.‬‬


‫}‪d = {'a': 2, 'b': 7‬‬
‫)‪print('%(a)f\n%(b)i' % d‬‬ ‫‪# -> 4.365476E+08‬‬

‫* اگر به جای موارد اختیاری از ستاره ( * ) استفاده کنیم‪ ،‬میتوانیم آن موارد را قبل از متغیر و به ترتیب تعیین کنیم‪.‬‬
‫‪x = 3.8487320342358‬‬
‫))‪print('%8.*f' % (5, x‬‬ ‫>‪# -‬‬ ‫‪3.84873‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :11‬فرمتدهی رشته با متد ‪( format‬روش دوم)‬

‫* نسبت به روش قبلی جدیدتر و دارای قابلیتهای بیشتری است‪ ،‬در آن از }{ استفاده میکنیم و سپس از متد ‪ format‬استفاده میکنیم و‬
‫مقادیر را به ترتیب به آن ارسال می کنیم‪.‬‬
‫)‪'{} {}'.format(values‬‬

‫‪x = 5‬‬
‫‪y = 6.4354354‬‬
‫))‪print('x: {}\ny: {}'.format(x, y‬‬

‫* اگر بخواهیم مقادیر به تریب نمایش داده نشوند‪،‬میتوانیم از مکان مقادیر در }{ استفاده کنیم‪.‬‬
‫‪x = 5‬‬
‫‪y = 6.4354354‬‬
‫))‪print('x: {1}\ny: {2}\nz: {0}'.format(x, y, 4‬‬
‫‪#‬‬ ‫‪0 1 2‬‬

‫* میتوانیم از مقادیر چند بار نیز استفاده کنیم‪.‬‬


‫‪x = 5‬‬
‫‪y = 6.4354354‬‬
‫))‪print('x: {0}\ny: {0}\nz: {0}'.format(x, y, 4‬‬

‫* در دیکشنریها استفاده از کلید‪-‬مقدار برای فرمت دهی بسیار طوالنی است‪.‬‬


‫}‪d = {'x': 5, 'y': 8, 'z': 2.34‬‬
‫))]'‪print('x: {x}\ny: {y}\nz: {z}'.format(x=d['x'], y=d['y'], z=d['z‬‬
‫* برای حل این مشکل میتوانیم به اجای ارسال مقادیر از دو ستاره ( ** ) قبل از دیکشنری در هنگام فرمت دهی استفاده کنیم‪.‬‬
‫}‪d = {'x': 5, 'y': 8, 'z': 2.34‬‬
‫))‪print('x: {x}\ny: {y}\nz: {z}'.format(**d‬‬

‫* در توالیها (لیست‪ ،‬رشته و تاپل) از یک ستاره ( * ) قبل از توالی در هگام فرمت دهی استفاده میکنیم‪.‬‬
‫}{ ‪print('x:‬‬ ‫‪-‬‬ ‫))'‪y: {}\n'.format(*'re‬‬
‫}{ ‪print('x:‬‬ ‫‪-‬‬ ‫))]‪y: {}\n'.format(*[1, 2‬‬
‫}{ ‪print('x:‬‬ ‫‪-‬‬ ‫)))‪y: {}\n'.format(*(4, 8‬‬

‫ساختار کلی فرمت دهی با متد ‪ ( :format‬این مبحث با روش سوم مشترک است‪).‬‬

‫'}]‪'{[field-name][!conversion][:format-spec‬‬

‫* در ]‪ [field-name‬اسم‪ ،‬کلید و یا مکان متغیر را قرار می دهیم‪.‬‬


‫}‪print('x: {1‬‬ ‫‪-‬‬ ‫)))‪y: {0}'.format(*(4, 8‬‬ ‫‪# -> x: 8‬‬ ‫‪-‬‬ ‫‪y: 4‬‬

‫* در ]‪ [!conversion‬پس از ! نوع متغیر را مشخص میکنیم‪ ،‬از ‪ s‬برای نمایش رشته‪ r ،‬برای نمایش رشته با کتیشن و ‪ a‬برای‬
‫نمایش یونیکد کاراکتر استفاده میکنیم‪.‬‬
‫‪print('x: {0!s}'.format('reza')) # -> x: reza‬‬
‫'‪print('x: {0!r}'.format('reza')) # -> x: 'reza‬‬
‫'‪print('x: {0!a}'.format('ᓬ')) # -> x: '\u14ec‬‬

‫* در ]‪ [:format-spec‬پس از ‪ :‬نوع فرمت را تعیین میکنیم‪.‬‬


‫))‪print('x: {:.2f}'.format(1.265356‬‬ ‫‪# -> x: 1.27‬‬
‫ساختار کلی ]‪ ( :[:format-spec‬همهی این موارد اختیاری میباشند‪).‬‬

‫'}]‪'{:[[fill]align][sign][#][0][width][grouping-option][.precision][type‬‬

‫* در ]‪ [type‬نوع را مشخص میکنیم‪.‬‬

‫* برای اعداد صحیح از ‪ d‬استفاده میکنیم‪.‬‬


‫))‪print('{:d}'.format(3‬‬ ‫‪# -> 3‬‬

‫* اگر از ‪ c‬استفاده کنیم‪ ،‬کاراکتر یک یونیکد را نمایش میدهد‪..‬‬


‫))‪print('{:c}'.format(1195‬‬ ‫‪# -> ҫ‬‬

‫* از ‪ s‬برای رشتهها استفاده میکنیم‪.‬‬


‫))'‪r print('{:s}'.format('reza‬‬ ‫‪# -> reza‬‬

‫* از ‪ b‬برای نمایش مبنای ‪( 2‬باینری) یک عدد استفاده میکنیم‪.‬‬


‫))‪print('{:b}'.format(234‬‬ ‫‪# -> 11101010‬‬

‫* از ‪ o‬برای نمایش مبنای ‪ 8‬یک عدد استفاده میکنیم‪.‬‬


‫))‪print('{:o}'.format(234‬‬ ‫‪# -> 352‬‬

‫* از ‪ x‬برای نمایش مبنای ‪ 16‬یک عدد استفاده میکنیم‪ ،‬اگر از ‪ X‬استفاده کنیم‪ ،‬نتیجه نیز با حرف بزرگ نمایشداده میشود‪.‬‬
‫))‪print('{:x}'.format(234‬‬ ‫‪# -> ea‬‬
‫))‪print('{:X}'.format(234‬‬ ‫‪# -> EA‬‬

‫* از ‪ e‬برای نمایش نماد علمی یک عدد استفاده میکنیم‪ ،‬اگر از ‪ E‬استفاده کنیم‪ ،‬نتیجه نیز با حرف بزرگ نمایش داده میشود‪.‬‬
‫))‪print('{:e}'.format(234‬‬ ‫‪# -> 2.340000e+02‬‬
‫))‪print('{:E}'.format(234‬‬ ‫‪# -> 2.340000E+02‬‬

‫* از ‪ f‬برای نمایش اعداد اعشار استفاده میکنیم‪ ،‬تا ‪ 6‬رقم اعشار نمایش داده میشود‪.‬‬
‫))‪print('{:f}'.format(2.1‬‬ ‫‪# -> 2.100000‬‬

‫* از ‪ %‬برای نمایش عدد کسری بهصورت درصد استفاده میکنیم‪.‬‬


‫))‪print('{:%}'.format(2/3‬‬ ‫‪# -> 66.666667%‬‬

‫* در ]‪ [.precision‬و پس از ‪ .‬مشخص میکنیم تا چند رقم اعشار نمایش داده شود‪.‬‬


‫))‪print('{:.2f}'.format(4.5646543‬‬ ‫‪# -> 4.56‬‬
‫* در ]‪ [grouping-option‬برای جدا سازی اعداد بزرگ از کاما ( ‪ ) ,‬یا اندراسکور ( _ ) استفاده میکنیم‪.‬‬
‫))‪print('{:,.2f}'.format(3825987‬‬ ‫‪# -> 3,825,987.00‬‬
‫))‪print('{:_.2f}'.format(3825987‬‬ ‫‪# -> 3_825_987.00‬‬

‫* در ]‪ [width‬طول میدان را مشخص میکنیم‪ ،‬اگر طول میدان را بزرگتر از تعداد کاراکترها مشخص کنیم‪ ،‬به جای طول میدان اضافی‪،‬‬
‫قبل از کاراکترها فاصله گذاشته میشود‪.‬‬
‫))‪print('{:15,.2f}'.format(4543‬‬ ‫>‪# -‬‬ ‫‪4,543.00‬‬

‫* در ]‪ [0‬جاهای خالی را با ‪ 0‬پر میکنیم‪.‬‬


‫))‪print('{:015,.2f}'.format(4543‬‬ ‫‪# -> 0,000,004,543.00‬‬

‫* در ]‪ [#‬اگر قبل از ‪ b‬از ‪ #‬استفاده کنیم‪ ،‬قبل از عدد باینری ‪ 0b‬نمایش داده میشود‪.‬‬
‫))‪print('{:#b}'.format(43‬‬ ‫‪# -> 0b101011‬‬

‫* در ]‪ [#‬اگر قبل از ‪ o‬از ‪ #‬استفاده کنیم‪ ،‬قبل از مبنای ‪ 8‬عدد‪ 0o ،‬نمایش داده میشود‪.‬‬
‫))‪print('{:#o}'.format(43‬‬ ‫‪# -> 0o53‬‬

‫* در ]‪ [#‬اگر قبل از ‪ x‬از ‪ #‬استفاده کنیم‪ ،‬قبل از مبنای ‪ 16‬عدد‪ 0x ،‬نمایش داده میشود‪.‬‬
‫))‪print('{:#x}'.format(453‬‬ ‫‪# -> 0x1c5‬‬

‫* در ]‪ [sign‬اگر از ‪ +‬استفاده کنیم‪ ،‬عالمت عدد را نشان میدهد‪.‬‬


‫))‪print('{:+}'.format(43‬‬ ‫‪# -> +43‬‬
‫))‪print('{:+}'.format(-43‬‬ ‫‪# -> -43‬‬

‫* در ]‪ [sign‬اگر از ‪ -‬استفاده کنیم‪ ،‬اگر عدد منفی باشد عالمت آن را نمایش میدهد‪.‬‬
‫))‪print('{:-}'.format(43‬‬ ‫‪# -> 43‬‬
‫))‪print('{:-}'.format(-43‬‬ ‫‪# -> -43‬‬

‫* در ]‪ [sign‬اگر از فاصله استفاده کنیم‪ ،‬اگر عدد مثبت باشد‪ ،‬فاصله را نمایش میدهد و اگر عدد منفی باشد عالمت آن را نمایش میدهد‪.‬‬
‫))‪print('{: }'.format(43‬‬ ‫‪# -> 43‬‬
‫))‪print('{: }'.format(-43‬‬ ‫‪# -> -43‬‬
‫* در ]‪ [[fill]align‬در قسمت ‪ align‬با استفاده از < فضاهای خالی را در سمت راست و انتهای رشته قرار میدهیم‪.‬‬

‫* در ]‪ [[fill]align‬در قسمت ‪ align‬با استفاده از < فضاهای خالی را در سمت چپ و ابتدای رشته قرار میدهیم‪.‬‬

‫* در ]‪ [[fill]align‬در قسمت ‪ align‬با استفاده از ^ رشته را در میان فضاهای خالی قرار میدهیم‪.‬‬
‫))‪print('{:<15}'.format(43‬‬ ‫‪# -> 43‬‬
‫))‪print('{:>15}'.format(43‬‬ ‫>‪# -‬‬ ‫‪43‬‬
‫))‪print('{:^15}'.format(43‬‬ ‫>‪# -‬‬ ‫‪43‬‬

‫* در ]‪ [[fill]align‬در قسمت ‪ fill‬مشخص میکنیم که فضاهای خالی با چه چیزی پر شوند‪ ،‬حتما باید مشخص کنیم که‬
‫فضاهای خالی در کجا قرار گیرند‪.‬‬
‫))‪print('{:+<15}'.format(43‬‬ ‫‪# -> 43+++++++++++++‬‬
‫))‪print('{:+>15}'.format(43‬‬ ‫‪# -> +++++++++++++43‬‬
‫))‪print('{:+^15}'.format(43‬‬ ‫‪# -> ++++++43+++++++‬‬

‫* میتوانیم فرمت را در بیرون از رشته و در متد ‪ format‬نیز مشخص کنیم‪.‬‬


‫))‪print('{:{fill}{align}{width}}'.format(43, fill="+", align='^', width=15‬‬ ‫‪# -‬‬
‫‪> ++++++43+++++++‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :12‬فرمتدهی رشته با متد ‪( f-string‬روش سوم)‬

‫* این روش جدیدترین روش است و بهتر است از این روش استفاده کنیم‪.‬‬

‫* این روش همانند روش قبل است فقط بهجای استفاده از متد ‪ format‬از ‪ f‬یا ‪ F‬قبل از رشته استفاده میکنیم‪.‬‬
‫‪x = 14‬‬
‫‪print(f'{43:+^15} ----‬‬ ‫)'}‪{x ** 2:+‬‬ ‫‪# -> ++++++43+++++++ ----‬‬ ‫‪+196‬‬
‫‪print(F'{43:+^15} ----‬‬ ‫)'}‪{x ** 2:+‬‬ ‫‪# -> ++++++43+++++++ ----‬‬ ‫‪+196‬‬

‫* اگر داخل رشته از }{ استفاده کنیم و بخواهیم }{ نمایش داده شود باید آن را داخل یک }{ دیگر قرار دهیم‪.‬‬
‫)'}‪print(f'{{x}} is {4‬‬ ‫‪# -> {x} is 4‬‬

‫* اگر بخواهیم مقدار را در }{ نمایش دهد‪ ،‬باید متغیر را داخل }}}{{{ قرار دهیم‪.‬‬
‫)'}}}‪print(f'{{x}} is {{{4‬‬ ‫}‪# -> {x} is {4‬‬

‫* از توابع (فصل‪ )۶-‬نیز میتوانیم در ‪ f-string‬استفاده کنیم‪.‬‬


‫'‪x = 'reza‬‬

‫‪def up_case(s):‬‬
‫)(‪return s.upper‬‬

‫)'})‪print(f'x: {up_case(x‬‬ ‫‪# -> x: REZA‬‬

‫* از متدهای مختلف نیز میتوانیم در ‪ f-string‬استفاده کنیم‪.‬‬


‫'‪x = 'reza‬‬
‫)'})"‪print(f'x: {x.replace("a", "-‬‬ ‫‪# -> x: rez-‬‬

‫* برای اینکه بتوانیم چند رشته را پشت سرهم بنویسیم و فرمت دهی کنیم میتوانیم آنها را در یک متغیر قرار دهیم‪.‬‬
‫'‪name = 'ali‬‬
‫'‪age = '23‬‬
‫( = ‪msg‬‬
‫'‪f'name: {name}\n‬‬
‫'}‪f'age: {age‬‬
‫)‬
‫)‪print(msg‬‬
‫* برای استفاده از تاریخ از ماژول ‪ datetime‬استفاده میکنیم‪.‬‬

‫* برای مشخص کردن زمان کنونی از متدهای ‪ now‬و ‪ today‬ماژول ‪ datetime‬استفاده میکنیم‪.‬‬
‫‪from datetime import datetime‬‬

‫‪print(datetime.today()) # -> 2023-07-24 18:28:20.815442‬‬


‫‪print(datetime.now()) # -> 2023-07-24 18:28:20.815442‬‬

‫* میتوانیم تاریخ را نیز فرمت دهی کنیم‪ %Y ،‬نشان دهندهی سال‪ %m ،‬نشان دهندهی ماه‪ %d ،‬نشان دهندهی روز‪ %H ،‬نشان دهندهی ساعت‬
‫در فرمت ‪ ۲۴‬ساعته‪ %M ،‬نشان دهندهی دقیقه‪ %S ،‬نشان دهندهی ثانیه میباشند‪.‬‬
‫‪import datetime‬‬

‫)(‪today = datetime.datetime.today‬‬
‫)'}‪print(f'{today:%Y/%m/%d-%H:%M:%S‬‬ ‫‪# -> 2023/07/24-18:38:26‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :13‬حل مثال برای مبحث رشته‬

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

‫'‪s = 'this is an example for a string.‬‬


‫)' ‪x = input('x:‬‬
‫))‪print(s.count(x‬‬

‫‪ .2‬برنامهای بنویسیم که یک جمله از کاربر بگیرد و آخرین کلمهاش را نمایش دهد‪.‬‬

‫)' ‪s = input('enter string:‬‬


‫)(‪s = s.rstrip‬‬
‫)' '(‪x = s.rfind‬‬
‫)]‪print(s[x + 1:‬‬

‫‪ .3‬برنامهای بنویسیم که دو رشته از کاربر گرفته و مشخص کند که رشتهی دوم در رشتهی اول هست یا خیر‪.‬‬

‫)' ‪s1 = input('enter string1:‬‬


‫)' ‪s2 = input('enter string2:‬‬
‫)‪print(s2 in s1‬‬

‫‪ .۴‬برنامهای بنویسیم که یک رشته از کاربر گرفته و همهی فاصلهها را حذف کند‪.‬‬

‫)' ‪s = input('enter string:‬‬

‫))'' ‪print(s.replace(' ', '').replace('\t',‬‬

‫‪ .۵‬برنامهای بنویسیم که شماره تلفن را از کاربر گرفته و ‪ 0‬اول را پاک کند‪.‬‬

‫)' ‪s = input('enter number:‬‬

‫))'‪print(s.lstrip('0‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ 1۴‬و ‪ : 1۵‬تکالیف مبحث رشته و حل آنها‬

‫‪ .1‬یک رشته را از کاربر بگیرید و سپس تعداد جملهها‪ ،‬تعداد کلمهها‪ ،‬تعداد کل کاراکترها ( مثال حروف‪ ،‬فاصله‪ ،‬نقطه‪ ،‬ویرگول‬
‫و…) و تعداد حروف انگلیسی ( مثل ‪ c ،b ،a‬و ‪ )...‬را چاپ کنید‪.‬‬

‫)' ‪s = input('Enter your text:‬‬


‫)';'(‪sentences = s.count('.') + s.count('?') + s.count('!') + s.count‬‬
‫‪words = s.count(' ') + 1‬‬
‫)‪characters = len(s‬‬
‫)'!'(‪letters = characters - (s.count('.') + s.count('?') + s.count‬‬
‫)'‪+ s.count(';') + s.count(',') + s.count(':‬‬
‫))' '(‪+ s.count('-') + s.count‬‬

‫‪print('number‬‬ ‫‪of‬‬ ‫)‪sentences:', sentences‬‬


‫‪print('number‬‬ ‫‪of‬‬ ‫)‪words:', words‬‬
‫‪print('number‬‬ ‫‪of‬‬ ‫)‪characters:', characters‬‬
‫‪print('number‬‬ ‫‪of‬‬ ‫)‪letters:', letters‬‬

‫‪ .2‬یک کاراکتر از کاربر بگیرید و یونیکد آن را چاپ کنید‪.‬‬

‫)' ‪ch = input('Enter your char:‬‬


‫))‪print(ord(ch‬‬

‫‪ .3‬یک شماره همراه را از کاربر بگیرید و بررسی کنید که آیا تمام ارقام آن عدد است یا خیر؟‬

‫)' ‪phone = input('Enter your phone number:‬‬


‫))(‪print(phone.isdigit‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :1۶‬لیستها در پایتون (بخش اول)‬

‫* در لیستها از هر نوع دادهای میتوان استفاده کرد‪.‬‬


‫]‪daneshjoo = ['reza', 'dolati', 10, 15, 3, 20‬‬
‫]‪print(daneshjoo) # -> ['reza', 'dolati', 10, 15, 3, 20‬‬
‫* بهتر است از یک نوع داده در لیست استفاده کنیم‪.‬‬

‫* برای ایجاد لیست میتوانیم عناصر را داخل براکت ][ قرار دهیم آنها را کاما ( ‪ ) ,‬از هم جدا کینم‪.‬‬
‫]‪x = [1, 3, 5, 7, 9‬‬

‫* لیست را با استفاده از تابع ‪ list‬نیز میتوانیم ایجاد کنیم‪.‬‬


‫'‪s = 'reza32e5465‬‬
‫]'‪print(list(s)) # -> ['r', 'e', 'z', 'a', '3', '2', 'e', '5', '4', '6', '5‬‬

‫* با استفاده از متد ‪ split‬نیز میتوانیم عناصر یک رشته را براساس کاراکتری خاص جدا کنیم و در یک لیست قرار دهیم‪.‬‬
‫'‪s = 'reza-ali-ahmad-b-v‬‬
‫]'‪print(s.split('-')) # -> ['reza', 'ali', 'ahmad', 'b', 'v‬‬

‫* لیستها نیز همانند رشتهها ایندکس و مکان مشخص دارند و میتوانیم از ‪ slicing‬استفاده کنیم‪.‬‬
‫]'‪s = [1, 2, 4, 'Ali‬‬
‫‪#‬‬ ‫‪0 1 2‬‬ ‫‪3‬‬

‫)]‪print(s[0‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫]‪[1‬‬


‫)]‪print(s[:3‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫‪[1,‬‬ ‫]‪2, 4‬‬
‫)]‪print(s[1:‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫‪[2,‬‬ ‫]'‪4, 'Ali‬‬
‫)]‪print(s[:‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫‪[1,‬‬ ‫]'‪2, 4, 'Ali‬‬
‫)]‪print(s[1:3‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫‪[2,‬‬ ‫]‪4‬‬
‫)]‪print(s[::2‬‬ ‫‪#‬‬ ‫>‪-‬‬ ‫‪[1,‬‬ ‫]‪4‬‬

‫* لیستها نیز همانند رشتهها از قابلیت تکرار با * و جمع با ‪ +‬پشتیبانی میکنند‪.‬‬


‫‪s = [1,‬‬ ‫]‪5‬‬
‫‪d = [2,‬‬ ‫]‪6‬‬
‫‪print(s‬‬ ‫]‪* 2) # -> [1, 5, 1, 5‬‬
‫‪print(s‬‬ ‫]‪+ d + ['a', 'b', 3]) # -> [1, 5, 2, 6, 'a', 'b', 3‬‬

‫* اشیا در پایتون یا تغییر پذیرند (‪ )mutable‬مانند لیستها‪ ،‬یا تغییر ناپذیر (‪ )immutable‬مانند رشتهها ‪ ،‬اعداد و تاپل‪.‬‬
‫]‪s = [1, 5‬‬
‫‪s[0] = 14‬‬
‫]‪print(s) # -> [14, 5‬‬
‫* در لیستها میتوانیم از عملگرهای مقایسهای استفاده کنیم‪.‬‬
‫‪s = [1,‬‬ ‫]‪5‬‬
‫‪x = [2,‬‬ ‫]‪7‬‬
‫‪n = [1,‬‬ ‫]‪5‬‬
‫‪print(s‬‬ ‫)‪== x‬‬ ‫>‪# -‬‬ ‫‪False‬‬
‫‪print(s‬‬ ‫)‪== n‬‬ ‫>‪# -‬‬ ‫‪True‬‬

‫* در لیستها میتوانیم از عملگرهای عضویت استفاده کنیم‪.‬‬


‫]‪s = [1, 5‬‬
‫)‪print(2 in s‬‬ ‫>‪# -‬‬ ‫‪False‬‬
‫)‪print(5 in s‬‬ ‫>‪# -‬‬ ‫‪True‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :1۷‬لیستها در پایتون (بخش دوم)‬

‫* در لیستها برخالف رشتهها و اعدد‪ ،‬اگر در لیست دوم که آن را مساوی لیست اول قرار دادیم تغییر اعمال کنیم‪ ،‬این تغییرات در لیست اول‬
‫نیز اعمال میشوند‪.‬‬
‫]‪s = [1, 5‬‬
‫‪z = s‬‬
‫‪z[0] = 0‬‬
‫]‪print(s) # -> [0, 5‬‬

‫* برای اینکه تغییرات اعمال نشوند میتوانیم از کپی لیست با مساوی قرار دادن لیست دوم با تمام عناصر لیست اول استفاده کنیم‪.‬‬
‫]‪s = [1, 5‬‬
‫]‪z = s[:‬‬
‫‪z[0] = 0‬‬
‫]‪print(s) # -> [1, 5‬‬

‫* میتوانیم با استفاده از متد ‪ copy‬لیست را کپی کنیم‪.‬‬


‫]‪s = [1, 5‬‬
‫)(‪z = s.copy‬‬
‫‪z[0] = 0‬‬
‫]‪print(s) # -> [1, 5‬‬

‫* برای دسترسی به عناصر لیست و یا رشته داخلی در هنگام ‪ slicing‬باید از یک براکت ][ دیگر نیز استفاده کنیم‪.‬‬
‫]]'‪x = [1, 5, ['ali', 'b‬‬

‫‪print(x[2][0]) # -> ali‬‬


‫‪print(x[2][0][1]) # -> l‬‬

‫* اگر یک لیست داخل لیست دیگر باشد و با استفاده از متد ‪ copy‬لیست را کپی کنیم و کپی لیست را تغییر بدهیم‪ ،‬تغییرات در لیست‬
‫داخلی نیز اعمال میشوند‪ ،‬به این نوع کپی‪ ،‬کپی سطحی میگوییم که در این حالت عناصر داخلی کپی نمی شوند بلکه ارجاع داده میشوند‪.‬‬
‫]]'‪x = [1, 5, ['ali', 'b‬‬
‫)(‪z = x.copy‬‬
‫'‪z[2][0] = 'reza‬‬
‫]]'‪print(x) # -> [1, 5, ['reza', 'b‬‬

‫* برای حل این مشکل میتوانیم از کپی عمیق با استفاده از متد ‪ deepcopy‬ماژول ‪ copy‬استفاده کنیم که در آن عناصر داخلی نیز کپی‬
‫میشوند‪.‬‬
‫‪from copy import deepcopy‬‬

‫]]'‪x = [1, 5, ['ali', 'b‬‬


‫)‪z = deepcopy(x‬‬
‫'‪z[2][0] = 'reza‬‬
‫]]'‪print(x) # -> [1, 5, ['ali', 'b‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :1۸‬لیستها در پایتون (بخش سوم)‬

‫* با استفاده از متد ‪ append‬میتوانیم عنصر جدید به لیست اضافه کنیم‪.‬‬


‫]‪x = [1, 5‬‬
‫)‪x.append(6‬‬
‫]‪print(x) # -> [1, 5, 6‬‬

‫* در هنگام تغییر عناصر لیست میتوانیم چند ایندکس را انتخاب کنیم و تغییر بدهیم‪.‬‬
‫]‪x = [1, 5, 6, 7, 8‬‬
‫]'‪x[2:5] = ['a', 'b‬‬
‫]'‪print(x) # -> [1, 5, 'a', 'b‬‬

‫* برای حذف یک یا چند عنصر از لیست میتوانیم از ‪ del‬استفاده کنیم‪.‬‬


‫]‪x = [1, 5, 6‬‬
‫]‪del x[2‬‬
‫]‪print(x) # -> [1, 5‬‬

‫* برای مشخص کردن تعداد عناصر لیست میتوانیم از تابع ‪ len‬استفاده کنیم‪.‬‬
‫]‪x = [1, 5, 6‬‬
‫))‪print(len(x‬‬ ‫‪# -> 3‬‬

‫* در پایتون میتوانیم از انتصاب چندگانه استفاده کنیم‪ ،‬به اینصورت که متغیرها را به ترتیب بنویسیم و مقداردهی کنیم‪.‬‬
‫= ‪a, b, c‬‬ ‫]‪[2, 3, 5‬‬
‫)‪print(a‬‬ ‫‪# -> 2‬‬
‫)‪print(b‬‬ ‫‪# -> 3‬‬
‫)‪print(c‬‬ ‫‪# -> 5‬‬

‫* در هنگام انتصاب چندگانه اگر تعداد مقادیر از متغیرها بیشتر بود‪ ،‬با گذاشتن ستاره ( * ) قبل از متغیر‪ ،‬آن متغیر مقادیر اضافی را میگیرد‪.‬‬
‫‪a, *b, c,‬‬ ‫=‬ ‫]‪[2, 3, 5, 1, 6, 9‬‬
‫)‪print(a‬‬ ‫‪#‬‬ ‫‪-> 2‬‬
‫)‪print(b‬‬ ‫‪#‬‬ ‫]‪-> [3, 5, 1, 6‬‬
‫)‪print(c‬‬ ‫‪#‬‬ ‫‪-> 9‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :1۹‬چندتاییها (تاپل) در پایتون‬

‫* در تاپل میتوانیم هر نوع دادهای بنویسیم و بهتر است عناصر را داخل پرانتز () قرار دهیم و با کاما ( ‪ ) ,‬آنها را جدا کنیم‪.‬‬
‫)]‪x = (1, 2, 'reza', [5, 1‬‬

‫* در لیستها بهتر است از یک نوع داده استفاده کنیم و از تاپلها بهتر است زمانی استفاده کنیم که چند نوع داده داریم‪.‬‬

‫* تاپلها تغییر ناپذیر (‪ )immutable‬هستند‪.‬‬


‫)‪x = (1, 2, 3‬‬
‫‪x[1] = 5‬‬

‫* تاپلها به دلیل تغییر ناپذیر بودن‪ ،‬در مصرف حافظه بهینه ترند‪.‬‬

‫* لیستهای درون تاپل تغییر پذیرند‪.‬‬


‫)]‪x = (1, 2, [3, 4‬‬
‫‪x[2][1] = 6‬‬
‫)]‪print(x) # -> (1, 2, [3, 6‬‬

‫* برای تغییر دادن عناصر تاپل میتوانیم ابتدا آن را به لیست تبدیل کنیم و بعد از اعمال تغییرات با استفاده از ‪ tuple‬دوباره لیست را به‬
‫تاپل تبدیل کنیم‪.‬‬
‫)‪x = (1, 2, 3‬‬
‫)‪x = list(x‬‬
‫‪x[2] = 6‬‬
‫)‪x = tuple(x‬‬
‫)‪print(x) # -> (1, 2, 6‬‬

‫* هنگامی که میخواهیم فقط یک عدد را در تاپل قرار دهیم باید بعد از آن از کاما ( ‪ ) ,‬استفاده کنیم چون در غیر اینصورت نوع آن ‪int‬‬
‫میباشد‪.‬‬
‫‪x = 1,‬‬
‫))‪print(type(x‬‬ ‫>'‪# -> <class 'tuple‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :2۰‬دیکشنریها در پایتون (قسمت اول)‬

‫* برای دیکشنری از آکوالد }{ استفاده میکنیم‪ ،‬دیکشنری از دو قسمت کلید و مقدار تشکیل شده است‪ ،‬ابتدا کلید قرار دارد و سپس‬
‫مقدارش در جلوی آن و پس از ‪ :‬قرار دارد‪.‬‬

‫* کلیدها در یک دیکشنری نمیتوانند تکراری باشند اما مقادیر میتوانند‪.‬‬

‫ساختار دیکشنری‪:‬‬

‫}‪Dictionary: {key: value, key: value‬‬


‫}‪d = {'a': 3, 'b': 7, 'c': 3‬‬

‫* برای بهدست آوردن عناصر دیکشنری نمیتوانیم از ایندکس آنها استفاده کنیم و از کلیدها استفاده میکنیم‪.‬‬
‫}‪d = {'a': 3, 'b': 7, 'c': 3‬‬
‫‪print(d['b']) # -> 7‬‬

‫* کلیدها میتوانند هر نوع داهی تغییر ناپذیر باشند‪ ،‬تاپل اگر عضو تغییر پذیر مانند لیست داشته باشد نمیتوان از آن بهعنوان کلید دیکشنری‬
‫استفاده کرد‪.‬‬

‫* مقادیر میتوانند هر نوعی باشند‪.‬‬


‫}}‪d = {'a': 3, 'b': 7, 5: [1, 2], (3, 5): {'a': 2‬‬

‫* در دیکشنریها برخالف توالیها (لیست‪ ،‬تاپل و رشته) ترتیب مهم نیست چون از ایندکس استفاده نمیکنیم‪ ،‬بلکه از کلید استفاده میکنیم‪.‬‬

‫* اگر از کلید تکراری استفاده کنیم مقدار کلید جایگزین میشود‪.‬‬


‫}‪d = {'a': 3, 'b': 7, 'a': 9‬‬
‫}‪print(d) # -> {'a': 9, 'b': 7‬‬

‫* مقادیر دیکشنری قابل تغییرند‪.‬‬


‫}‪d = {'a': 3, 'b': 7, 'c': 9‬‬
‫]‪d['c'] = [1, 2‬‬
‫}]‪print(d) # -> {'a': 3, 'b': 7, 'c': [1, 2‬‬

‫* میتوانیم کلید و مقدار جدید به دیکشنری اضافه کنیم‪.‬‬


‫}‪d = {'a': 3, 'b': 7‬‬
‫‪d['m'] = 1,‬‬
‫})‪print(d) # -> {'a': 3, 'b': 7, 'm': (1,‬‬

‫* با استفاده از متد ‪ get‬میتوانیم مقدار یک کلید را بهدست آوریم و در صورتیکه کلید وجود نداشته باشد نتیجه ‪ None‬است‪.‬‬
‫}‪d = {'a': 3, 'b': 7‬‬
‫‪print(d.get('a')) # -> 3‬‬
‫‪print(d.get('w')) # -> None‬‬
‫* با استفاده از متد ‪ keys‬کلیدهای یک دیکشنری را بهدست میآوریم‪.‬‬
‫}‪d = {'a': 3, 'b': 7‬‬
‫)]'‪print(d.keys()) # -> dict_keys(['a', 'b‬‬

‫* با استفاده از متد ‪ values‬مقادیر یک دیکشنری را بهدست میآوریم‪.‬‬


‫}‪d = {'a': 3, 'b': 7‬‬
‫)]‪print(d.values()) # -> dict_values([3, 7‬‬

‫* با استفاده از متد ‪ values‬کلیدها و مقادیر یک دیکشنری را بهدست میآوریم‪.‬‬


‫}‪d = {'a': 3, 'b': 7‬‬
‫)])‪print(d.items()) # -> dict_items([('a', 3), ('b', 7‬‬

‫* عناصر دیکشنری را میتوانیم با استفاده از ‪ list‬به لیست تبدیل کنیم‪.‬‬


‫}‪d = {'a': 3, 'b': 7‬‬
‫]'‪print(list(d.keys())) # -> ['a', 'b‬‬
‫]‪print(list(d.values())) # -> [3, 7‬‬
‫])‪print(list(d.items())) # -> [('a', 3), ('b', 7‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :21‬دیکشنریها در پایتون (قسمت دوم)‬

‫* برای حذف یک عنصر از دیکشنری میتوانیم از ‪ del‬استفاده کنیم‪.‬‬


‫}‪d = {'a': 3, 'b': 7‬‬
‫]'‪del d['b‬‬
‫}‪print(d) # -> {'a': 3‬‬

‫* کلیدهای دیکشنری تغییر نمیکنند اما میتوانیم ابتدا مقدار را بدر یک متغیر قرار دهیم‪ ،‬سپس کلید را حذف کنیم و درنهایت یک کلید‬
‫جدید ایجاد کنیم و مقدار ذخیره شده از قبل را به آن بدهیم‪.‬‬
‫}‪d = {'a': 3, 'b': 7‬‬
‫]'‪x = d['b‬‬
‫]'‪del d['b‬‬
‫‪d['x'] = x‬‬
‫}‪print(d) # -> {'a': 3, 'x': 7‬‬

‫* از تابع ‪ sorted‬میتوانیم برای مرتب سازی استفاده کنیم‪ ،‬اگر عناصر عدد باشند از کوچک به بزرگ و اگر حروف باشند بر اساس حروف‬
‫الفبا مرتب میشوند‪.‬‬
‫]‪a = [15, 1, 7‬‬
‫]'‪b = ['c', 'a', 'm‬‬
‫]‪print(sorted(a)) # -> [1, 7, 15‬‬
‫]'‪print(sorted(b)) # -> ['a', 'c', 'm‬‬

‫* اگر بخواهیم تابع ‪ sorted‬مرتب سازی را برعکس انجام دهد‪ ،‬باید مقدار ‪ reverse‬را ‪ True‬قرار دهیم‪.‬‬
‫]‪a = [15, 1, 7‬‬
‫]'‪b = ['c', 'a', 'm‬‬
‫))‪print(sorted(a, reverse=True‬‬ ‫]‪# -> [15, 7, 1‬‬
‫))‪print(sorted(b, reverse=True‬‬ ‫]'‪# -> ['m', 'c', 'a‬‬

‫* از تابع ‪ sorted‬در دیکشنری نیز میتوانیم استفاده کنیم‪.‬‬


‫}‪d = {'c': 1, 'a': 3, 'z': 2‬‬
‫)))(‪print(sorted(d.keys‬‬ ‫]'‪# -> ['a', 'c', 'z‬‬
‫]‪print(sorted(d.values())) # -> [1, 2, 3‬‬
‫])‪print(sorted(d.items())) # -> [('a', 3), ('c', 1), ('z', 2‬‬

‫* با استفاده از تابع ‪ dict‬میتوانیم دیکشنری ایجاد کنیم‪ ،‬به اینصورت که هر مقدار و کلید داخل یک تاپل باشند و همه عناصر داخل لیست‬
‫باشند‪.‬‬
‫)])‪d = dict([('a', 5), ('b', 10‬‬
‫}‪print(d) # -> {'a': 5, 'b': 10‬‬

‫* اگر کلیدها رشته باشند میتوانیم به جای استفاده از لیست و تاپل به کلیدها مقدار را بدهیم‪.‬‬
‫)‪d = dict(a=5, b=10‬‬
‫}‪print(d) # -> {'a': 5, 'b': 10‬‬
‫* با استفاده از حلقه ‪ ( for‬توضیحات در فصل ‪ )۵‬نیز میتوانیم دیکشنری ایجاد کنیم‪.‬‬
‫})‪d = {x: x ** 2 for x in range(5‬‬
‫}‪print(d) # -> {0: 0, 1: 1, 2: 4, 3: 9, 4: 16‬‬

‫* میتوانیم از دیکشنریهای تودرتو استفاده کنیم‪.‬‬


‫{ = ‪d‬‬
‫‪'first': {'name': 'reza', 'age': 24},‬‬
‫}‪'second': {'name': 'ali', 'age': 27‬‬
‫}‬

‫)‪print(d‬‬ ‫}}‪# -> {'first': {'name': 'reza', 'age': 24}, 'second': {'name': 'ali', 'age': 27‬‬

‫* از دیکشنری نمیتوانیم به عنوان کلید استفاده کنیم چون تغییر پذیر است ‪ ،‬اما میتوانیم به عنوان مقدار استفاده کنیم‪.‬‬

‫* با استفاده از تابع ‪ len‬میتوانیم مشخص کنیم دیکشنری چند عنصر دارد‪.‬‬


‫}‪d = {'a': 10, 'b': 30‬‬
‫‪print(len(d)) # -> 2‬‬

‫* در دیکشنری برخالف لیست‪ ،‬تاپل و رشته نمیتوانیم از تکرار * و جمع ‪ +‬استفاده کنیم‪.‬‬

‫* در دیکشنری میتوانیم از سایر عملگرها ( ==‪ is ،in ،‬و ‪ )...‬استفاده کینم‪.‬‬

‫* از تابع ‪ zip‬میتوانیم برای زیپ کردن دو لیست به هم استفاده کنیم‪.‬‬


‫]'‪k = ['a', 'b', 'c‬‬
‫]‪v = [1, 2, 3‬‬
‫)‪z = zip(k, v‬‬
‫])‪print(list(z)) # -> [('a', 1), ('b', 2), ('c', 3‬‬

‫))‪d = dict(zip(k, v‬‬


‫}‪print(d) # -> {'a': 1, 'b': 2, 'c': 3‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :22‬مجموعهها در پایتون (قسمت دوم)‬

‫* به اشیایی که دارای ویژگیها و صفات مشترک هستند‪ ،‬مجموعه گفته میشود‪.‬‬

‫* مجموعهها در پایتون با آکوالد (}{) مشخص میشوند و عناصر با کاما ( ‪ ) ,‬از یکدیگر جدا میشوند‪.‬‬
‫}‪s = {1, 5, 6, 9‬‬

‫* مجموعهها قابل تغییرند‪.‬‬

‫* برای اضافه کردن یک عنصر جدید به مجموعه از متد ‪ add‬استفاده میکنیم‪.‬‬


‫}‪s = {1, 5‬‬
‫)‪s.add(8‬‬
‫}‪print(s) # -> {8, 1, 5‬‬

‫* مجموعهها عناصر تکراری را حذف میکنند‪.‬‬


‫}‪s = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5‬‬

‫)‪print(s‬‬ ‫}‪# -> {1, 2, 5‬‬

‫* ترتیب در مجموعه اهمیت ندارد و نمیتوانیم با ایندکس به عناصر مجموعه دست یابیم‪.‬‬

‫* در مجموعه میتوانیم از عملگرهای ( ==‪ is ،in ،‬و ‪ )...‬استفاده کینم‪.‬‬

‫* آکوالد خالی }{ تشکیل دیکشنری میدهد‪.‬‬


‫}{ = ‪s‬‬
‫}{ >‪print(s) # -‬‬
‫>'‪print(type(s)) # -> <class 'dict‬‬

‫* برای ایجاد مجموعه خالی باید از ‪ set‬استفاده کنیم‪.‬‬


‫)(‪s = set‬‬
‫)(‪print(s) # -> set‬‬
‫>'‪print(type(s)) # -> <class 'set‬‬

‫* مجموعهها نمیتوانند به عنوان کلید دیکشنری قرار بگیرند‪ ،‬چون قابل تغییرند‪.‬‬

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

‫* مجموعهها هر نوع داده تغییر ناپذیر مانند عدد‪ ،‬رشته‪ ،‬تاپل را در خود ذخیره میکنند‪.‬‬

‫* برای اضافه کردن چند عنصر به مجموعه از متد ‪ update‬استفاده میکنیم‪.‬‬


‫)(‪s = set‬‬
‫)]‪s.update([1, 2, 4], [3, 1, 4], [6, 7‬‬
‫}‪print(s) # -> {1, 2, 3, 4, 6, 7‬‬
‫* برای حذف یک عنصر از مجموعه میتوانیم از دو متد ‪ remove‬و ‪ discard‬استفاده کنیم‪ ،‬تفاوت این دو متد ایناست که اگر عنصر‬
‫وجود نداشته باشد متد ‪ remove‬خطا میدهد اما متد ‪ discard‬خطا نمیدهد‪.‬‬
‫}‪s = {1, 2, 3‬‬
‫)‪s.remove(3‬‬
‫)‪s.discard(2‬‬
‫)‪s.discard(5‬‬
‫}‪print(s) # -> {1‬‬

‫* از تابع ‪ len‬برای شمردن تعداد عناصر مجموعه استفاده میکنیم‪ ،‬عناصر تکراری شمرده نمیشوند‪.‬‬
‫}‪s = {1, 1, 1, 1, 2, 3‬‬
‫‪print(len(s)) # -> 3‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :23‬مجموعهها در پایتون (قسمت دوم)‬

‫* تفاضل دو مجموعه عبارت است از همهی مواردی که در مجموعه اول هستند اما در مجموعه دوم نیستند‪ ،‬برای تفاضل از تفریق ( ‪) -‬‬
‫استفاده میکنیم‪ ،‬از متد ‪ difference‬نیز میتوانیم برای بهدست آوردن تفاضل دو مجموعه استفاده کنیم‪.‬‬
‫}‪p = {3, 9, 15, 12, 6, 18‬‬
‫}‪q = {4, 16, 10, 2, 8, 14, 12, 6, 18‬‬

‫}‪print(p - q) # -> {9, 3, 15‬‬


‫}‪print(p.difference(q)) # -> {9, 3, 15‬‬

‫* اجتماع دو مجموعه عبارت است از همهی مواردی که در دو مجموعه وجود دارد‪ ،‬برای اجتماع دو مجموعه از پایپ ( | ) استفاده میکنیم‪ ،‬از‬
‫متد ‪ union‬نیز میتوانیم برای بهدست آوردن اجتماع دو مجموعه استفاده کنیم‪.‬‬
‫}‪p = {3, 9, 15, 12, 6, 18‬‬
‫}‪q = {4, 16, 10, 2, 8, 14, 12, 6, 18‬‬

‫}‪print(p | q) # -> {2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18‬‬


‫}‪print(p.union(q)) # -> {2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18‬‬

‫* اشتراک دو مجموعه عبارت است از همهی مواردی که در دو مجموعه مشترک است‪ ،‬برای اشتراک دو مجموعه از & استفاده میکنیم‪ ،‬از متد‬
‫‪ intersection‬نیز میتوانیم برای بهدست آوردن اشتراک دو مجموعه استفاده کنیم‪.‬‬
‫}‪p = {3, 9, 15, 12, 6, 18‬‬
‫}‪q = {4, 16, 10, 2, 8, 14, 12, 6, 18‬‬

‫}‪print(p & q) # -> {18, 12, 6‬‬


‫}‪print(p.intersection(q)) # -> {18, 12, 6‬‬

‫* تفاضل مقارن دو مجموعه به معنی همهی موارد دو مجموعه به جز اشتراک آنها میباشد‪ ،‬برای تفاضل مقارن دو مجموعه از ^ استفاده‬
‫میکنیم‪ ،‬از متد ‪ symmetric_difference‬نیز میتوانیم برای بهدست آوردن تفاضل مقارن دو مجموعه استفاده کنیم‪.‬‬
‫}‪p = {3, 9, 15, 12, 6, 18‬‬
‫}‪q = {4, 16, 10, 2, 8, 14, 12, 6, 18‬‬

‫}‪print(p ^ q) # -> {2, 3, 4, 8, 9, 10, 14, 15, 16‬‬


‫}‪print(p.symmetric_difference(q)) # -> {2, 3, 4, 8, 9, 10, 14, 15, 16‬‬

‫))‪print((q | p) - (q & p‬‬ ‫}‪# -> {2, 3, 4, 8, 9, 10, 14, 15, 16‬‬
‫))‪print((q - p) | (p - q‬‬ ‫}‪# -> {2, 3, 4, 8, 9, 10, 14, 15, 16‬‬

‫* یک مجموعه زمانی زیرمجموعهی یک مجموعه است که همهی عناصر آن در مجموعهی دیگر باشد‪.‬‬
‫* برای بررسی زیرمجموعه بودن یک مجموعه میتوانیم از >‪ < ،‬و متدهای ‪ issubset‬و ‪ issuperset‬استفاده کنیم‪.‬‬
‫}‪a = {10, 30, 60, 40, 50, 20‬‬
‫}‪b = {10, 30, 60‬‬

‫‪print(b < a) # -> True‬‬


‫‪print(a < b) # -> False‬‬
‫‪print(a > b) # -> True‬‬
‫‪print(a.issuperset(b)) # -> True‬‬
‫‪print(a.issubset(b)) # -> False‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :2۴‬حل مثال برای مبحث دیکشنری‪ ،‬لیست و مجموعه‬

‫* استفاد از لیست یا تاپل ندارد‪ ،‬اما بهتر است در مواردی که نیاز به تغییر است‪ ،‬از لیست استفاده شود‪.‬‬

‫‪ .1‬با استفاده از لیستها‪ ،‬نام و نمرات سه درس یک دانشجو را دریافت کنیم و میانگین نمرات آن را نشان دهیم‪.‬‬

‫][ = ‪marks‬‬
‫)' ‪name = input('name:‬‬
‫))' ‪physics = int(input('physics mark:‬‬
‫)‪marks.append(physics‬‬
‫))' ‪biology = int(input('biology mark:‬‬
‫)‪marks.append(biology‬‬
‫))' ‪math = int(input('math mark:‬‬
‫)‪marks.append(math‬‬
‫‪ave = (marks[0] + marks[1] + marks[2]) / 3‬‬
‫)'}‪print(f'marks: {marks}\naverage: {ave:.2f‬‬

‫‪ .2‬یک شماره تلفن یا کدملی را بهصورت رشته از کاربر بگیریم و همهی اعداد آن را به صورت یک رشته در یک لیست ذخیره‬
‫کنیم‪.‬‬

‫)' ‪number = input('number:‬‬


‫))‪print(list(number‬‬

‫‪ .3‬دو لیست داریم‪ ،‬به جای آخرین عنصر لیست اول‪ ،‬لیست دوم را بگذاریم‪.‬‬

‫]‪l1 = [1, 2, 3‬‬


‫]'‪l2 = ['a', 'b', 'c‬‬
‫‪l1[-1] = l2‬‬
‫]]'‪print(l1) # -> [1, 2, ['a', 'b', 'c‬‬

‫‪ .۴‬یک برنامه بنویسیم که یک رشته از کاربر بگیرد و تعدا کاراکترها را به جز کاراکترهای تکراری بشمارد‪.‬‬

‫)' ‪s = input('enter string:‬‬


‫)‪chs = set(s‬‬
‫)‪print(chs‬‬
‫))‪print(len(chs‬‬

‫‪ .۵‬اسم و نمره دو دانشجو را در یک دیکشنری ذخیره کنیم‪.‬‬

‫}{ = ‪marks‬‬
‫)' ‪name1 = input('name:‬‬
‫))' ‪mark1 = float(input('mark:‬‬
‫‪marks[name1] = mark1‬‬
‫)' ‪name2 = input('name:‬‬
‫))' ‪mark2 = float(input('mark:‬‬
‫‪marks[name2] = mark2‬‬
‫)‪print(marks‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ 2۵‬و ‪ : 2۶‬تکالیف مبحث دیکشنری و مجموعه و حل آنها‬

‫‪ .1‬فرض کنید شما قرار است یک دیکشنری واقعی بنویسید‪ .‬با استفاده از نوع داده دیکشنری آن را پیاده سازی کنید‪ .‬دقت کنید‬
‫که کلمه اصلی باید کلید دیکشنری باشد و معانی آن میتوانند بیشتر از یک کلمه باشند‪ .‬معانی را از کاربر بپرسید‪.‬‬

‫}{ = ‪dictionary‬‬
‫)' ‪key = input('word:‬‬
‫)'‪meaning = input('meaning: '). split(',‬‬
‫‪dictionary[key] = meaning‬‬

‫)' ‪key = input('word:‬‬


‫)'‪meaning = input('meaning: '). split(',‬‬
‫‪dictionary[key] = meaning‬‬

‫)‪print(dictionary‬‬

‫‪ .2‬حاال پس از انجام سوال قبلی‪ ،‬بخشی را به برنامه اضافه کنید تا یک کلمه را از کاربر گرفته و معانی آن را از دیکشنری خوانده و‬
‫نمایش دهد‪.‬‬

‫)' ‪word = input('your word:‬‬


‫)]‪print('meanings: ', dictionary[word‬‬

‫‪ .3‬دو لیست مختلف از شماره تلفن های افراد مختلف داریم‪ .‬ممکن است بعضی از شماره ها در لیست ها تکراری باشد (مثال‬
‫‪ ۰۹3۹‬در هر دو لیست وجود داشته باشد)‪ .‬لیست جدیدی ایجاد کنید که دو لیست قبلی را ترکیب میکند ولی تکراری ها در آن‬
‫وجود ندارند‪(.‬از نوع داده مجموعه کمک بگیرید)‬

‫]'‪phones1 = ['0939', '0914', '0903‬‬


‫]'‪phones2 = ['0938', '0919', '0903‬‬
‫))‪s = list(set(phones1 + phones2‬‬
‫]'‪print(s) # -> ['0938', '0914', '0903', '0939', '0919‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :2۷‬بولین و ‪ NoneType‬در پایتون‬

‫* اگر متغیر‪ ،‬مقدار نداشته باشد میتوانیم از ‪ None‬استفاده کنیم‪.‬‬


‫‪n = None‬‬
‫‪print(n) # -> None‬‬
‫>'‪print(type(n)) # -> <class 'NoneType‬‬

‫* بولین به مقادیر ‪ True‬و ‪ False‬گفته میشود که در واقع عدد هستند‪ 1 ،‬نمایانگر ‪True‬و ‪ 0‬نمایانگر ‪ False‬میباشد‪.‬‬
‫‪t = True‬‬
‫‪f = False‬‬
‫‪print(t) # -> True‬‬
‫>'‪print(type(t)) # -> <class 'bool‬‬
‫‪print(f) # -> False‬‬
‫>'‪print(type(f)) # -> <class 'bool‬‬
‫‪print(int(t)) # -> 1‬‬
‫‪print(int(f)) # -> 0‬‬
‫‪print(t + 1) # -> 2‬‬
‫‪print(f + 1) # -> 1‬‬
‫‪print(True == 1) # -> True‬‬
‫‪print(False == 0) # -> True‬‬

‫* در شرطها ‪ False ،0‬است‪ ،‬اما هر عددی به غیر از ‪ True ،0‬درنظر گرفته میشود‪.‬‬
‫‪if 0:‬‬
‫)‪print(0‬‬
‫‪if 1:‬‬
‫)‪print(1‬‬
‫‪if -54.23:‬‬
‫)‪print(-54.23‬‬

‫* در شرطها ‪ False ،None‬در نظر گرفته میشود‪.‬‬

‫* در شرطها تمام اشیای خالی ()(‪ False ،)'', (), {}, [], set‬درنظر گرفته میشوند و باقی موارد ‪ True‬درنظر گرفته‬
‫میشوند‪.‬‬

‫* از تابع ‪ bool‬میتوانیم برای تبدیل به بولین استفاده کنیم‪.‬‬


‫))][(‪print(bool‬‬ ‫‪# -> False‬‬
‫))‪print(bool(24‬‬ ‫‪# -> True‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :2۸‬عملگرهای منطقی با نوع داده‬

‫* در حالتی که دو طرف ‪ ،and‬عدد یا نوع داده پر یا خالی داشته باشیم و هیچ عملگر مقایسهای (><==) نداشته باشیم از قاعدهی زیر استفاده‬
‫میکنیم‪.‬‬
‫)‪print(x and y‬‬
‫‪if x is False -> x‬‬
‫‪if x is True -> y‬‬
‫][ >‪print([] and 2) # -‬‬
‫‪print(5 and 10) # -> 10‬‬
‫‪print(0 and 4 < 10) # -> 0‬‬
‫‪print(5 and 4 < 10) # -> True‬‬

‫* در حالتی که دو طرف ‪ ،or‬عدد یا نوع داده پر یا خالی داشته باشیم و هیچ عملگر مقایسهای (><==) نداشته باشیم از قاعدهی زیر استفاده‬
‫میکنیم‪.‬‬
‫)‪print(x or y‬‬
‫‪if x is False -> y‬‬
‫‪if x is True -> x‬‬
‫‪print([] or 2) # -> 2‬‬
‫‪print(5 or 10) # -> 5‬‬
‫‪print(0 or 4 < 10) # -> True‬‬
‫‪print(5 or 4 < 10) # -> 5‬‬

‫ــــــــــــــــــــــــــــــــــــــــ پایان فصل سوم ـــــــــــــــــــــــــــــــــــــــــ‬


‫فصل چهارم‪ :‬دستورات کنترلی (تصمیم)‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :1‬گرفتن چند ورودی در یک خط‬

‫* میتوانیم چند ورودی در یک خط از کاربر بگیریم‪.‬‬


‫)' '(‪x, y, z = input('x, y, z: ').split‬‬
‫)‪print('x:', x, '\ny:', y, '\nz:', z‬‬

‫* باید تعداد متغیرها با تعداد ورودیها برابر باشند و ورودیها بهصورت خودکار رشته هستند‪.‬‬

‫* برای اینکه بتوانیم تعداد زیادی ورودی بگیریم از لیست استفاده میکنیم‪ ،‬به اینصورت که یک رشته میگیریم و با کاما و یا ‪ ...‬جدا میکنیم‪.‬‬
‫)'‪x = input('Enter string: ').split(',‬‬
‫)‪print(x‬‬

‫* همچنین میتوانیم از حلقهها (در درسهای آتی بررسی میشود) استفاده کنیم‪.‬‬
‫])'‪x = [int(x) for x in input('x: ').split(',‬‬
‫)‪print(x‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :2‬ساختار تصمیم (بخش اول)‬

‫* برای بیان شرط از ‪ if‬استفاده میکنیم‪.‬‬

‫* ابتدا ‪ if‬را مینویسم و سپس شرط را مینویسم‪.‬‬

‫* ‪ if‬براساس ‪ True‬و ‪ False‬عمل میکند‪.‬‬

‫* بعد از شرط دونقطه ( ‪ ) :‬میگذاریم و دستورمان را با رعایت فرورفتگی مینویسیم‪.‬‬

‫* بخش دیگر ‪ if‬دستور ‪ else‬است که معنی در غیر اینصورت میدهد‪.‬‬

‫* فقط یک ‪ else‬میتوانیم استفاده کنیم و نوشتن ‪ else‬اختیاری است‪.‬‬

‫* ساختار کلی‪:‬‬
‫‪if True:‬‬
‫)‪print(x‬‬
‫‪else:‬‬
‫)‪print(y‬‬

‫مثال‪ :‬نمرهی یک دانشآموز را بگیرید و مشخص کنید که قبول شده است یا مردود‪.‬‬

‫))' ‪x = int(input('mark:‬‬
‫‪if x < 10:‬‬
‫)'!‪print('failed‬‬
‫‪else:‬‬
‫)'!‪print('passed‬‬

‫* برای اینکه بتوانیم در ‪ if‬از شرطهای دیگر استفاده کنیم‪ ،‬از ‪ elif‬استفاده میکنیم‪.‬‬

‫* بینهایت ‪ elif‬میتوانیم بنویسیم‪.‬‬

‫* فقط یک ‪ if‬و یک ‪ else‬میتوانیم بنویسیم‪.‬‬

‫* ‪ elif‬باید بین ‪ if‬و ‪ else‬باشد‪.‬‬

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

‫))' ‪mark = int(input('mark:‬‬


‫‪if 15 <= mark <= 20:‬‬
‫)'‪print('A‬‬
‫‪elif 10 <= mark < 15:‬‬
‫)'‪print('B‬‬
‫‪elif 5 <= mark < 10:‬‬
‫)'‪print('C‬‬
‫‪elif 0 <= mark < 5:‬‬
‫)'‪print('D‬‬
‫‪else:‬‬
‫)'!‪print('invalid‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ : 3‬ساختار تصمیم (بخش دوم ‪ +‬مثال)‬

‫* در ساختار ‪ if‬اگر یکی از شرطها درست باشد‪ ،‬بقیه بررسی نمیشوند‪.‬‬


‫‪x = 7‬‬
‫‪if x > 5:‬‬
‫‪print('yes') # -> yes‬‬
‫‪elif x == 7:‬‬
‫)'‪print('of course‬‬

‫* برای حل این مشکل میتوانیم ‪ if‬های متعدد بنویسیم که به هم ربطی ندارند و هرکدام بررسی میشوند‪.‬‬
‫‪x = 7‬‬
‫‪if x > 5:‬‬
‫‪print('yes') # -> yes‬‬
‫‪if x == 7:‬‬
‫‪print('of course') # -> of course‬‬
‫‪if x < 12:‬‬
‫‪print('absolutely') # -> absolutely‬‬

‫* اگر در ‪ if‬از تورفتگی استفاده کنیم و ‪ if‬دیگری بنویسیم‪ ،‬آن وقت پس از اینکه شرط اول درست بود‪ ،‬سراغ شرط دوم میرود‪.‬‬
‫))' ‪mark = int(input('mark:‬‬
‫‪if mark > 10:‬‬
‫)'‪print('passed‬‬
‫‪if 15 <= mark <= 20:‬‬
‫)'‪print('A‬‬
‫‪elif 10 <= mark < 15:‬‬
‫)'‪print('B‬‬
‫‪else:‬‬
‫)'‪print('failed‬‬

‫* ‪ if‬را میتوانیم در یک خط بنویسیم‪ ،‬درصورتی که فقط از ‪ if‬و ‪ else‬استفاده کنیم‪.‬‬


‫))' ‪y = int(input('y:‬‬
‫‪x = 10 + 2 if y < 20 else 5‬‬
‫)‪print(x‬‬

‫‪ .1‬برنامهای بنویسید که تشخیص دهد عددی که کاربر وارد کرده است زوج است یا فرد‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫‪if x % 2 == 0:‬‬
‫)'‪print('even‬‬
‫‪else:‬‬
‫)'‪print('odd‬‬
‫‪ .2‬برنامهای بنویسید که تشخیص دهد بین دو عددی که کاربر وارد میکند‪ ،‬کدام کوچک تر است‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫))' ‪y = int(input('y:‬‬
‫‪if x < y:‬‬
‫)'‪print('min is x‬‬
‫‪elif x == y:‬‬
‫)'‪print('x equal to y‬‬
‫‪else:‬‬
‫)'‪print('min is y‬‬

‫‪ .3‬برنامهای بنویسید که تشخیص دهد بین سه عددی که کاربر وارد میکند‪ ،‬کدام کوچک تر است‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫))' ‪y = int(input('y:‬‬
‫))' ‪z = int(input('z:‬‬
‫‪min_digit = x‬‬
‫‪if y < min_digit:‬‬
‫‪min_digit = y‬‬
‫‪if z < min_digit:‬‬
‫‪min_digit = z‬‬

‫)‪print(min_digit‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫ تکالیف مبحث ساختار تصمیم و حل آنها‬: ۵ ‫ و‬۴ ‫درس‬

.‫ بخش پذیر است یا نه‬۵ ‫ و هم بر‬2 ‫ یک عدد از کاربر بگیرید و بررسی کنید که آیا هم بر‬.1

x = int(input('x: '))
if x % 2 == 0 and x % 5 == 0:
print('yes')
else:
print('no')

‫ چه‬،‫ اگر جواب مثبت است‬.‫ اضالع یک مثلث را از کاربر گرفته و مشخص کنید که آیا این اضالع تشکیل مثلث میدهند یا خیر‬.2
)‫ قائم الزاویه یا متساوی االضالع‬،‫ مختلف االضالع‬،‫نوع مثلثی؟ (متساوی الساقین‬

x = int(input('x: '))
y = int(input('y: '))
z = int(input('z: '))
if x + y > z and x + z > y and y + z > x:
print('yes, it is a triangle.')
if x == y == z:
print('it is a equilateral triangle.')
if x == y or x == z or y == z:
print('it is a isosceles triangle')
if x ** 2 + y ** 2 == z ** 2 or x ** 2 + z ** 2 == y ** 2 or y ** 2 + z **
2 == x ** 2:
print('it is a right triangle')
if x != y != z:
print('it is a different sided triangle.')
else:
print('no, it is not a triangle.')

‫ (از کد اسکی‬.‫ حروف انگلیسی است یا سایر نمادها‬،‫ یک کاراکتر از کاربر گرفته و مشخص کنید کاراکتر وارد شده عدد است‬.3
).‫کمک بگیرید‬

character = input('enter character: ')


if 97 <= ord(character) <= 122:
print(f'"{character}" is a Small English letter.')
elif 65 <= ord(character) <= 90:
print(f'"{character}" is a Capital English letter.')
elif 48 <= ord(character) <= 57:
print(f'"{character}" is a number.')
else:
print(f'"{character}" is a symbol or other languages letter.')

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :۶‬توابع ‪ max‬و ‪ min‬و ‪sum‬‬

‫* برای مشخص کردن عدد کوچکتر از تابع ‪ min‬استفاده میکنیم‪.‬‬


‫))‪print(min(2, 3, 1, 4, 7, 8, 2, 3, 6‬‬ ‫‪# -> 1‬‬

‫* اگر به ورودی تابع ‪ min‬لیست و یا تاپل خالی ارسال کنیم‪ ،‬میتوانیم مقداردهی کنیم‪.‬‬
‫))‪print(min([], default=567‬‬

‫* برای مشخص کردن عدد بزرگتر از تابع ‪ max‬استفاده میکنیم‪.‬‬


‫))‪print(max(2, 3, 1, 4, 7, 8, 2, 3, 6‬‬ ‫‪# -> 8‬‬

‫* برای رشته و حروف انگلیسی نیز میتوان از ‪ max‬و ‪ min‬استفاده کنیم‪ ،‬که براساس اولین حرف هر رشته و مطابق ترتیب حروف الفبا مرتب‬
‫میکنند‪.‬‬
‫))'‪print(min('reza', 'neda', 'sahel', 'ali‬‬ ‫‪# -> ali‬‬
‫))'‪print(max('reza', 'neda', 'sahel', 'ali‬‬ ‫‪# -> sahel‬‬

‫* برای جمع کردن از تابع ‪ sum‬استفاده میکنیم که ورودی آن باید لیست‪ ،‬تاپل یا مجموعه باشد‪.‬‬
‫))]‪print(sum([1, 5, 6, 7‬‬ ‫‪# -> 19‬‬
‫)))‪print(sum((1, 5, 6, 7‬‬ ‫‪# -> 19‬‬
‫))}‪print(sum({1, 5, 6, 7‬‬ ‫‪# -> 19‬‬

‫* اگر در ‪ sum‬از ‪ start‬استفاده کنیم‪ ،‬نتیجه را با ‪ start‬جمع میکند‪.‬‬


‫))‪print(sum({1, 5, 6, 7}, start=10‬‬ ‫‪# -> 19‬‬

‫ـــــــــــــــــــــــــــــــــــــــ پایان فصل چهارم ــــــــــــــــــــــــــــــــــــــــ‬


‫فصل پنجم‪ :‬دستورات کنترلی (تکرار)‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫درس ‪ :1‬ساختار حلقه ‪while‬‬

‫* برای تکرار میتوانیم از حلقهی ‪ while‬استفاده کنیم و تا زمانی که شرایط برقرار باشد حلقه تکرار میشود‪.‬‬
‫‪x = 0‬‬
‫‪while x < 3:‬‬
‫)'!‪print('repeat‬‬
‫‪x += 1‬‬
‫* در این مثال در هر تکرار به ‪ x‬یکی اضافه میشود و تا زمانی که ‪ x‬کوچکتر از ‪ ۳‬است حلقه تکرار میشود‪ ،‬پس حلقه سه بار تکرار میشود‪.‬‬

‫* بعضی حلقهها ممکن است بینهایت اجرا شوند و باید مراقب این حلقهها بود چون ممکن است سبب ایجاد مشکالت فراوانی شوند‪.‬‬
‫‪x = 0‬‬
‫‪while x < 3:‬‬
‫)'!‪print('repeat‬‬

‫‪while True:‬‬
‫)'‪print('ok‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :2‬حل مثال برای حلقه ‪while‬‬

‫‪ .1‬برنامهای بنویسید که اعداد زوج دو رقمی را پیدا کند‪.‬‬

‫‪x = 10‬‬
‫‪while x < 100:‬‬
‫‪if x % 2 == 0:‬‬
‫)‪print(x‬‬
‫‪x += 1‬‬

‫‪ .2‬برنامهای بنویسید که اعداد سه رقمی که هم بر ‪ ۳‬و هم بر ‪ ۷‬بخش پذیرند را چاپ کند‪.‬‬

‫‪x = 100‬‬
‫‪while x < 1000:‬‬
‫‪if x % 3 == 0 and x % 7 == 0:‬‬
‫)‪print(x‬‬
‫‪x += 1‬‬

‫‪ .۳‬برنامهای بنویسید که یک مثلث با یک شکلک خاص ایجاد کند و تعداد خطها را کاربر وارد کند‪.‬‬

‫‪r = 1‬‬
‫))' ‪n = int(input('enter rows:‬‬

‫‪while r <= n:‬‬


‫)‪print('*' * r‬‬
‫‪r += 1‬‬

‫‪ .۴‬چاپ مثلث سوال قبل بهصورت برعکس‪.‬‬

‫))' ‪n = int(input('enter rows:‬‬

‫‪while n > 0:‬‬


‫)‪print('*' * n‬‬
‫‪n -= 1‬‬

‫‪ .۵‬مقسوم علیههای یک عدد را چاپ کنید‪ ( .‬مشخص کنید که آن عدد بر چه اعدادی بخش پذیر است‪).‬‬

‫))' ‪n = int(input('enter a number:‬‬


‫‪x = 1‬‬

‫‪while n >= x:‬‬


‫‪if n % x == 0:‬‬
‫)‪print(x‬‬
‫‪x += 1‬‬
‫‪ .۶‬برنامهای بنویسید که مشخص کند یک عدد کامل است یا خیر‪ ( .‬عددی که جمع مقسوم علیههایش(جز خودش) با خودش برابر‬
‫شودند‪ ،‬عددی کامل است‪).‬‬

‫))' ‪n = int(input('enter a number:‬‬


‫‪x = 1‬‬
‫‪divisor = 0‬‬
‫‪while n > x:‬‬
‫‪if n % x == 0:‬‬
‫‪divisor += x‬‬
‫‪x += 1‬‬

‫‪if n == divisor:‬‬
‫)'‪print('it is a perfect number.‬‬
‫‪else:‬‬
‫)'‪print('it is not a perfect number.‬‬

‫‪ .۷‬برنامهای بنویسید که سری فیبوناچی را چاپ کند‪ ( .‬تا ‪ 2۰‬جمله و از ‪ ۰‬شروع شود)‬

‫* سری فیبوناچی یک دنبالهای از اعداد است که هر عدد از جمع ‪ ۲‬عدد قبل از خودش بهدست میآید و این سری یا از ‪ ۰‬و یا از ‪ ۱‬شروع‬
‫میشود‪)0, 1, 1, 2, 3, 5, 8, 13, 21, 34,...( .‬‬
‫‪x = 0‬‬
‫‪y = 1‬‬
‫][ = ‪fibonacci‬‬
‫‪counter = 0‬‬
‫‪while counter <= 20:‬‬
‫)‪fibonacci.append(x‬‬
‫در یک خط نوشتیم تا همزمان اجرا شوند ‪x, y = y, x + y #‬‬
‫‪counter += 1‬‬

‫)‪print(fibonacci‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ : ۳‬دستور ‪ break ،continue ،else‬در حلقه ‪ +( while‬مثال)‬

‫* در ‪ while‬زمانیکه بخواهیم از حلقه خارج شویم از ‪ break‬استفاده میکنیم‪.‬‬

‫* با ‪ break‬میتوانیم حلقههای بینهایت را کنترل کنیم‪.‬‬


‫‪i = 1‬‬
‫‪while i <= 100:‬‬
‫)'‪print(i, end='-‬‬ ‫‪# -> 1-2-3-‬‬
‫‪if i == 3:‬‬
‫‪break‬‬
‫‪i += 1‬‬

‫مثال‪ :‬تعدادی عدد دلخواه از کاربر بگیریم و کوچکترین آنها را پیدا کنیم‪.‬‬

‫))' ‪n = float(input('number:‬‬

‫‪minimum = n‬‬
‫‪while True:‬‬
‫)' )‪s = input('do you want to continue?(y/n‬‬
‫‪if s.lower() == 'n':‬‬
‫‪break‬‬
‫))' ‪n = float(input('number:‬‬
‫‪if n < minimum:‬‬
‫‪minimum = n‬‬

‫)‪print(n‬‬

‫* اگر در حلقهی ‪ while‬بخواهیم به اول حلقه برگردد و بقیه دستورات نادیده گرفته شود از ‪ continue‬استفاده میکنیم‪.‬‬
‫‪i = 0‬‬
‫‪while i <= 10:‬‬
‫‪i += 1‬‬
‫‪if i % 3 == 0:‬‬
‫‪continue‬‬
‫)‪print(i‬‬

‫* در ‪ while‬از دستور ‪ else‬میتوانیم استفاده کنیم‪ ،‬اما زمانی اجرا میشود که حلقه بهصورت نرمال به اتمام برسد و ‪ break‬اتفاق نیفتد‪.‬‬
‫‪i = 0‬‬
‫‪while i <= 10:‬‬
‫‪i += 1‬‬
‫‪if i % 3 == 0:‬‬
‫‪continue‬‬
‫)‪print(i‬‬
‫‪else:‬‬
‫)'!‪print('ok‬‬
‫مثال‪ :‬یک عدد از کاربر بگیریم و تشخیص بدهیم که اول هست یا خیر‪ ( .‬عدد اول فقط بر خودش و یک بخش پذیر است‪).‬‬

‫))' ‪number = int(input('enter a number:‬‬


‫‪i = 2‬‬

‫‪if number > 1:‬‬


‫‪while i <= number/2:‬‬
‫‪if number % i == 0:‬‬
‫)'‪print(f'"{number}" is not a prime number‬‬
‫‪break‬‬
‫‪i += 1‬‬
‫‪else:‬‬
‫)'‪print(f'"{number}" is a prime number‬‬
‫‪else:‬‬
‫)'‪print(f'"{number}" is not a prime number‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
)‫ مثال‬+( ‫ تو در تو‬while ‫ حلقه‬:۴ ‫درس‬

.‫ دیگری نیز تعریف کنیم‬while ‫ میتوانیم حلقههای‬while ‫* در حلقه‬


i = 0
while i <= 10:
j = 1
while j <= 10:
print(j)
j += 1
print(i)
i += 1

.‫ یک برنامه بنویسید که عناصر یک لیست را چاپ کند‬:‫مثال‬

names = ['reza', 'neda', 'shadi', 'ali']

i = 0
while i < len(names):
print(names[i])
i += 1

.‫ یک برنامه بنویسید که یک عناصر یک لیست را چاپ کند به صورتی که حروف هر اسم یک در میان حرف بزرگ باشد‬:‫مثال‬

names = ['reza', 'neda', 'shadi', 'ali']

i = 0
while i < len(names):
name = names[i]
j = 0
while j < len(name):
if j % 2 == 0:
print(name[j].upper(), end='')
else:
print(name[j].lower(), end='')
j += 1
print()
i += 1

.‫ یک برنامه بنویسید که یک جدول ضرب ده در ده چاپ کند‬:‫مثال‬

i = 1
while i <= 10:
j = 1
while j <= 10:
print(f'{i} * {j} = {i * j}', end='\t\t')
j += 1
print()
i += 1
‫مثال‪ :‬یک برنامه بنویسید که یک مثلث با یک نماد خاص چاپ کند‪ (.‬با استفاده از حلقههای تو در تو)‬

‫))' ‪row = int(input('enter row:‬‬


‫‪i = 1‬‬
‫‪while i <= row:‬‬
‫‪j = 1‬‬
‫‪while j <= i:‬‬
‫)''=‪print('*', end‬‬
‫‪j += 1‬‬
‫)(‪print‬‬
‫‪i += 1‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :۵‬ساختار حلقه ‪ +( for‬مثال)‬

‫* زمانیکه بخواهیم در توالیها (لیست‪ ،‬رشته‪ ،‬تاپل)‪ ،‬دیکشنری و به طور کلی در تکرار شوندهها پیمایش کنیم از حلقه ‪ for‬استفاده میکنیم‪.‬‬

‫* شکل کلی‪:‬‬
‫‪For target in obj:‬‬

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


‫]‪numbers = [1, 2, 3, 4, 5, 6‬‬
‫‪for i in numbers:‬‬
‫)‪print(i‬‬

‫'‪name = 'reza dolati‬‬


‫‪for s in name:‬‬
‫)‪print(s‬‬

‫)‪t = (1, 4, 5‬‬


‫‪for i in t:‬‬
‫)‪print(i‬‬

‫مثال‪ :‬یک لیست از کد اسکیهای مختلف داریم‪ .‬یک برنامه بنویسید که کاراکتر این کدها را چاپ کند‪.‬‬

‫]‪codes = [67, 76, 34, 343, 234, 168, 935‬‬


‫‪for c in codes:‬‬
‫))‪print(chr(c‬‬

‫* در حلقه ‪ for‬باید قواعد تورفتگی رعایت شود‪.‬‬

‫* معموالً زمانی از ‪ for‬استفاده میکنیم که تعداد تکرار مشخص است‪.‬‬

‫* معموالً زمانی از ‪ while‬استفاده میکنیم که نمیدانیم چند بار باید اجرا شود‪.‬‬

‫* دستورات ‪ continue ،break‬و ‪ else‬که در حلقه ‪ while‬وجود دارند‪ ،‬در حلقه ‪ for‬نیز با همان ویژگیها قابل اجرا هستند‪.‬‬
‫]‪codes = [67, 76, 34, 343, 234, 168, 935‬‬
‫‪for c in codes:‬‬
‫‪if chr(c) == 'ŗ':‬‬
‫‪break‬‬
‫))‪print(chr(c‬‬
‫‪else:‬‬
‫)'‪print('done‬‬

‫* در حلقه ‪ for‬میتوانیم ‪for‬های تو در تو داشته باشیم‪.‬‬

‫* در ‪ for‬میتوانیم حلقه ‪ while‬تعریف کنیم و بالعکس‪.‬‬


‫مثال‪ :‬یک برنامه بنویسید که موارد مشترک دو لیست را چاپ کند‪.‬‬

‫]‪list_1 = [1, 2, 8, 9, 6, 7, 3‬‬


‫]‪list_2 = [12, 8, 10, 3, 9, 7, 1, 0, 20‬‬

‫‪for i in list_1:‬‬
‫‪for j in list_2:‬‬
‫‪if i == j:‬‬
‫)‪print(i‬‬

‫* میتوانیم برای ‪ for‬چند متغیر بنویسیم‪.‬‬


‫‪for a, b, c in [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:‬‬
‫)‪print(a‬‬
‫)‪print(b‬‬
‫)‪print(c‬‬
‫)'*' * ‪print(20‬‬

‫* اگر مقادیر اضافی نسبت به متغیر داشته باشیم‪ ،‬میتوانیم قبل متغیر * بگذاریم‪ ،‬تا مقادیر اضافی را به صورت یک لیست به خود بگیرد‪.‬‬
‫‪for a, b, *c in [[1, 2, 3, 0], [4, 5, 6, 0]]:‬‬
‫)‪print(a‬‬
‫)‪print(b‬‬
‫)‪print(c‬‬
‫)'*' * ‪print(20‬‬

‫* ‪ for‬برای دیکشنری در حالت عادی‪ ،‬کلیدها را انتخاب میکند‪.‬‬


‫}‪d = {'a': 1, 'b': 2, 'c': 3‬‬
‫‪for k in d:‬‬
‫)‪print(k‬‬

‫* برای اینکه ‪ ،for‬کلید‪ ،‬مقدار و کلید – مقدار را انتخاب کند میتوانیم از متدهای ‪ values ،key‬و ‪ items‬استفاده کنیم‪.‬‬
‫}‪d = {'a': 1, 'b': 2, 'c': 3‬‬
‫‪for k in d.keys():‬‬
‫)‪print(k‬‬
‫‪for v in d.values():‬‬
‫)‪print(v‬‬
‫‪for i in d.items():‬‬
‫)‪print(i‬‬

‫* اگر بخواهیم ‪ for‬در دیکشنری کلید – مقدار را نیز به صورت کلید – مقدار چاپ کند از دو متغیر و متد ‪ items‬استفاده میکنیم‪.‬‬
‫}‪d = {'a': 1, 'b': 2, 'c': 3‬‬
‫‪for k, v in d.items():‬‬
‫)'}‪print(f'{k} : {v‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
)‫ مثال‬+( range ‫ آشنایی با‬:۶ ‫درس‬

.‫ استفاده میکنیم‬range ‫ از‬for ‫* برای تکرار در‬


print(range(10)) # -> range(0, 10)
print(type(range(10))) # -> <class 'range'>
print(list(range(10))) # -> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in range(5):
print(i)

.‫ میتوانیم شروع را مشخص کنیم‬range ‫* در‬


for i in range(2, 5):
print(i)

.‫ میتوانیم گام تعیین کنیم‬range ‫* در‬


for i in range(2, 10, 2):
print(i)

.‫ از راست به چپ حرکت میکند‬،‫* اگر گام را عددی منفی وارد کنیم‬


for i in range(10, 2, -2):
print(i)

.‫ یک رشته را به عنوان ورودی بگیریم و ایندکس عناصر و عناصر آن را چاپ کنیم‬:‫مثال‬

s = input('enter string: ')


for i in range(0, len(s)):
print(f'{i} : {s[i]}')

.‫ فاکتوریل یک عدد را محاسبه کنیم‬:‫مثال‬

n = int(input('number: '))
m = 1
for i in range(1, n + 1):
m *= i

print(m)
‫مثال‪ :‬یک برنامه بنویسید که ارقام یک عدد را از آخر به اول بنویسد‪.‬‬

‫)' ‪n = input('number:‬‬
‫'' = ‪s‬‬
‫‪for i in range(len(n) - 1, -1, -1):‬‬
‫]‪s += n[i‬‬

‫)‪print(s‬‬

‫مثال‪ :‬یک برنامه بنویسید که یک مثلث با عدد ایجاد کند‪.‬‬

‫))' ‪n = int(input('number:‬‬

‫‪for i in range(1, n + 1):‬‬


‫‪for j in range(1, i + 1):‬‬
‫)''=‪print(j, end‬‬
‫)(‪print‬‬
‫‪for i in range(n - 1, 0, -1):‬‬
‫‪for j in range(1, i + 1):‬‬
‫)''=‪print(j, end‬‬
‫)(‪print‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :۷‬تکنیک حلقه سازی (‪)enumerate, zip, reversed, sorted‬‬

‫* برای شماره گذاری عناصر توالی میتوانیم از تابع ‪ enumerate‬استفاده کنیم‪ ،‬این تابع شماره گذاری را از ‪ 0‬و مطابق ایندکس عناصر‬
‫شروع میکند‪.‬‬
‫)))]'‪print(list(enumerate(['a', 'b', 'c‬‬ ‫])'‪# -> [(0, 'a'), (1, 'b'), (2, 'c‬‬

‫]'‪my_list = ['a', 'b', 'c', 'd‬‬


‫‪for i, j in enumerate(my_list):‬‬
‫)‪print(i, ':', j‬‬

‫* در تابع ‪ enumerate‬میتوانیم مشخص کنیم که شماره گذرای از چه عددی آغاز شود‪.‬‬


‫]'‪my_list = ['a', 'b', 'c', 'd‬‬
‫‪for i, j in enumerate(my_list, 5):‬‬
‫)‪print(i, ':', j‬‬

‫* برای زیپ کردن دو لیست میتوانیم از تابع ‪ zip‬استفاده کنیم‪.‬‬


‫]'‪names = ['reza', 'ali', 'neda', 'mina‬‬
‫]‪ages = [20, 18, 25, 36‬‬

‫‪for i, j in zip(names, ages):‬‬


‫)'}‪print(f'name: {i} | age: {j‬‬

‫* برای پیمایش از آخر میتوانیم از تابع ‪ reversed‬استفاده کنیم‪.‬‬


‫]‪y = [20, 18, 25, 36‬‬

‫‪for i in reversed(y):‬‬
‫)'‪print(i, end='-‬‬ ‫‪# -> 36-25-18-20-‬‬

‫* برای مرتب کردن از تابع ‪ sorted‬استفاده میکنیم‪ ،‬این تابع اعداد را از کوچک به بزرگ و رشته را بر اساس حروف الفبا مرتب میکند‪.‬‬
‫]'‪s = ['reza', 'ali', 'neda', 'mina‬‬
‫]‪x = [20, 18, 25, 36‬‬

‫‪for i in sorted(s):‬‬
‫)'‪print(i, end='-‬‬ ‫‪# -> ali-mina-neda-reza-‬‬
‫‪for i in sorted(x):‬‬
‫)'‪print(i, end='-‬‬ ‫‪# -> 18-20-25-36-‬‬
‫* اگر بخواهیم مرتب سازی را برعکس انجام دهیم از تابع ‪ reversed‬به همراه ‪ sorted‬استفاده میکنیم‪.‬‬

‫روش اول‪:‬‬
‫]‪x = [20, 18, 25, 36‬‬

‫‪for i in reversed(sorted(x)):‬‬
‫‪print(i, end='-') # -> 36-25-20-18-‬‬
‫روش دوم‪:‬‬
‫]‪x = [20, 18, 25, 36‬‬

‫‪for i in sorted(x, reverse=True):‬‬


‫‪print(i, end='-') # -> 36-25-20-18-‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ :۸‬تولید عدد تصادفی با ماژول ‪ +( random‬مثال)‬

‫* روش کلی استفاده از ماژولها‪:‬‬

‫روش اول‪:‬‬
‫‪import random‬‬

‫))(‪print(random.random‬‬ ‫‪# -> 0.9447637291295037‬‬


‫روش دوم‪:‬‬
‫‪from random import random‬‬

‫))(‪print(random‬‬ ‫‪# -> 0.3249790419192793‬‬

‫* برای تولید عدد تصادفی در بازهی ‪ 0‬تا ‪ 1‬میتوانیم از تابع ‪ random‬استفاده کنیم‪.‬‬
‫‪from random import random‬‬

‫))(‪print(random‬‬ ‫‪# -> 0.3869024475083328‬‬

‫* برای تولید یک عدد تصادفی بر اساس یک عدد خاص و تولید دوباره همان عدد تصادفی بر اساس همان عدد میتوانیم از تابع ‪ seed‬استفاده‬
‫کنیم‪.‬‬

‫* تابع ‪ seed‬به ما کمک میکند بفهمیم چه اعداد تصادفی تولید شده است‪.‬‬
‫‪from random import random, seed‬‬

‫)‪seed(100‬‬
‫))(‪print(random‬‬ ‫‪# -> 0.1456692551041303‬‬

‫* اگر دوباره از عدد ‪ 100‬استفاده کنیم باز همین عدد تصادفی تولید میشود‪.‬‬
‫‪from random import random, seed‬‬

‫)‪seed(100‬‬
‫))(‪print(random‬‬ ‫‪# -> 0.1456692551041303‬‬

‫* برای تغییر بازهی ‪ random‬از بازهی ‪ 0‬و ‪ 1‬به بازهی دلخواه میتوانیم از روش زیر استفاده کنیم‪.‬‬
‫))‪min + (random * (max – min‬‬
‫‪from random import random‬‬

‫‪print(5 + (random() * (10 - 5))) # -> 9.336956376988947‬‬


‫‪print(1 + (random() * (5 - 1))) # -> 2.95583323830563‬‬
‫* برای تغییر بازهی ‪ random‬از بازهی ‪ 0‬و ‪ 1‬به بازهی دلخواه به جای روش قبلی میتوانیم از تابع ‪ uniform‬استفاده کنیم‪.‬‬
‫‪from random import uniform‬‬

‫‪print(uniform(5, 10)) # -> 6.729439839222446‬‬


‫‪print(uniform(1, 5)) # -> 3.3936402248976587‬‬

‫* برای تولید عدد تصادفی صحیح میتوانیم از تابع ‪ int‬استفاده کنیم‪ ،‬اما بهتر است از تابع ‪ randint‬استفاده کنیم‪.‬‬

‫* وقتی از ‪ randint‬استفاده میکنیم ممکن است ورودی دوم نیز به عنوان عددی تصادفی تولید شود‪.‬‬
‫‪from random import randint‬‬

‫))‪print(randint(1, 5‬‬ ‫‪# -> 5‬‬


‫))‪print(randint(1, 5‬‬ ‫‪# -> 3‬‬

‫* برای تولید عدد تصادفی با گام از تابع ‪ randrange‬استفاده میکنیم‪.‬‬


‫‪from random import randrange‬‬

‫))‪print(randrange(1, 100, 2‬‬ ‫‪# -> 27‬‬


‫))‪print(randrange(0, 100, 2‬‬ ‫‪# -> 74‬‬

‫* برای انتخاب یک عنصر به صورت تصادفی از یک لیست از تابع ‪ choice‬استفاده میکنیم‪.‬‬


‫‪from random import choice‬‬

‫]‪numbers = [2, 3, 6, 8, 1, 5‬‬


‫‪print(choice(numbers)) # -> 8‬‬

‫* برای تشکیل یک لیست با چند عنصر از یک لیست دیگر به صورت تصادفی و با تعداد دلخواه از تابع ‪ sample‬استفاده میکنیم‪.‬‬
‫‪from random import sample‬‬

‫]‪numbers = [2, 3, 6, 8, 1, 5‬‬


‫]‪print(sample(numbers, 3)) # -> [6, 1, 5‬‬

‫* برای بهم زدن ترتیب عناصر لیست از تابع ‪ shuffle‬استفاده میکنیم‪.‬‬


‫‪from random import shuffle‬‬

‫]‪numbers = [2, 3, 6, 8, 1, 5‬‬


‫)‪shuffle(numbers‬‬
‫]‪print(numbers) # -> [6, 2, 1, 3, 8, 5‬‬
‫مثال‪ :‬یک برنامه بنویسید که اگر یک سکه را ‪ 1۰۰۰‬بار بیندازیم چند بار شیر و چند بار خط میآید‪.‬‬

‫‪from random import choice‬‬

‫]'‪coin = ['head', 'tail‬‬


‫‪head = 0‬‬
‫‪tail = 0‬‬
‫‪for _ in range(1000):‬‬
‫)‪r = choice(coin‬‬
‫‪if r == 'head':‬‬
‫‪head += 1‬‬
‫‪else:‬‬
‫‪tail += 1‬‬

‫)‪print(head‬‬
‫)‪print(tail‬‬

‫مثال‪ :‬یک برنامه بنویسید که اگر یک سکه را ‪ 1۰۰۰۰‬بار بیندازیم هر وجه چند بار میآید‪.‬‬

‫‪from random import randint‬‬

‫}‪toss = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0‬‬


‫‪for _ in range(10000):‬‬
‫‪toss[randint(1, 6)] += 1‬‬

‫)‪print(toss‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫درس ‪ ۹‬و ‪ :1۰‬تکالیف مبحث حلقه و اعداد تصادفی و حل آنها‬

‫‪ .1‬برنامهای بنویسید که دو عدد از کاربر گرفته و اعداد مابین آنها را نمایش دهد‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫))' ‪y = int(input('y:‬‬

‫)‪minimum = min(x, y‬‬


‫)‪maximum = max(x, y‬‬

‫‪for i in range(minimum + 1, maximum):‬‬


‫)‪print(i‬‬

‫‪ .2‬برنامهای بنویسید که دو عدد صحیح را گرفته و مقسوم علیههای مشترکشان را نمایش دهد‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫))' ‪y = int(input('y:‬‬
‫)‪m = min(x, y‬‬

‫‪for i in range(1, m + 1):‬‬


‫‪if x % i == 0 and y % i == 0:‬‬
‫)' '=‪print(i, end‬‬

‫‪ .۳‬برنامهای را بنویسید که دو عدد صحیح را گرفته و بزرگترین مقسوم علیه مشترکشان را نمایش دهد‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫))' ‪y = int(input('y:‬‬
‫)‪m = min(x, y‬‬

‫‪for i in range(m, 0, -1):‬‬


‫‪if x % i == 0 and y % i == 0:‬‬
‫)‪print(i‬‬
‫‪break‬‬

‫‪ .۴‬برنامهای را بنویسید که دو عدد صحیح را گرفته و کوچکترین مضرب مشترکشان را نمایش دهد‪.‬‬

‫))' ‪x = int(input('x:‬‬
‫))' ‪y = int(input('y:‬‬
‫)‪min_ = min(x, y‬‬
‫)‪max_ = max(x, y‬‬

‫‪for i in range(1, min_ + 1):‬‬


‫‪if (max_ * i) % min_ == 0:‬‬
‫)‪print(max_ * i‬‬
‫‪break‬‬
‫‪ .۵‬برنامهای بنویسید که عدد صحیحی را گرفته و تعداد رقمهایش را نمایش دهد‪( .‬عدد را به رشته تبدیل نکنید‪).‬‬

‫))' ‪x = int(input('x:‬‬
‫‪i = 0‬‬
‫‪while x > 0:‬‬
‫‪x //= 10‬‬
‫‪i += 1‬‬

‫)‪print(i‬‬

‫‪ .۶‬برنامهای بنویسید که تعداد سطر را از کاربر گرفته و شکل زیر را رسم کند‪.‬‬

‫*‬
‫**‬
‫***‬
‫****‬
‫))' ‪r = int(input('r:‬‬

‫‪for i in range(1, r + 1):‬‬


‫)''=‪print(' ' * (r - i), end‬‬
‫)‪print('*' * i‬‬

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

‫مثالً لیست ما شامل ]”‪ [“A”,”B”,”C‬است‪ .‬کاربر در ذهن خود ‪ A‬را انتخاب میکند‪ .‬برنامه حدس میزند حرف انتخابی ‪B‬‬
‫است و میپرسد آیا درست حدس زدهام؟ کاربر میگوید نه‪ .‬برنامه دوباره حدس میزند ‪ A‬و میپرسد درست حدس زده ام؟ کاربر‬
‫میگوید بله و برنامه تمام میشود‪.‬‬

‫‪from random import choice‬‬


‫‪names = ['fatemeh', 'reza', 'neda', 'hassan', 'ahmad', 'leyla', 'mohsen',‬‬
‫]'‪'mohammad', 'yasin', 'sina‬‬
‫)‪print(names‬‬
‫)')‪input('choose a name, then I guess it (press enter‬‬
‫)(‪names_cp = names.copy‬‬
‫‪while True:‬‬
‫‪if len(names_cp) == 0:‬‬
‫)'‪print('I guessed them all‬‬
‫‪break‬‬
‫)‪cmp_choice = choice(names_cp‬‬
‫)' )‪ans = input(f'is your choice "{cmp_choice}"?(y/n‬‬
‫‪if 'y' in ans.lower():‬‬
‫)'‪print('I won‬‬
‫‪break‬‬
‫)‪names_cp.remove(cmp_choice‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫ رمزنگاری و رمزگشایی ساده‬:‫ مینی پروژه‬:11 ‫درس‬

while True:
print('select your option:\n\t1)Encrypt\n\t2)Decrypt\n\t3)Exit')
choice = input('your choice: ')
if choice == '1':
plain_text = input('text: ')
encrypted_text = ''
for i in plain_text:
n = chr((ord(i) * 2) + 67)
encrypted_text += n
print(encrypted_text)
break
elif choice == '2':
encrypted_text = input('text: ')
decrypted_text = ''
for i in encrypted_text:
m = chr((ord(i) - 67) // 2)
decrypted_text += m
print(decrypted_text)
break
elif choice == '3':
print('see ya :)')
break
else:
print('wrong option!')
continue

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫ پسورد ساز‬:‫ مینی پروژه‬:12 ‫درس‬

from random import choice

import string

a = string.ascii_lowercase
A = string.ascii_uppercase
number = '0123456789'
symbols = '~!@#$%^&*()_+=][{}><?/'
pas = a + A + number + symbols
final_password = ''
while True:
print('select your option:\n\t1)create a password\n\t2)Exit')
s = input('your choice: ')
if s == '1':
r = int(input('how many characters? '))
for i in range(r):
chr_choose = choice(pas)
final_password += chr_choose
print('your password is:', final_password, '\n', 20 * '*')
if s == '2':
print('bye! \n', 20 * '*')
break
else:
print('select 1 or 2\n', 20 * '*')
continue

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫ تایمر ساده‬:‫ مینی پروژه‬:1۳ ‫درس‬

import time

while True:
print('Do you want to start the timer?\n\t-yes\n\t-no')
s = input('your option: ')
if s.lower() == 'yes':
hours = int(input('enter hours: '))
minutes = int(input('enter minutes: '))
seconds = int(input('enter seconds: '))
total = (hours * 60 * 60) + (minutes * 60) + seconds
for i in range(total, -1, -1):
print(i)
time.sleep(1)
print('\n', 20 * '-')
break
if s.lower() == 'no':
print('ok!\n', 20 * '-')
break
else:
print('choose yes or no\nlets try it again')
continue

‫ـــــــــــــــــــــــــــــــــــــــ پایان فصل پنجم ـــــــــــــــــــــــــــــــــــــــــ‬

You might also like