0% found this document useful (0 votes)
57 views43 pages

Python 3.10

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)
57 views43 pages

Python 3.10

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/ 43

‫‪Python 3.

10‬‬

‫شهــــروز صفــــری‬
‫مقدمه‬

‫زبان برنامه نویسی ‪ Python‬یک زبان چند منظورهی سطح باالست که در سال ‪ 1989‬توسط ‪Guido van Rossum‬‬
‫طراحی و در سال ‪ 1991‬معرفی شد ‪.‬‬

‫اهداف طراحی ‪Python‬‬


‫‪Mathematics‬‬ ‫‪ -‬محاسبات ریاضی‬

‫‪Software Development‬‬ ‫‪ -‬توسعه نرم افزار‬

‫‪Web Development‬‬ ‫‪ -‬توسعه برنامه های تحت وب‬

‫‪System Scripting‬‬ ‫‪ -‬برنامه نویسی سیستمی‬

‫زبانهای برنامه نویسی موجود از دو روش برای تبدیل زبان سطح باال (زبانی که نزدیک به زبان محاوره ای است ) به زبان‬
‫ماشین (صفر و یک) استفاده می کنند‬

‫‪( Compiler -‬مترجم) ‪ :‬تبدیل کل ‪ Source Code‬به یک فایل باینری و سپس اجرای آن‬

‫‪( Interpreter -‬مفسر) ‪ :‬اجرای خط به خط برنامه تا رسیدن به انتها‬

‫زبانهای خانوادهی ‪( C‬مانند ‪ C++‬و ‪ C#‬و ‪ ). . .‬زبان ‪ Java‬و ‪ Xamarin‬و ‪ . . .‬از روش ‪ Compile‬استفاده می کنند و‬
‫زبان های ‪ Python‬و ‪ Jscript‬و‪ PHP‬و ‪ Ruby‬و ‪ . . .‬از روش ‪ Interpret‬عمل می کنند ‪.‬‬

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

‫‪1‬‬
Python ‫مزیت های‬
‫ کدهای مستقل از سیستم عامل هستند‬: Cross-Platform -

‫ خوانایی منبع کدها‬: Simple Readability -

‫ کدهای خالصه تر‬: Fewer Lines of Code -

‫ نمونه سازی سریع تر و ساده تر‬: Quick Prototyping -

‫ برنامه نویسی فرآیند گرا‬: Procedural Programing -

‫ برنامه نویسی شیئ گرا‬: OOP Programing -

IDE ‫نصب و راه اندازی‬


‫ روی سیستم عامل نیاز به یک محیط توسعه یکپارچه‬Interpreter ‫ یا‬Compiler ‫هر زبان برنامه نویسی عالوه بر نصب‬
. ‫) دارد‬Integrated Development Environment(

: ‫ در ادامه آمدهاند‬Python ‫ های زبان‬IDE ‫بعضی از کاربردی ترین‬

)Python .org( Python IDLE -

)Jetbrains.com( PyCharm -

)Jupyter.org( Jupyter Notebook -

)Microsoft.com( VS Code -

)Online IDE( repl.it -

)Scientific Computing Distribution of Python( Anaconda -

2
‫تعریف متغیرها و نوع دادهها در ‪Python‬‬

‫‪Variable Declaration‬‬ ‫تعریف متغیر‬


‫اعالن متغیر در ‪ Python‬اجباری نیست یعنی برای استفاده از متغیرها نیازی به تعریف آنها در خطوط قبلی کد نیست و‬
‫هر متغیر با نسبت دادن یک مقدار به آن تعریف شده و نوع آن مشخص می شود ‪.‬‬

‫نام متغیر می تواند شامل ‪:‬‬

‫‪ -‬حروف الفبا ‪ A-Z( Letters‬و ‪) a-z‬‬

‫‪ -‬اعداد ‪Numbers‬‬

‫‪ -‬خط زیر ‪Underscore‬‬

‫باشد ‪.‬‬

‫* نکته ‪ :‬حرف اول نمیتواند عدد باشد‬

‫* نکته ‪ :‬حروف کوچک و بزرگ (‪ )Caps‬در ‪ Python‬متفاوت هستند ‪.‬‬

‫* نکته ‪ :‬نام متغیر نمیتواند یکی از کلمات کلیدی یا رزرو شده باشد‬

‫نوع داده ها (‪ )Data Type‬در ‪Python‬‬


‫‪Numeric‬‬ ‫‪ -‬نوع دادههای عددی‬

‫‪ : )Integer( int -‬اعداد صحیح با بازه تقریبا نامحدود‬

‫‪ : float -‬اعداد اعشاری‬

‫‪ : complex -‬اعداد موهومی (که به صورت ‪ a+bj‬نمایش داده می شوند )‬

‫‪ -‬نوع دادهی متنی یا رشتهای‬

‫‪ : )String( str -‬برای انتساب متن از " (‪ )Double Quotation‬یا ' (‪)Single Quotation‬‬
‫استفاده می کنیم ‪.‬‬

‫‪3‬‬
‫‪ -‬نوع داده دوحالته (‪ : )Boolean‬این نوع فقط شامل ‪ True‬یا ‪ False‬می شود ‪.‬‬

‫(توجه داشته باشید ‪ T‬و ‪ F‬حروف بزرگ هستند )‬

‫* نکته ‪ :‬بعضی از نوع دادهها قابل تبدیل به نوع دادههای دیگر هستند که توسط توابع تبدیل انجام می شود و به این‬
‫عملیات ‪ Casting‬می گوئیم ‪.‬‬

‫)(‪bool‬‬ ‫)(‪str‬‬ ‫)(‪float‬‬ ‫)(‪int‬‬

‫)(‪oct‬‬ ‫)(‪hex‬‬ ‫)(‪bin‬‬

‫مثال ‪:‬‬

‫‪int(2.8) → 2‬‬

‫‪int("4") → 4‬‬

‫‪float(2) → 2.0‬‬

‫‪hex(15) →0xf‬‬

‫عملگرها در ‪Python‬‬
‫عملگرها به هفت دسته تقسیم میشوند ‪:‬‬

‫‪Arithmetic Operators‬‬ ‫دسته اول ‪ :‬عملگرهای محاسباتی (ریاضی)‬

‫‪//‬‬ ‫‪%‬‬ ‫**‬ ‫‪/‬‬ ‫*‬ ‫‪-‬‬ ‫‪+‬‬

‫‪Floor Divide‬‬ ‫‪Modulus‬‬ ‫‪Power‬‬ ‫‪Divide‬‬ ‫‪Multiply‬‬ ‫‪Subtract Add‬‬


‫‪------------------------------------------------------------------------------‬‬

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

‫=!‬ ‫==‬ ‫=<‬ ‫=>‬ ‫<‬ ‫>‬


‫‪------------------------------------------------------------------------------‬‬

‫‪Logical Operators‬‬ ‫دسته سوم ‪ :‬عملگرهای منطقی‬

‫‪not‬‬ ‫‪or‬‬ ‫‪and‬‬


‫‪------------------------------------------------------------------------------‬‬

‫‪4‬‬
Assignment Operators ‫ عملگرهای انتساب‬: ‫دسته چهارم‬

%= /= *= -= += =
^= |= &= **= //=
:= <<= >>=

Membership Operators ‫ عملگرهای عضویت‬: ‫دسته پنجم‬

not in in
------------------------------------------------------------------------------

Identity Operators )‫ عملگرهای همسانی (تطابق‬: ‫دسته ششم‬

is not is
------------------------------------------------------------------------------

Bitwise Operators ‫ عملگرهای دستکاری بیتها‬: ‫دسته هفتم‬

<< >> ~ ^ | &


Left Shift Right Shift Not Xor Or And
Zero Fill Signed Fill
------------------------------------------------------------------------------

5
‫چند عالمت پر کاربرد در ‪Python‬‬
‫‪( ) : Parentheses or Round Bracket‬‬
‫‪[ ] : Bracket or Square Bracket‬‬
‫‪{ } : Braces or Curly Bracket‬‬
‫‪< > : Angle Bracket‬‬

‫\‬ ‫)برای نوشتن ادامه یک دستور در چند سطر( ‪: Backslash‬‬

‫;‬ ‫)برای نوشتن چند دستور در یک سطر( ‪: Semicolon‬‬

‫نوشتن یک یا چند حرف به صورت حروف بزرگ ‪UPPERCASE :‬‬

‫نوشتن یک یا چند حرف به صورت حروف کوچک ‪lowercase :‬‬

‫نوشتن کلمات بدون فاصله و با ترکیب حروف کوچک و بزرگ ‪CamelCase :‬‬

‫بزرگ نوشتن حرف اول ‪Capitalize :‬‬

‫‪6‬‬
‫مجموعههای تکرار پذیر ‪Iterable Collections‬‬

‫‪Lists‬‬ ‫لیست ها‬


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

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

‫‪Ordered – Mutable –Indexable‬‬

‫نحوه تعریف ‪: List‬‬

‫]…‪List = [Item1,Item2,‬‬
‫مثال ‪:‬‬

‫]‪numbers= [1, 2, 3, 4, 5, 6, 7, 8‬‬


‫] ‪data= [2, 3,"gfdfghdfg", 4.5, 3+5j‬‬
‫]'‪names= ['Maryam', 'Reza', 'Pooya', 'Sara‬‬
‫* نکته ‪ :‬شاخص داده اول صفر است یعنی ]‪ names[1‬برابر ‪ Reza‬است ‪.‬‬

‫* نکته ‪ :‬اعضای لیست قابل تغییر هستند "‪data[2]="Payam‬‬

‫( ‪) List Slicing‬‬ ‫* نکته ‪ :‬امکان دسترسی به چند عضو فراهم است ]‪numbers[1:3‬‬

‫]‪List [a:b:c‬‬
‫‪ : c‬گام‬ ‫‪ :b‬پایان‬ ‫‪ : a‬شروع‬

‫‪7‬‬
‫متدهای ‪List‬‬

‫عملکرد‬ ‫متد‬ ‫عملکرد‬ ‫متد‬


‫ادغام دو لیست‬ ‫)‪List1.extend(List2‬‬ ‫اضافه کردن یک عضو‬ ‫)‪List.append(item‬‬
‫به انتهای لیست‬
‫تعداد یک عنصر‬ ‫)‪List.count(item‬‬ ‫اضافه کردن یک عضو‬ ‫)‪List.insert(index,item‬‬
‫در محل دلخواه‬
‫ایجاد نسخه جدید از‬ ‫)(‪List.copy‬‬ ‫حذف یک عضو با‬ ‫)‪List.pop(index‬‬
‫لیست‬ ‫‪index‬‬
‫معکوس کردن عناصر‬ ‫)(‪List.reverse‬‬ ‫حذف یک عضو با‬ ‫)‪List.remove(item‬‬
‫لیست‬ ‫مقدار‬
‫مرتب سازی صعودی‬ ‫)(‪List.sort‬‬ ‫حذف تمام اعضا‬ ‫)(‪List.clear‬‬

‫)‪ List.sort(reverse=True‬مرتب سازی نزولی‬ ‫)‪ List.index(item,start,end‬جستجوی یک عنصر‬

‫‪-------------------------------------------------------------------------------------------------‬‬

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

‫‪Ordered – Immutable – Indexable‬‬


‫نحوه تعریف ‪: Tuple‬‬

‫)… ‪Tuple = (Item1, Item2,‬‬


‫مثال ‪:‬‬

‫)‪numbers= (1, 2, 3, 4, 5‬‬


‫)"‪data= (1, 2, "Reza‬‬
‫* نکته ‪ :‬برای دسترسی به اعضای ‪ Tuple‬از ] [ استفاده می کنیم‬

‫‪data[0]=1‬‬
‫* نکته ‪ :‬چندتایی امکان اضافه کردن مستقیم اعضا را ندارد ولی با تعریف مجدد می توانیم عضو اضافه کنیم‬

‫‪8‬‬
‫)‪data=data+('Ali',‬‬
‫کاما در آخر ضروری است ‪.‬‬

‫متدهای ‪Tuple‬‬

‫عملکرد‬ ‫متد‬ ‫عملکرد‬ ‫متد‬


‫)‪ Tuple.index(item,start,end‬جستجوی یک عنصر‬ ‫تعداد یک عنصر‬ ‫)‪Tuple.count(item‬‬

‫‪-------------------------------------------------------------------------------------------------‬‬

‫‪Sets‬‬ ‫مجموعه ها‬


‫مجموعه ها هم جزوی از تکرار شونده ها هستند با این تفاوت که اعضا ‪ Index‬ندارند و صورت ‪ Random‬جابجا‬
‫می شوند‬

‫‪Unordered – Mutable - Unindexable - Unique‬‬


‫نحوه تعریف ‪: Set‬‬

‫}…‪Set = {Item1,Item2,‬‬
‫مثال ‪:‬‬

‫}‪numbers = {1, 2, 3, 4, 5‬‬


‫}"‪names = {"Maryam", "Reza", "Pooya", "Ai‬‬
‫* نکته ‪ :‬در ‪ Set‬امکان تکراری بودن اعضا وجود ندارد برای همین در آمارگیری و شمارش کاربرد دارند‬

‫‪names[3] → error‬‬ ‫* نکته ‪ :‬دسترسی به اعضا با ‪ Index‬امکان پذیر نیست‬

‫* نکته ‪ :‬تغییر یک عضو امکان پذیر نیست ولی حذف و اضافه کردن عضو امکان پذیر هست‬

‫‪9‬‬
‫متدهای ‪Set‬‬

‫عملکرد‬ ‫متد‬ ‫عملکرد‬ ‫متد‬


‫حذف تمام اعضا‬ ‫)(‪Set.clear‬‬ ‫اضافه کردن یک عضو‬ ‫)‪Set.add(item‬‬
‫به انتهای ‪set‬‬
‫ادغام دو ‪set‬‬ ‫)‪Set1.update(Set2‬‬ ‫حذف یک عضو‬ ‫)(‪Set.pop‬‬

‫ایجاد نسخه جدید از‬ ‫)(‪Set.copy‬‬ ‫حذف یک عضو با‬ ‫)‪Set.remove(item‬‬


‫‪set‬‬ ‫مقدار‬
‫حذف یک عضو با مقدار ‪ ،‬در صورت عدم وجود عنصر خطا اتفاق نمیافتد‬ ‫)‪Set.discard(item‬‬

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

‫‪item in set → True or False‬‬


‫عالوه بر متدهای باال امکان ایجاد اجتماع و اشتراک در ‪ Set‬ها وجود دارد ‪:‬‬

‫عملکرد‬ ‫متد‬

‫اجتماع دو مجموعه‬ ‫)‪Uni=Set1.union(Set2‬‬

‫اشتراک دو مجموعه‬ ‫)‪Inter=Set1.intersection(Set2‬‬

‫تفاضل دو مجموعه‬ ‫)‪Dif=Set1.difference(Set2‬‬

‫تفاضل متقارن‬ ‫)‪Dif=Set1. symmetric_difference(Set2‬‬

‫‪10‬‬
‫‪Dictionaries‬‬ ‫واژه نامهها‬
‫دیکشنری یکی دیگر از مجموعه های تکرار پذیر است که شامل دوتایی های کلید و مقدار می باشد که با ‪ :‬جدا می شوند‬

‫‪Key: Value‬‬
‫‪Unordered – Mutable – Indexable – Unique‬‬
‫نحوه تعریف دیکشنری ‪:‬‬

‫}‪Dict = {key1:value1,key2:value2, . . .‬‬


‫مثال ‪:‬‬

‫}‪student = {"givenname": "Reza", "surname": "Ahmadi", "age": 25‬‬

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

‫* نکته ‪ :‬برای دسترسی به اعضا از نام کلید به همراه ] [ استفاده می کنیم‬

‫]'‪student['surname‬‬ ‫)'‪student.get('surname‬‬
‫* نکته ‪ :‬برای اضافه کردن عضو جدید باید یک کلید و مقدار آن را تعریف کنیم‬

‫‪student["std_code"] = 12856‬‬
‫متدهای ‪Dictionary‬‬

‫عملکرد‬ ‫متد‬ ‫عملکرد‬ ‫متد‬


‫حذف یک کلید و‬ ‫)‪Dict.pop(key‬‬ ‫مقدار متناظر کلید‬ ‫)‪Dict.get(key‬‬
‫مقدار آن‬
‫حذف آخرین کلید و‬ ‫)(‪Dict.popitem‬‬ ‫لیست کلیدها‬ ‫)(‪Dict.keys‬‬
‫مقدار آن و برگشت به‬
‫صورت ‪tuple‬‬
‫حذف تمام اعضا‬ ‫)(‪Dict.clear‬‬ ‫لیست مقادیر‬ ‫)(‪Dict.values‬‬

‫ادغام دو ‪dict‬‬ ‫)‪Dict1.update(Dict2‬‬ ‫تبدیل ‪ dict‬به‬ ‫)(‪Dict.items‬‬


‫لیستی از ‪ tuple‬ها‬
‫اگر کلید وجود داشته باشد مقدار آنرا برمیگرداند در غیر اینصورت کلید ‪ :‬مقدار‬ ‫)‪Dict. setdefault(key,value‬‬
‫جدید ایجاد میکند‬

‫‪11‬‬
‫‪Strings‬‬ ‫رشته های متنی‬
‫متغیرهای رشته ای نوعی ‪ Iterable‬هستند که می توان در بین کاراکترهای آن حرکت کرد‬

‫"‪s="Hello, World‬‬
‫‪s[0] → H‬‬
‫‪s[2:5] → llo‬‬
‫‪s[::-1] → dlroW ,olleH‬‬
‫متدهای ‪string‬‬

‫عملکرد‬ ‫متد‬ ‫عملکرد‬ ‫متد‬


‫شمارش تعداد تکرار‬ ‫)"‪s.count("string‬‬ ‫جداسازی متن با توجه‬ ‫)"‪s.split("string‬‬
‫به یک یا چند حرف‬
‫جستجوی یک متن و‬ ‫)‪s.find("string", start, end‬‬ ‫حذف یک یا چند حرف‬ ‫)"‪s.strip("string‬‬
‫برگشت محل اتفاق آن‬ ‫از ابتدا و انتهای متن‬
‫جستجوی یک متن و‬ ‫)‪s.index("string",start,end‬‬ ‫تبدیل به حروف کوچک‬ ‫)(‪s.lower‬‬
‫برگشت محل اتفاق آن‬
‫جایگزین کردن یک‬ ‫)‪s.replace("old","new",count‬‬ ‫تبدیل به حروف بزرگ‬ ‫)(‪s.upper‬‬
‫متن با متن دیگر‬
‫بزرگ نوشتن حرف اول )"‪ s.startswith("string",start,end‬چک کردن شروع یک‬ ‫)(‪s. capitalize‬‬
‫متن‬
‫بزرگ نوشتن اول کلمات )‪ s.endswith("string",start,end‬چک کردن انتهای یک‬ ‫)(‪s.title‬‬
‫متن‬
‫پر کردن صفر پیش از‬ ‫)‪s.zfill(number‬‬ ‫‪ True‬اگر کل متن‬ ‫)(‪s.isnumeric‬‬
‫رقم‬ ‫عددی باشد‬
‫اعضای ‪ iterable‬را با‬ ‫)‪s.join(iterable‬‬ ‫‪ True‬اگر کل متن‬ ‫)(‪s.isalpha‬‬
‫متن مشخص شده‬ ‫حروف الفبا باشد‬
‫ترکیب میکند‬
‫قراردادن سطرها در‬ ‫)(‪s.splitlines‬‬ ‫‪ True‬اگر متن فقط‬ ‫)(‪s.isalnum‬‬
‫یک لیست ( ‪) \n‬‬ ‫شامل عدد و حرف باشد‬

‫‪12‬‬
Decision Control Flow ‫ساختارهای تصمیم‬

‫ تک خطی‬if ‫دستور‬
if ‫ شرط‬: Expr1

else : Expr2
‫مثال‬

a=5
if a >= 8 : b=2
else : b=3

‫ چند خطی‬if ‫دستور‬


if ‫ شرط‬:

Expr1
Expr2

else :
Expr1
Expr2

)Nested if( ‫ تودرتو‬if ‫دستور‬


if ‫ شرط‬:

Expr1
Expr2

elif ‫ شرط‬:


13
elif ‫ شرط‬:


else :

‫مثال‬

a=100
if a == 10 :
b=a+1
elif a == 50 :
b=a+2
elif a == 90 :
b=a+3
else :
b = 100

14
Match Case ‫دستور‬
‫ استفاده کنیم‬match ‫ های تو در تو می توانیم از ساختار‬if ‫به جای استفاده از‬

match ‫ متغییر‬:

case ‫ شرط‬:

Expr1
Expr2
...
case ‫ شرط‬:

Expr1
...
case _ :
Expr1
...
: ‫مثال‬

a=500
match a:
case 100:
print(a+1)
case 200 | 300:
print(a+2)
case a if a>400 :
print(a+3)
case _ : #case else
print(a+4)

15
‫ساختارهای تکرار ‪Loop Control Flow‬‬

‫حلقه ‪for‬‬
‫‪ :‬تکرار پذیر ‪ in‬شمارنده ‪for‬‬

‫‪Expr1‬‬
‫‪Expr2‬‬
‫…‬
‫‪break / continue‬‬
‫…‬
‫‪else:‬‬
‫‪Expr1‬‬
‫…‬

‫* نکته ‪ :‬شمارنده حلقه یک متغیر است که نیاری به اعالن ندارد‬

‫* نکته ‪ :‬تکرار پذیر می تواند از انواع ‪ List‬یا ‪ Tuple‬یا ‪ String‬یا سایر ‪ Iterable‬های ‪ Python‬باشد‪.‬‬

‫* نکته ‪ :‬دستور ‪ else‬در انتهای حلقه اجرا میشود مگر اینکه دستور ‪ break‬اجرا شود‬

‫* نکته ‪ :‬برای ایجاد محدوده اعداد از تابع ‪ range‬استفاده می کنیم‬

‫)‪range(start, end, step‬‬


‫)‪range(50‬‬
‫)‪range(1,100‬‬
‫)‪range(1,500,2‬‬

‫‪16‬‬
‫حلقه ‪While‬‬
‫‪ :‬شرط ‪while‬‬

‫‪Expr1‬‬
‫‪Expr2‬‬
‫…‬
‫‪break / continue‬‬
‫…‬
‫‪else:‬‬
‫‪Expr1‬‬
‫…‬
‫* نکته ‪ :‬در بدنه ‪ while‬باید دستوراتی نوشته شوند که شرط ‪ False‬شود در غیر اینصورت حلقه بی نهایت بار تکرار‬
‫خواهد شد ‪.‬‬

‫* نکته ‪ :‬دستور ‪ else‬در انتهای حلقه اجرا میشود مگر اینکه دستور ‪ break‬اجرا شود‬

‫مثال‬

‫‪a=1‬‬
‫‪while a<=20:‬‬
‫)‪print(a‬‬
‫‪a+=1‬‬

‫‪17‬‬
List , Set , Dict Comprehension ‫تکمیل لیست و مجموعه و دیکشنری‬

‫ جدید بسازیم که با تغییرات روی منبع اصلی ایجاد‬Dict ‫ یا‬Set ‫ یا‬List ‫ می توانیم یک‬if ‫ و شرط‬for ‫با ترکیب حلقه‬
. ‫می شود‬

Dict Comprehension ‫ یا‬Set Comprehension ‫ یا‬List Comprehension ‫ به این عملیات‬Python ‫در‬


. ‫می گوئیم‬

‫در ادامه مثالهایی از هر کدام آورده می شود‬

numbers = [1,2,3,4,5,6]
double_numbers = [n*2 for n in numbers] → [2,4,6,8,10,12]
even = [n for n in numbers if n%2==0] → [2,4,6]
intersect = [n for n in numbers if n in double_numbers] → [2,4,6]

‫ هم قابل اجراست‬Set ‫همهی مثال های باال در مورد‬

‫ تبدیل دو لیست به یک دیکشنری‬: ‫* نکته‬

students=['Ali', 'Reza', 'Sara', 'Maryam']


grades=[18,17,19,15]

stdudents_grades = {students[i]:grades[i] for i in range(0,4)}


→ {"Ali":18, "Reza":17, "Sara":19, "Maryam":15}

. ‫ استفاده کنیم‬zip ‫ می توانیم از تابع‬Set ‫ یا‬Tuple ‫ یا‬List ‫ برای ترکیب دو‬: ‫* نکته‬

. ‫ می کند‬Tuple ‫این تابع اعضا را به صورت نظیر به نظیر تبدیل به‬

stdudents_grades = dict(zip(students, numbers))

18
‫‪Comment‬‬ ‫درج توضیح‬

‫درج توضیح در زبانهای برنامه نویسی به دو دلیل انجام می شود‬

‫‪Documentation‬‬ ‫‪ )1‬مستند سازی‬

‫‪ )2‬افزایش خوانایی برنامه برای سایر استفاده کنندگان از برنامه و کدها‬

‫برای درج توضیح در ‪ Python‬دو روش وجود دارد ‪:‬‬

‫‪Comment‬‬ ‫‪ )1‬توضیح تک خطی‬

‫برای درج توضیح تک خطی از عالمت ‪ #‬استفاده می کنیم‬

‫‪Doc String‬‬ ‫‪ )2‬توضیح چند خطی‬

‫برای درج توضیح چند سطری از """ یا ''' استفاده میکنیم ‪)Triple Quotations( .‬‬

‫‪19‬‬
‫‪Built-in Functions‬‬ ‫توابع استاندارد‬

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

‫برای مشاهده لیست کامل توابع استاندارد می توانید به صفحهی زیر مراجعه کنید‬

‫‪https://docs.python.org/3/library/functions.html‬‬
‫در ادامه چند تابع مهم را بررسی می کنیم‬

‫تابع ‪print‬‬
‫این تابع برای مشاهده مقدار متغیرها و متنها روی صفحه نمایش استفاده می شوند ‪.‬‬

‫)‪","mode"),flush=True‬آدرس و نام فایل"(‪",file=open‬متن انتهایی"=‪",end‬جدا کننده"=‪print(value1,value2,…,sep‬‬

‫‪ : value‬مقادیری که در خروجی چاپ می شوند‬

‫‪ : sep‬یک متن دلخواه به عنوان جدا کننده بین مقادیر‬

‫‪ : end‬متنی که در انتها چاپ خواهد شد‬

‫‪ : file‬ارسال خروجی به یک فایل (فایل باید به تابع ‪ open‬ایجاد شود)‬

‫‪ : flush‬مقدار ‪ True‬یا ‪ False‬برای تخلیه ‪ Buffer‬چاپ (پیش فرض = ‪)False‬‬

‫مثال ‪:‬‬

‫)"‪print("test‬‬
‫)‪print(5,7,9‬‬ ‫‪→579‬‬ ‫به صورت پیش فرض بین مقادیر یک فاصله قرار می گیرد‬

‫)"‪print(5,7,9,sep="-‬‬ ‫‪→ 5-7-9‬‬


‫* نکته ‪ :‬برای ایجاد سطر از کاراکتر ‪ New Line‬که ‪ \n‬است و برای پرش به اندازه یک ‪ Tab‬به جلو از ‪ \t‬استفاده‬
‫میکنیم‪.‬‬

‫)" ‪print("Enter your name : \n‬‬


‫‪20‬‬
‫* نکته ‪ :‬برای مشاهده خروجی چند تابع ‪ print‬در یک سطر از آرگومان ""=‪ end‬استفاده می کنیم ‪.‬‬

‫* نکته ‪ :‬در تابع ‪ print‬می توانیم از ‪( f string‬مخفف ‪ )Formatted String‬استفاده کنیم ‪.‬‬

‫در ‪ Python‬به ترکیب متن همراه با یک یا چند متغیر ‪ f string‬می گوئیم‬

‫"‪name="Reza‬‬
‫‪avg=20‬‬
‫)"}‪print(f "The name is : {name} and Average is : {avg‬‬
‫* نکته ‪ :‬در ‪ f string‬می توانیم به تعداد کاراکتر دلخواه پرش ایجاد کنیم‬

‫)"}‪print(f "The name is : {name:5} and Average is : {avg:5‬‬


‫در این حالت قبل از چاپ متغیر ‪ 5‬کاراکتر ‪ Space‬قرار می گیرد‬

‫برای پرش توابع )(‪ rjust‬و )(‪ ljust‬هم در دسترس هستند و برای قرار دادن صفرهای پیش از رقم از )‪ zfill(n‬استفاده‬
‫می کنیم ‪.‬‬

‫)"}‪print(f "The name is : {name:5} and Average is : {avg:5.2f‬‬


‫در این مثال متغیر ‪ avg‬با دو رقم اعشار نمایش داده میشود ‪.‬‬

‫‪{:d} → int‬‬ ‫‪{:f}→ float‬‬ ‫‪{:b} → binary‬‬


‫‪{:x} → hex‬‬ ‫‪{:o} → oct‬‬ ‫‪{;,} → 1000 Separator‬‬
‫‪---------------------------------------------------------------‬‬

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

‫)" ‪data = input(" Message‬‬


‫مقدار دریافت شده در متغیر ‪ data‬ذخیره می شود و باید توجه کرد که از نوع ‪ string‬است ‪.‬‬

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

‫)) " ‪number = int(input("Enter a Number :‬‬


‫‪---------------------------------------------------------------‬‬

‫‪21‬‬
‫تابع ‪type‬‬
‫مشاهده نوع داده یک متغیر‬

‫‪a=5‬‬
‫>"‪print(type(a)) → <class "int‬‬
‫‪---------------------------------------------------------------‬‬

‫تابع ‪len‬‬
‫مشاهده طول یک ‪Iterable‬‬

‫‪---------------------------------------------------------------‬‬

‫تابع ‪range‬‬
‫ایجاد یک محدوده از اعداد که به صورت یک ‪ Iterable‬برگشت می شود ‪.‬‬

‫)‪range(start , end , step‬‬


‫* نکته ‪ :‬حد باال در متغیر ذخیره نمیشود‬

‫‪---------------------------------------------------------------‬‬

‫توابع ‪Casting‬‬
‫توابع ‪ casting‬به توابعی گفته می شود که برای تبدیل یک نوع متغیر به نوع دیگر استفاده می شوند‬

‫)(‪int‬‬ ‫)(‪float‬‬ ‫)(‪str‬‬ ‫)(‪complex‬‬ ‫)(‪bin‬‬ ‫)(‪hex‬‬ ‫)(‪oct‬‬


‫)(‪list‬‬ ‫)(‪tuple‬‬ ‫)(‪set‬‬ ‫)(‪dict‬‬
‫‪---------------------------------------------------------------‬‬

‫تابع ‪sum‬‬
‫)‪sum(Iterable , init‬‬
‫مثال‬

‫]‪nums=[4,6,8,7‬‬
‫)‪sum(nums‬‬ ‫‪→ 25‬‬
‫)‪sum(nums, 20‬‬ ‫‪→ 45‬‬

‫‪22‬‬
‫توابع ‪ min‬و ‪max‬‬
‫)‪max(Iterable‬‬
‫)‪min(Iterable‬‬
‫‪---------------------------------------------------------------‬‬

‫تابع ‪dir‬‬
‫مشاهده متدهای یک ‪Object‬‬

‫][=‪a‬‬ ‫یا‬ ‫)(‪a=list‬‬

‫)‪dir(a‬‬
‫‪---------------------------------------------------------------‬‬

‫تابع ‪id‬‬
‫مشاهده آدرس نگهداری متغیر در حافظه‬

‫‪---------------------------------------------------------------‬‬

‫تابع ‪ ord‬و ‪chr‬‬


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

‫‪ord('A') → 65‬‬
‫‪chr(65) → A‬‬
‫‪---------------------------------------------------------------‬‬

‫تابع ‪zip‬‬
‫این تابع دو ‪ Iterable‬را به دوتایی های ‪ Tuple‬تبدیل می کند ‪ .‬تکرار شونده ها می توانند از انواع مختلف باشند ‪ ،‬مثال‬
‫یک ‪ List‬و یک ‪ Set‬و حتی نیاز نیست طول آنها برابر باشد ‪.‬‬

‫]‪a=[5,6,3,9‬‬
‫}‪b={1,2,3,4‬‬
‫])‪c=list(zip(a, b)) → [(5,1),(6,2),(3,3),(9,4‬‬

‫‪23‬‬
‫تعریف تابع ‪User-Defined Functions‬‬
‫یک تابع مجموعه ای دستورات ‪ Python‬است که فرآیند مشخصی را پیاده سازی می کند‬

‫هر تابع سه قسمت دارد ‪:‬‬

‫‪1) Return value‬‬ ‫‪2) Function Name‬‬ ‫‪3) Parameters‬‬


‫برای تعریف یک تابع از کلمه کلیدی ‪ def‬استفاده می کنیم‬

‫‪def function_name (param1, param2, …):‬‬


‫‪Expr1‬‬
‫‪Expr2‬‬
‫…‬
‫‪return return_value‬‬
‫مثال‬

‫‪def mul(x,y):‬‬
‫‪m=x*y‬‬
‫‪return m‬‬
‫* نکته ‪ :‬در هنگام فراخوانی یک تابع متغیرهای به جای پارامترها قرار می گیرند‬

‫‪Arguments‬‬ ‫در هنگام فراخوانی‬ ‫‪Parameters‬‬ ‫در هنگام تعریف‬

‫) ‪mul(10 , 5‬‬
‫* نکته ‪ :‬تعداد پارامترها از نسخه ‪ 3.5‬به بعد محدودیت ندارد‬

‫* نکته ‪ :‬پارامترها ‪ 4‬نوع هستند ‪:‬‬

‫‪ -‬اجباری ‪ Required‬یا ‪ Non-Default‬یا ‪Positional‬‬

‫‪ -‬اختیاری ‪ Optional‬یا ‪Default‬‬

‫‪ -‬تعداد نامشخص ‪Non-Keyworded Variable Length‬‬

‫‪ -‬تعداد نامشخص با فراخوانی نام ‪Keyworded Variable Length‬‬

‫‪24‬‬
‫پارامترها به صورت پیش فرض اجباری هستند برای اختیاری شدن آرگومانها کافیست یک مقدار اولیه به آنها نسبت دهیم‬

‫‪def test(a, b, c=0) :‬‬


‫‪pass‬‬
‫* نکته ‪ :‬بعد از یک آرگومان اختیاری نمیتوانیم آرگومانهای اجباری تعریف کنیم ‪.‬‬

‫‪def test(a, b, c=" ", d) :‬‬ ‫خطا →‬

‫‪pass‬‬

‫آرگومانهای تعداد نامشخص بدون نام‬


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

‫‪def func(*args) :‬‬


‫‪pass‬‬
‫در این حالت ‪ args‬به صورت یک ‪ Tuple‬به تابع ارسال می شود و میتواند از ‪ 0‬تا تعداد نامحدود عضو داشته باشد‪.‬‬

‫‪def test(*a):‬‬
‫‪for i in a:‬‬
‫)‪print(i**2‬‬
‫‪-----------------------------‬‬
‫)‪test(2, 4, 7, 6, 9‬‬

‫آرگومانهای تعداد نامشخص با نام‬


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

‫‪def func(** kwargs) :‬‬


‫‪pass‬‬

‫‪25‬‬
‫مثال ‪:‬‬

‫; )‪def test(**a‬‬
‫‪for x in a.values():‬‬
‫)‪print(x**2‬‬
‫‪-------------------------------‬‬
‫)‪test(a=5,b=6,c=7‬‬
‫در هنگام استفاده از ‪ **kwargs‬متدهای )(‪ .values‬و )(‪ .keys‬در بدنه تابع پر استفاده خواهند بود تا بتوانیم کلیدها و‬
‫مقادیر ‪ Dict‬را جداگانه پردازش کنیم ‪.‬‬

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

‫‪def test(**numbers):‬‬
‫]'‪myargs = ['oper', 'check', 'do‬‬
‫‪if myargs != list(numbers.keys()) :‬‬
‫)'‪raise Exception('Wrong Arguments‬‬
‫))(‪return sum(numbers.values‬‬
‫‪-------------------------------‬‬
‫)‪test(oper=9,check=10,do=5‬‬
‫در مثال باال دستور ‪ raise Exception‬برای ایجاد یک خطای دلخواه و توقف ادامه برنامه استفاده شده است ‪.‬‬

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

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

‫* نکته ‪ :‬آرگومانهای اجباری و اختیاری هم امکان فراخوانی با نام را دارند و در واقع ‪ Key Worded‬هستند ‪.‬‬

‫‪def test(a, b, c=0):‬‬


‫‪pass‬‬
‫‪-------------------------‬‬
‫)‪test(a=2, b=6, c=7‬‬
‫‪or‬‬
‫)‪test(b=5, a=2, c=8‬‬

‫‪26‬‬
‫قلمرو متغیرها‬
‫برای متغیرهایی که درون و بیرون تابع ها استفاده می شوند قلمرو تعریف می شود‬

‫در حالت کلی دو قلمرو وجود دارد‬

‫‪Global Variables‬‬ ‫‪ -‬عمومی (جهانی)‬

‫‪Local Variables‬‬ ‫‪ -‬خصوصی (محلی)‬

‫متغیرهایی که در برنامه اصلی تعریف می شوند از نوع ‪ Global‬هستند ‪ .‬به همین جهت نیازی به استفاده از کلمه کلیدی‬
‫‪ global‬قبل از نام آنها نیست‬

‫‪def test():‬‬
‫)‪print(a+5‬‬
‫‪-------------------------‬‬
‫‪a=5‬‬
‫)‪print(a‬‬ ‫‪→5‬‬
‫)(‪test‬‬ ‫‪→ 10‬‬
‫متغیرهای ‪ Global‬در همهی تابع ها قابل استفاده هستند ولی اگر درون یک تابع متغیری با همان نام تعریف شود متغیر‬
‫درون تابع اولویت دارد ‪.‬‬

‫‪def test():‬‬
‫‪a=10‬‬
‫)‪print(a+5‬‬
‫‪-------------------------‬‬
‫‪a=5‬‬
‫)‪print(a‬‬ ‫‪→5‬‬
‫)(‪test‬‬ ‫‪→ 15‬‬
‫* نکته ‪ :‬متغیرهای ‪ Global‬در درون تابع ها قابل استفاده هستند ولی قابل تغییر نیستند ‪ ،‬یعنی اگر در تابع مقداری به‬
‫آنها نسبت داده شود برنامه با خطا روبرو خواهد‬

‫حال اگر بخواهیم یک متغیر ‪ Global‬را درون تابع تغییر دهیم باید درون تابع با کلمه کلیدی ‪ global‬آنرا تعریف کنیم ‪.‬‬

‫‪27‬‬
‫مثال ‪:‬‬

‫‪def test():‬‬
‫‪global a‬‬
‫‪a=a+5‬‬
‫)‪print(a‬‬
‫‪-------------------------‬‬
‫‪a=5‬‬
‫)‪print(a‬‬ ‫‪→5‬‬
‫)(‪test‬‬ ‫‪→ 10‬‬
‫)‪print(a‬‬ ‫‪→ 10‬‬
‫* نکته ‪ :‬کلمه کلیدی ‪ local‬نداریم و متغیرهای درون تابع ها به صورت خودکار ‪ Local‬تعریف می شوند و پس از پایان‬
‫تابع حذف می شوند ‪.‬‬

‫متغیرهای غیر محلی‬


‫متغیرهای غیر محلی فقط در توابع تودرتو (‪ )Nested Functions‬کاربرد دارند و با کلمه کلیدی ‪ nonlocal‬تعریف‬
‫می شوند ‪.‬‬

‫‪def out():‬‬
‫‪a=5‬‬
‫)‪print(a‬‬ ‫‪→5‬‬
‫‪def in():‬‬
‫‪nonlocal a‬‬
‫‪a=a+5‬‬
‫)‪print(a‬‬ ‫‪→10‬‬

‫‪28‬‬
‫تعریف تابع یک خطی ‪Lambda‬‬

‫‪ lambda‬یک تابع تک خطی است که فقط یک خط دستور در آن می توان نوشت و یک مقدار برگشتی به متغیر نسب‬
‫داده شده به آن برگشت می شود ولی تعداد پارامترهای آن محدودیتی ندارد ‪.‬‬

‫نحوه تعریف‬

‫‪func=lambda param1, param2, … : Expr‬‬


‫در هنگام فراخوانی از نام متغیر استفاده می کنیم‬

‫)…‪func (arg1,arg2,‬‬
‫مثال‬

‫‪mul = lambda x,y :x*y‬‬


‫))‪print(mul(7, 9‬‬ ‫‪→ 63‬‬
‫کاربرد اصلی ‪ lambda‬برای تعریف یک تابع درون تابع دیگر است که عملیات درونی را انجام می دهد ‪.‬‬

‫‪ : First Class Function‬تابعی که آرگومان تابع دیگر است‬

‫‪ : High Order Function‬تابعی که تابع دیگر را به عنوان آرگومان قبول می کند ‪.‬‬

‫‪29‬‬
‫‪Modules‬‬ ‫نصب و استفاده از ماژولها‬
‫ماژول یک فایل ‪ .py‬است که شامل کدهای نوشته شده به زبان ‪ Python‬است که یکی از ویژگیهای اصلی و قدرتمند در‬
‫زبان ‪ Python‬به شمار می رود ‪.‬‬

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

‫در هر پروژه ‪ Python‬می توانیم از ماژولهای استاندارد و یا تعریف شده توسط کاربر استفاده کنیم ‪ .‬این ماژولها برای‬
‫سرعت بخشیدن به پروژه جاری و دوری از نوشتن کدهای طوالنی برای فرآیندها ‪ ،‬بسیار موثر هستند ‪.‬‬

‫‪Standard Modules‬‬ ‫‪or‬‬ ‫‪Built-in Modules‬‬


‫‪Modules‬‬
‫‪User-Defined Modules‬‬

‫ماژولهای استاندارد ‪ Python‬در هنگام نصب ‪ Interpreter‬به صورت خودکار نصب می شوند و در فولدر ‪ Lib‬در محل‬
‫نصب ‪( Python‬در ‪ Windows‬معموال در ‪ )C:\Program Files‬قرار می گیرند ‪.‬‬

‫ماژولهای تعریف شده توسط کاربر در محلی که فایلهای پروژه جاری قرار دارند ذخیره می شوند‬

‫نحوه استفاده از یک ماژول‬

‫‪import MaduleName‬‬
‫* نکته ‪ :‬نیازی به تایپ ‪ .py‬در انتهای نام ماژول نیست ‪.‬‬

‫در بدنه برنامه برای دسترسی به عناصر ماژول (توابع ‪ ،‬متغیرها و ‪ ). . .‬از نام ماژول و عالمت ‪ )Dot( .‬استفاده می کنیم ‪.‬‬

‫‪import math‬‬

‫‪a=math.pi‬‬
‫)‪b=math.gcd(500,150‬‬

‫‪30‬‬
‫نام ماژول در سه محل جستجو می شود و اگر وجود نداشته باشد خطا اتفاق می افتد‬

‫‪ )1‬در فولدر جاری (جایی که فایل فراخوان دهنده وجود دارد )‬

‫‪ )2‬در فولدر ‪ Lib‬در محل نصب ‪Python‬‬

‫‪ )3‬فولدرهایی که در مسیر پیش فرض سیستم عامل تعریف شدهاند (‪)Environment Variables‬‬

‫* نکته ‪ :‬برای استفاده راحت تر از ماژول در برنامه اصلی می توانیم برای آن یک نام مستعار تعریف کنیم‬

‫‪import ModuleName as Alias‬‬


‫مثال‬

‫‪import numpy as np‬‬


‫))‪print(np.sin(3.14‬‬
‫در بعضی موارد الزم است یک یا چند تابع مشخص را از یک ماژول ‪ Import‬کنیم ‪ .‬در این حالت به روش زیر عمل‬
‫می کنیم ‪.‬‬

‫‪from ModuleName import Function/Variable‬‬

‫‪from math import pi‬‬


‫در حالت برای فراخوانی تابع یا متغیر نیازی به درج نام ماژول نیست‬

‫)‪print(pi‬‬
‫* نکته ‪ :‬برای استفاده از همهی توابع و متغیرهای یک ماژول از * استفاده می کنیم‬

‫* ‪from ModuleName import‬‬


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

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

‫* نکته ‪ :‬در هنگام استفاده از چند ماژول که به صورت والد و فرزند تعریف شدهاند باید مراقب باشیم که یک ماژول والد در‬
‫فرزند خودش ‪ import‬نشود ‪.‬‬

‫‪31‬‬
‫‪Python Packages‬‬ ‫مدیریت بسته ها‬

‫بسته یا ‪ Package‬یک فولدر و زیر فولدرهای آن هستند که ماژولها را در خود ذخیره کردهاند ‪.‬‬

‫‪Game‬‬

‫‪Levels‬‬ ‫‪Images‬‬ ‫‪Sounds‬‬ ‫‪Users‬‬ ‫‪__init__.py‬‬

‫‪__init__.py‬‬ ‫‪__init__.py‬‬ ‫‪__init__.py‬‬ ‫‪__init__.py‬‬

‫‪start.py‬‬ ‫‪load.py‬‬ ‫‪effect.py‬‬ ‫‪single.py‬‬

‫‪over.py‬‬ ‫‪open.py‬‬ ‫‪context.py‬‬ ‫‪multi.py‬‬

‫‪steps.py‬‬

‫شکل باال یک مثال از ایجاد یک ‪ Package‬برای بازی است ‪.‬‬

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

‫* نکته ‪ :‬هر فولدر شامل یک فایل ‪ __init__.py‬است که عملیات شروع اجرای بسته (‪ )Initialization‬را بر عهده‬
‫دارد‪ .‬این فایل می تواند خالی باشد‪.‬‬

‫نحوه استفاده از ‪ Module‬های ذخیره شده در ‪Package‬‬

‫‪import Game.Levels.start‬‬
‫)‪Game.Levels.start.difficulty(2‬‬
‫برای راحت تر شدن استفاده می توانیم از روش زیر را به کار بگیریم‬

‫‪from Game.Levels import start‬‬


‫)‪start.difficulty(2‬‬
‫‪32‬‬
‫نصب ‪ Package‬های استاندارد با ‪pip‬‬
‫برای نصب ‪ Package‬هایی که به صورت پیش فرض نصب نیستند از دستور ‪ pip‬استفاده می کنیم‬

‫برای مشاهده آخرین نسخهی ‪ Package‬ها و بسته های جدید به ‪ PyPi.org‬مراجعه می کنیم‬

‫نصب یک بسته‬
‫‪pip install PackageName‬‬
‫برای حذف بسته از ‪ Uninstall‬استفاده می کنیم‬

‫‪pip uninstall PackageName‬‬

‫‪pip --version‬‬ ‫* نکته ‪ :‬مشاهده نسخه جاری ‪pip‬‬

‫‪pip install --upgrade pip‬‬ ‫* نکته ‪ :‬به روز رسانی ‪pip‬‬

‫‪pip list‬‬ ‫* نکته ‪ :‬مشاهده لیست بسته های نصب شده‬

‫‪pip search packagename‬‬ ‫* جستجو در بسته های موجود‬

‫چند بسته پر کاربرد در ‪Python‬‬


‫‪import datetime‬‬ ‫بسته عملیات تاریخ و زمان ‪ datetime‬است که به صورت پیش فرض نصب است‬

‫‪-------------------------------------------------------------------------‬‬

‫بسته ‪ jupyter‬یک توزیع از ‪ Python‬است که روی ‪ Browser‬اجرا می شود و شامل امکاناتی مانند رسم نمودار است و‬
‫‪pip install jupyter‬‬ ‫محیط گرافیکی دارد ‪.‬‬

‫برای استفاده از ‪ jupyter‬پس از نصب بسته ‪ ،‬در خط فرمان دستور زیر را اجرا میکنیم ‪:‬‬

‫‪jupyter notebook‬‬
‫‪-------------------------------------------------------------------------‬‬

‫بسته ‪ PyInstaller‬برای ایجاد فایل ‪ .EXE‬در ‪ Windows‬استفاده می شود‬

‫‪pip install pyinstaller‬‬

‫‪33‬‬
‫ایجاد فایل اجرایی از یک فایل‬

‫‪pyinstaller file.py‬‬
‫‪pyinstaller --onefile file.py‬‬
‫‪-------------------------------------------------------------------------‬‬

‫‪import os‬‬ ‫بسته ‪ : OS‬در این بسته متدهای دسترسی به فایلها و فولدرها و عملیات سیستم عامل قرار دارند‬

‫‪-------------------------------------------------------------------------‬‬

‫بسته ‪ NumPy‬یک بسته کاربردی در ‪ Python‬است که برای محاسبات عددی پیشرفته و مدیریت ماتریسهای همگن‬
‫‪pip install numpy‬‬ ‫چند بعدی و حل معادالت خطی استفاده می شود‪.‬‬

‫‪-------------------------------------------------------------------------‬‬

‫‪pip install scipy‬‬ ‫بسته ‪ : SciPy‬در این بسته توابع راضی پیشرفته و محاسبات علمی و فنی قرار دارند‪.‬‬

‫‪-------------------------------------------------------------------------‬‬

‫‪pip install matplotlib‬‬ ‫بسته ‪ : MatPlotLib‬این بسته برای رسم نمودارها و خروجی گرافیکی استفاده می شود‬

‫‪import matplotlib.pyplot as plt‬‬


‫‪-------------------------------------------------------------------------‬‬

‫بسته ‪ TKinter‬و ‪ : wxPython‬این بسته ها شامل توابع و عناصر ایجاد فرمها و کنترل ها هستند‬

‫که برای ایجاد رابط گرافیکی (‪ )GUI‬استفاده می شوند ‪.‬‬

‫‪-------------------------------------------------------------------------‬‬

‫بسته ‪ : Pandas‬ایجاد جدول و مدیریت ‪ Data Structure‬ها‬

‫‪-------------------------------------------------------------------------‬‬

‫بسته ‪ : Pillow‬بسته پردازش تصویر‬

‫‪-------------------------------------------------------------------------‬‬

‫بسته های ‪ Scrapy‬و ‪ : Socket‬برای مدیریت شبکه و دستکاری داده ها‬

‫‪-------------------------------------------------------------------------‬‬

‫‪34‬‬
‫مدیریت فایلها ‪File I/O‬‬

‫برای ذخیره دائمی مقادیر متغیرها و استفاده در دفعات بعدی باید آنها را در یک فایل ذخیره کنیم‬

‫ایجاد یک فایل‬

‫)"‪file=open("Address and File name ", "Mode", "Encoding‬‬


‫در متغیر ‪ file‬اشاره گر فایل ذخیره می شود‬

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

‫* نکته ‪ :‬روش درج آدرس‬

‫‪C:\\test\\test.txt‬‬
‫‪C:/test/test.txt‬‬
‫* نکته ‪ :‬در سیستم عامل های ‪ Linux‬و ‪ MacOS‬روش آدرس دهی متفاوت است‬

‫‪/home/username/Documents/test.txt‬‬
‫برای مشاهده آدرس فولدر جاری در ‪ Terminal‬از دستور ‪ pwd‬استفاده میکنیم‪.‬‬

‫حالتهای ‪Mode‬‬

‫‪ )read( : r‬فقط برای خواندن‬

‫‪ )write( : w‬فقط برای نوشتن (در صورت وجود فایل آنرا بازنویسی می کند)‬

‫‪ )append( : a‬اضافه کردن متن به انتهای فایل‬

‫‪ )Exclusive Creation( : x‬فقط برای نوشتن (در صورت وجود فایل خطا اتفاق می افتد)‬

‫‪ )Text Mode( : t‬باز کردن در حالت متنی (حالت پیش فرض)‬

‫‪ )Binary Mode( : b‬باز کردن در حالت ‪( Byte Like‬برای فایلهای ‪ Image‬و ‪ Exe‬و‪)...‬‬

‫‪ : +‬برای به روز رسانی (قابل استفاده با ‪ r‬و ‪ w‬و ‪) a‬‬

‫‪35‬‬
‫حالتهای ‪Encoding‬‬

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

‫‪Windows‬‬ ‫→‬ ‫‪cp1252‬‬


‫‪Linux‬‬ ‫→‬ ‫‪utf-8‬‬

‫مثال‬

‫)"‪txt=open("test.txt", "r‬‬
‫)"‪img=open("Image.jpg", "rb‬‬
‫)"‪file=open("C:\\test\\test.txt", "wt", encoding="utf-8‬‬
‫)"‪prog=open("C:/run/prog.exe", "r+b‬‬
‫)"‪in MacOS : file= open("/Users/username/Documents/test.txt" , "w+‬‬
‫* نکته ‪ :‬در حالتهای ‪ r‬و ‪ w‬اشاره گر (‪ )Pointer‬فایل در ابتدای فایل قرار می گیرد و در حالت ‪ a‬در انتهای آن‬

‫متدهای ‪File‬‬
‫)‪file.read(size‬‬
‫آرگومان ‪ Size‬برحسب ‪ Byte‬است و در صورت عدم درج‪ ،‬همهی فایل خوانده می شود و در یک ‪ str‬قرار می گیرد‬

‫‪-------------------------------------------------------------------------------------------------‬‬

‫)(‪file.readline‬‬
‫خواندن یک سطر تا رسیدن به ‪( \n‬شامل ‪ )\n‬و برگشت به صورت ‪str‬‬

‫‪-------------------------------------------------------------------------------------------------‬‬

‫)(‪file.readlines‬‬
‫خواندن همهی سطرها و قراردادن در یک ‪list‬‬

‫‪-------------------------------------------------------------------------------------------------‬‬

‫)"‪file.write("String‬‬
‫نوشتن متن درون فایل (برای ایجاد سطر باید ‪ \n‬درج شود )‬

‫‪36‬‬
‫)‪file.writelines(list‬‬
‫نوشتن یک لیست در فایل که عناصر لیست باید ‪ str‬باشند‬

‫‪-------------------------------------------------------------------------------------------------‬‬

‫)(‪file.close‬‬
‫بستن فایل‪ ،‬هرچند که با رسید برنامه به خط آخر فایلها بسته میشوند ولی در صورت بروز خطا ممکن است فایل باز بماند‬

‫‪-------------------------------------------------------------------------------------------------‬‬

‫)‪file.seek(offset, whence‬‬
‫پرش به یک موقعیت مشخص در فایل بر حسب بایت‬

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

‫پارامتر ‪ whence‬اختیاری است و میتواند دارای یکی از سه مقدار ‪ 0‬و ‪ 1‬و ‪ 2‬باشد ‪.‬‬

‫عدد صفر که پیش فرض متد است یعنی مالک ‪ offset‬برای پرش ابتدای فایل باشد‬

‫عدد ‪ 1‬یعنی مالک پرش از موقعیت فعلی باشد‬

‫عدد ‪ 2‬یعنی مالک پرش انتهای فایل باشد‬

‫‪-------------------------------------------------------------------------------------------------‬‬

‫* نکته ‪ :‬اگر در هنگام خواندن و نوشتن فایل خطایی اتفاق بیافتد ممکن است )(‪ file.close‬اجرا نشود و در نتیجه فایل‬
‫باز بماند و ذخیره نشود‬

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

‫‪with open("D:/test.txt","r+") as file:‬‬


‫)(‪content = file.read‬‬

‫در حالت عملیات مربوط به فایل را در بلوک ‪ with‬مینویسیم با رسیدن بلوک به انتها فایل به صورت خودکار بسته و‬
‫ذخیره میشود‪.‬‬

‫‪37‬‬
‫عملیات روی فایلها و فولدرها ‪Directories and Files‬‬
‫برای اجرای عملیات روی فایلها در سطح سیستم عامل از ماژول ‪ os‬استفاده می کنیم‬

‫‪import os‬‬

‫متدهای ‪os‬‬
‫)(‪os.getcwd‬‬ ‫آدرس فولدر جاری به صورت رشته‬

‫)(‪os.getcwdb‬‬ ‫آدرس فولدر جاری به صورت باینری‬

‫)"‪os.chdir("Address‬‬ ‫تغییر مسیر‬

‫)(‪os.listdir‬‬ ‫لیست فایلها و فولدرهای در یک لیست‬

‫)"‪os.mkdir("Name‬‬ ‫ایجاد فولدر‬

‫)"‪os.rename("old name", "new name‬‬ ‫تغییر نام‬

‫)"‪os.remove("File Name‬‬ ‫حذف فایل‬

‫)"‪os.rmdir("Folder Name‬‬ ‫حذف یک فولدر خالی‬

‫* نکته ‪ :‬برای حذف فولدر دارای محتویات از ماژول ‪ shutil‬استفاده می کنیم‬

‫‪import shutil‬‬
‫)"‪shutil.rmtree("Folder Name‬‬

‫‪38‬‬
‫رفع خطا ‪Errors and Exceptions‬‬

‫خطاها در زبانهای برنامه نویسی به ‪ 3‬دسته تقسیم می شوند ‪:‬‬

‫خطای نوشتاری‬ ‫‪Syntax Error )1‬‬

‫خطای زمان اجرا‬ ‫‪Runtime Error )2‬‬

‫خطای معنایی‬ ‫‪Semantic Error )3‬‬

‫خطای نوع سوم توسط ‪ Interpreter‬قابل تشخیص نیست و باید الگوریتم برنامه و روش حل مسئله چک شود‬

‫در هنگام اتفاق افتادن خطاهای ‪ Syntax‬و ‪ Runtime‬زبان ‪ Python‬یک عملیات ‪ raise Exception‬را اجرا می کند‬
‫و ادامه اجرای برنامه متوقف خواهد شد ‪.‬‬

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

‫) " متن دلخواه " (‪raise Exception‬‬

‫مدیریت خطا و استثنا‬


‫برای مدیریت خطاها در ‪ Python‬از بلوک ‪ try‬استفاده می کنیم ‪:‬‬

‫‪try:‬‬
‫‪Expr1‬‬
‫‪Expr2‬‬
‫‪...‬‬
‫‪except:‬‬
‫دستوراتی که در اثر‬

‫خطا اجرا خواهند شد‬

‫‪finally:‬‬
‫دستوراتی که در هر صورت اجرا خواهند شد‬
‫‪39‬‬
: ‫ مثال‬. ‫ نوع خطا را مشخص کنیم‬except ‫می توانیم در جلوی دستور‬

except(ValueError):
...
)CamelCase( ‫ خطاها به صورت ترکیبی از حروف کوچک و بزرگ‬. ‫برای این منظور باید خطاهای استاندارد را بدانیم‬
‫نوشته می شوند‬

)Built-in Exceptions( Python ‫خطاهای استاندارد‬


NameError KeyError
TypeError RuntimeError
SyntaxError ImportError
ValueError TabError
IndentError OSError
IndexError DeprecationWarning
AttributeError

: ‫مثال‬

try:
a=int(input('Enter a Number : '))
b=a**2
print(f ' Square of the Number is : {b} ')
except(ValueError, NameError, TypeError):
print( " Wrong Number " )

‫ اجرا‬except ‫ هیچ خطایی درج نشود با اتفاق افتادن هر خطایی کدهای زیر‬except ‫ در صورتی که جلوی‬: ‫* نکته‬
. ‫خواهند شد‬

40
. ‫ استفاده کنیم‬sys ‫ در ماژول‬exc_info() ‫ برای مشاهده کالس خطا و علت آن می توانیم از متد‬: ‫* نکته‬

: ‫مثال‬

import sys
a=[4,5,6,3,'b',9,8,'e']

for x in a:
try:
print(f 'The Square of x is {x**2}')
except:
print(sys.exc_info())

41
)User-Defined Exception( ‫ایجاد خطای سفارشی‬
. ‫ باشد‬Exception ‫برای ایجاد یک خطای دلخواه باید یک کالس ایجاد کنیم که مشتق کالس‬

‫در مثال زیر نحوه تعریف و استفاده از خطاهای سفارشی مشاهده می شود‬

: ‫مثال‬

class ValueIsSmall(Exception):
pass
class ValueIsLarge(Exception):
pass

while True:
try:
n=int(input('Enter a Numer : '))
if n<100 : raise ValueIsSmall
if n>100 : raise ValueIsLarge
print('You Guessed Correct')
break
except ValueIsSmall:
print('Value is Small')
except ValueIsLarge:
print('Value is Large')
except :
print('Wrong Number , Try Again . . . ')

42

You might also like