├── 1-1-What-is-Python.md ├── README.md ├── chapter-1 ├── 1-1-Hello-world.md ├── 1-2-variables.md ├── 1-3-numbers.md └── 1-4-strings.md └── codes └── 1-1-Hello-world.py /1-1-What-is-Python.md: -------------------------------------------------------------------------------- 1 | ### پایتون چیست؟ 2 | > پایتون یک زبان برنامه نویسی سطح بالا و شی گرا است که توسط Guido van Rossum توسعه یافته است. این یعنی پایتون بر اساس داده ها است و به راحتی توسط انسان قابل درک است 3 | 4 | ### چرا باید از پایتون استفاده کنیم؟ [^1] 5 | - برنامه نویسی سطح بالای انتزاع ارائه شده توسط پایتون به نفع همه برنامه نویسان است. این زبان بسیار تعاملی است و دارای یک نحو ساده است که باعث محبوبیت آن می شود. 6 | 7 | - هوش مصنوعی و یادگیری ماشین پایتون به دلیل ماهیت پایدار، انعطاف ‌پذیر و ساده‌ اش، به‌ طور گسترده در زمینه‌ های یادگیری ماشین و هوش مصنوعی استفاده می‌ شود. در واقع، با توجه به وجود ابزارهای هوش مصنوعی و ML، پایتون یکی از زبان‌های مورد استفاده متخصصان داده‌ و یادگیری ماشین است. 8 | 9 | - تجزیه و تحلیل داده ها و علم داده مانند هوش مصنوعی و ML، حوزه تحلیل داده و علم داده نیز شاهد استفاده گسترده از پایتون است. در حال حاضر یعنی زمانی که ما هر روز داده‌های بیشتری تولید می ‌کنیم، پلتفرم‌ های کارآمد مانند پایتون برای تجزیه و تحلیل، دستکاری و مدیریت داده‌ها تقاضای زیادی دارند. 10 | 11 | - توسعه وب و بازی زمینه های توسعه وب و توسعه بازی در استفاده از پایتون خیلی عقب نیستند. پایتون برای توسعه نمونه های اولیه بازی های سریع بسیار کارآمد است. چارچوب های وب مانند Django و Flask، نه گفتن به پایتون را در انجام فعالیت های مربوط به توسعه وب بسیار دشوار می کنند. 12 | 13 | - سازگاری با تمام سیستم عامل های اصلی پایتون از تمامی سیستم عامل های محبوب پشتیبانی می کند. همان کدها می توانند بدون کامپایل مجدد روی پلتفرم های مختلف اجرا شوند. 14 | 15 | -sysadmin ها کسانی که با هنر اسکریپت نویسی آشنا هستند، عمیقا پایتون را درک می کنند. پایتون تضمین می کند که فرآیند خودکارسازی وظایف خسته کننده یا خیلی پیچیده نیست. 16 | 17 | - انجمن پایتون پایتون جامعه کاربری بسیار بزرگی دارد . این به وضوح نشان می دهد که مهم نیست با چه مشکلی مواجه خواهید شد، در هر صورت می توانید با پشتیبانی انجمن پایتون راه حلی پیدا کنید. 18 | 19 | [^1]: به نقل از وبسایت سریع آسان. 20 | ### جدول کاربرد های پایتون و ماژول‌های آن برای آن (آپدیت میشود.) 21 | | فریم‌ورک | کاربرد | توضیحات | 22 | | ------ | ------ | ------ | 23 | | [Django](https://www.djangoproject.com/) | توسعه وب | توسعه آسان و سریع بک‌اند سایت. | 24 | | [Flask](https://flask.palletsprojects.com/) | توسعه وب | میکروفریم‌ورک ساده و سبک بک‌اند سایت. 25 | | [CherryPy](https://docs.cherrypy.dev/en/latest/index.html) | توسعه وب | یک فریم‌ورک مینیمال برای بک‌انپ سایت 26 | | [Pyramid](https://docs.pylonsproject.org/projects/pyramid/en/latest/index.html) | توسعه وب | فریم ورک برای بک‌اند بر پایه پروژه PyLons. | 27 | | [kivy](https://kivy.org/) | توسعه نرم‌افزار | توسعه نرم‌افزار برای اندروید، آی‌او‌اس و دسکتاپ. | 28 | | [KivyMD](https://kivymd.readthedocs.io/en/latest/) | توسعه نرم‌افزار | توسعه نرم‌افزار برای اندروید، آی‌او‌اس و دسکتاپ بر پایه Kivy. | 29 | | [PyQt5](https://www.riverbankcomputing.com/software/pyqt/intro) | توسعه نرم‌افزار | توسعه نرم‌افزار برای اندروید، آی‌او‌اس و دسکتاپ. | 30 | | [PySide5](https://www.pyside.org/docs/pyside-docs-en/latest/index.html) | توسعه نرم‌افزار | توسعه نرم‌افزار برای اندروید، آی‌او‌اس و دسکتاپ. | 31 | | [PyGame](https://www.pygame.org/) | بازی سازی | بازی سازی برای اندروید، آی‌او‌اس و دسکتاپ. | 32 | | [Tkiner](https://docs.python.org/3/library/tkinter.html) | محیط گرافیکی | محیط گرافیکی برای کد‌های پایتون. | 33 | | [NumPy](https://www.numpy.org/) | محیط ریاضی | محیط ریاضی و تخصصی نوشته شده در پایتون برای کار با احتمالات و جبرخطی و ماتریس ها و ...| 34 | | [Scipy](https://scipy.org/)| محیط ریاضی | محیط ریاضی تخصصی نوشته شده برای درونیابی، معادلات دیفرانسیل، انتگرال ها و ...| 35 | | [Pandas](https://pandas.pydata.org/) | کار با دیتا و داده | محیط تخصصی نوشته شده برای متخصصین داده و ...| 36 | | [Matplotlib](https://matplotlib.org/) | رسم نمودار | رسم نمودار برای کد‌های پایتون. | 37 | | [Scikit-learn](https://scikit-learn.org/) | هوش مصنوعی و علم داده | هوش مصنوعی و علم داده برای کار با داده‌های آموزشی. | 38 | | [Scikit-image](https://scikit-image.org/) | علم تصویر | علم تصویر برای کار با تصاویر. | 39 | | [OpenCV](https://opencv.org/) | علم تصویر | علم تصویر برای کار با تصاویر. | 40 | | [Pytorch](https://pytorch.org/) | ماشین لرنینگ| محیط تخصصی نوشته شده برای متخصصان یادگیری ماشین. | 41 | | [Tensorflow](https://www.tensorflow.org/) | ماشین لرنینگ| محیط تخصصی نوشته شده برای متخصصان یادگیری ماشین. | 42 | | [Keras](https://keras.io/) | ماشین لرنینگ| محیط تخصصی نوشته شده برای متخصصان یادگیری ماشین. | 43 | | [Quickda](https://analyticsindiamag.com/hands-on-tutorial-on-quickda-for-data-analysis-and-cleaning/#:~:text=QuickDA%20is%20an%20open%2Dsource,Data%20Visualisation%20using%20QuickDA) | محیط آماری | محیط آماری برای کار با داده‌ها و آماری. | 44 | | BlackBox | امنیت | تست نفوذ و امنیت با پایتون. 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Python 2 | پایتون یک زبان شی گرا و سطح بالا می‌باشد که... احتمالا این جمله رو زیاد شنیدید، تقریبا اول تمام دوره‌ها و آموزش‌ها، راستش اینجا قصد داریم از این زیاده‌روی‌ها به‌دور باشیم و مفاهیم زیبا و جذاب موجود در این زبان ساده و به شدت کاربردی رو به شکل عامیانه باهم بیاموزیم و اون‌ها رو مرور کنیم. 3 | پس با من، یعنی محمدرضا همراه باشید. ^^ 4 | 5 | فهرست مطالب: 6 | - ۰-۱: نصب پایتون و ادیتور (Installing python and editor) 7 | -------------------------------------------------------------------------- 8 | - ۱-۱: [هلو، ورد! (Hello, World!)](./chapter-1/1-1-Hello-world.md) 9 | - ۱-۲: [متغییرها (Variables)](./chapter-1/1-2-variables.md) 10 | - ۱-۳: [اعداد (Numbers)](./chapter-1/1-3-numbers.md) 11 | - ۱-۴: [رشته‌ها (Strings)](./chapter-1/1-4-strings.md) 12 | - ۱-۵: درست و نادرست (Boleans) 13 | - ۱-۴ عملگرها (operators) 14 | - ۱-۴: تغییر نوع متغییر (Data Casting) 15 | - ۱-۵: ورودی گرفتن (input) 16 | - ۱-۶: لیست‌ها (lists) 17 | - ۱-۷: تاپل‌ها و مجموعه‌ها (tuple and set) 18 | - ۱-۷: دیکشنری (Dictionry) 19 | - ۱-۸: ورودی‌ها (input) 20 | - ۱-۹: شرط (if-else-switch) 21 | - ۱-۱۰: حلقه‌ها (Loops) 22 | - ۱-۱۱: توابع (Functions) 23 | - ۱-۱۲: توابع بازگشتی (Recursive Functions) 24 | - ۱-۱۳: کار با فایل (Files) 25 | - ۱-۱۴: برطرف کردن خطاها (Error handling) 26 | - ۱-۱۴: شی گرایی (OOP) 27 | - ۱-۱۵: ارث‌بری (Inheritance) 28 | - ۱-۱۶: مپ، لامبدا و زیپ (Map, lamba, zip) 29 | - ۱-۱۷: ایتریتورها و جنریتورها (Itrators and Genrators) 30 | - ۱-۱۷: ماژول‌ها (Modules) 31 | - ۱-۱۹: نصب بسته (pip) 32 | - ۱-۲۰: کتاب‌خانه‌ها (libraries) 33 | - Math 34 | - os 35 | - random 36 | - time and datetime 37 | - pillow 38 | - Jupyter 39 | - requests 40 | - json 41 | - Asyncio 42 | - sqlite3 43 | - selenium 44 | - Numpy 45 | - Pandas 46 | - SymPy 47 | - quikda 48 | - Scikit-learn 49 | - OpenCV 50 | - Tensorflow 51 | - pytorch 52 | - keras 53 | - Socket 54 | - django 55 | - django-rest-framework 56 | - flask 57 | - cherrypy 58 | - pyramid 59 | - Tkinter 60 | - kivy 61 | - Kivmd 62 | - qtpy 63 | - pyside 64 | - pygame 65 | - beautiful soup 66 | - python-telegram-bot 67 | - Telebot 68 | - others. 69 | -------------------------------------------------------------------------------- /chapter-1/1-1-Hello-world.md: -------------------------------------------------------------------------------- 1 | ## فصل ۱ آموزک ۱: سلام دنیا! :hand: 2 | ``` python 3 | print('Hello, World!') 4 | ``` 5 | `>>> Hello, World!` 6 | 7 | `سلام، دنیا!‍` خب تبریک میگم. همین الان اولین خط کدتون به زبان پایتون رو نوشتید. 8 | همون‌طور که می‌بینید خیلی کار سختی نیست. یعنی انگار بیشتر دارید انگلیسی صبحت می‌کنید برای همین بیایید خیلی سختش نکنیم و از یادگرفتنش لذت ببریم. 9 | 10 | راستش هدف از بخش سلام کردن به دنیا نیست، شایدم باشه؛ ولی بیشتر میخواستیم با هم چاپ رشته‌ها و متن‌ها و نشون دادنشون در خروجی رو ببینیم. 11 | 12 | یکی از روش‌های این‌کار در زبان پایتون دستور `print` هست. 13 | 14 | در واقع به بیان ساده تر دستور `print` یک تابعی هست که یه مقدار ورودی رو می‌گیره و اون رو برای ما در خروجی چاپ می‌کنه. 15 | 16 | برای درک بهتر لطفا کد ادیتورتون رو باز کنید و یک فایل جدید پایتون بسازید و دستورات زیر رو داخلش اجرا کنید. 17 | 18 | مثلا می‌خواییم LinkinPark رو در خروجی نمایش بدیم. 19 | ``` python 20 | print('LinkinPark') 21 | ``` 22 | `>>> LinkinPark` 23 | 24 | یا برای نمایش salam man Mohammadreza amani hastam باید به شکل زیر عمل بشه: 25 | ``` python 26 | print('salam man Mohammadreza amani hastam') 27 | ``` 28 | `>>> salam man Mohammadreza amani hastam` 29 | 30 | این رو به‌خاطر داشته باشید که برای چاپ رشته‌ها و حرف‌ها باید اون ها در در میان یه جفت کوتیشن ` ' ` و یا یه جفت دابل کوتیشن ‍‍` " ` و یا در میان دو جفت ‍` ''' ` یا ` """ ` قرار بدید 31 | مثلا برای چاپ `Hi im Mohammadreza` به شکل‌های زیر میشه عمل کرد: 32 | - `print('Hi im Mohammadreza')` 33 | - `print("Hi im Mohammadreza")` 34 | - `print('''Hi im Mohammadreza''')` 35 | - `print("""Hi im Mohammadreza""")` 36 | 37 | `>>> Hi im Mohammadreza` 38 | 39 | ولی خب الان این سوال باید در ذهنتون شکل گرفته باشه که خب فرقشون چیه؟ و اصلا چرا باید این‌همه شکل وجود داشته باشه برای جاپ کردن. که باید بگم خیلی سوال درستی هست ولی خب دلیل زیبایی پشت این کار وجود داره. 40 | 41 | فرض کنید ما قصد داشتیم در بالا کمی گرامر زبان انگلیسی رو بیشتر رعایت می‌کردیم. یعنی به جای Hi im Mohammadreza می‌نوشتیم Hi, I'm Mohammadreza. 42 | در این صورت برای چاپش اگر فقط از مورد اول لیست بالا یعنی تک کوتیشن استفاده می‌کردیم به چنین اروری می‌خوردیم. 43 | 44 | `print('Hi, I'm Mohammadreza.')` 45 | 46 | 47 | ``` python 48 | >>> File "", line 1 49 | print('Hi, I'm Mohammadreza.') 50 | ^ 51 | SyntaxError: invalid syntax 52 | ``` 53 | در واقع اینجا ما یک کوتیشن هم در وسط متن استفاده کردیم و به شکل ناخواسته داریم به پایتون میگیم متن من اینجا تموم میشه در صورتی که قصدمون این نبوده 54 | و برای رفع این مشکل به زبان‌های مرسوم برنامه نویسی باید از یک بک‌اسلش ` \ ` در قبل از اون کوتیشینی که وسط جمله استفاده کردیم استفاده می‌کردیم یعنی مینوشتیم 55 | `print('Hi, I\'m Mohammadreza.')` 56 | تا پایتون از اون صرف نظر کنه و اون رو به شکل یک متن ببینه تا یکی از عوامل تاثیر گذار در سینتکسش. 57 | 58 | در صورتی که همین رو خیلی راحت میتونستیم به شکل 59 | ‍‍`print("Hi, I'm Mohammadreza.")` 60 | و بدون ارور بنویسیم و نیازی نباشه در این موارد خیلی وقتمون رو هدر بدیم و بیشتر به اصل موضوع بپردازیم تا این جزئیات. 61 | 62 | اما فرق استفاده از `"""` و `'''` با دو مورد قبلی کمی بیشتر هست. 63 | یکی دیگه از مواردی که کمی کار رو سخت‌ می‌کرد در برنامه نویسی رفتن به خط بعدی بود. 64 | یعنی شما اگر می‌خواستید متن 65 | 66 | ``` python 67 | Hi, I'm Mohammadreza. 68 | Have a nice day! 69 | ``` 70 | 71 | رو چاپ کنید باید به این شکل عمل می‌کردید 72 | 73 | `print('Hi, I'm Mohammadreza.\nHave a nice day!')‍` 74 | 75 | ``` python 76 | >>> Hi, I'm Mohammadreza. 77 | Have a nice day! 78 | ``` 79 | یعنی از عبارت `\n` 80 | در اونجایی که نیاز داشتید برید خط بعدی استفاده می‌کردید. 81 | 82 | 83 | ولی خب با استفاده از ‍`'''` و `"""` دیگه نیازی به رعایت این سینتکس ندارید و میتونید به هرچقدر خط پایین تر که نیاز دارید برید و جملتون رو کامل کنید و پایتون عین ورودیتون رو در خروجی نشون خواهد داد. 84 | ``` python 85 | print("""Hi, I'm Mohammadreza. 86 | Have a nice day!""")‍ 87 | ``` 88 | 89 | ``` python 90 | >>> Hi, I'm Mohammadreza. 91 | Have a nice day! 92 | ``` 93 | البته گفتن این نکته هم حائز اهمیت هست که برای چاپ اعداد نیازی به استفاده از کوتیشین ها نیست و میتونین اون‌ها رو به شکل مستقیم چاپ کنید. 94 | مثلا: 95 | 96 | ``` python 97 | print(1401) 98 | ``` 99 | 100 | `>>> 1401` 101 | 102 | البته خب دادن خروجی در پایتون تنها منحصر به `print` نیست و موارد موجود در `print` هم به موارد گفته شده به بالا محدود نمی‌شن و خیلی بیشتر هستند 103 | که اون ها رو مطلب منحصر به بحث `print` یبان خواهیم کرد. 104 | 105 | و در پایان هم یک تمرین کوچک اما سرگرم کننده رو داریم که امیدوارم بتونید انجامش بدید و از پسش بر بیایید. 106 | 107 | اون هم این هست که اسمتون رو با ستاره توسط پایتون چاپ کنید. 108 | 109 | مثلا برای من که این شکلی میشه: 110 | 111 | ``` python 112 | print("""* * *** * * *** * * * * *** **** **** ***** ***** *** 113 | ** ** * * * * * * ** ** ** ** * * * * * * * * * * 114 | * * * * * ***** ***** * * * * * * ***** * * **** ***** * ***** 115 | * * * * * * * * * * * * * * * * * * * * * * 116 | * * *** * * * * * * * * * * **** * * ***** ***** * *""") 117 | ``` 118 | 119 | ``` python 120 | >>> * * *** * * *** * * * * *** **** **** ***** ***** *** 121 | ** ** * * * * * * ** ** ** ** * * * * * * * * * * 122 | * * * * * ***** ***** * * * * * * ***** * * **** ***** * ***** 123 | * * * * * * * * * * * * * * * * * * * * * * 124 | * * *** * * * * * * * * * * **** * * ***** ***** * * 125 | ``` 126 | ----------------------------------------------------------------------------------------------------------------------------- 127 | 128 | نوشته شده با :heart: توسط [Mohammadreza Amani](https://github.com/MohammadrezaAmani) 129 | 130 | [قبلی](./1-1-Hello-world.md) | [بعدی](./1-2-variables.md) 131 | -------------------------------------------------------------------------------- /chapter-1/1-2-variables.md: -------------------------------------------------------------------------------- 1 | ### فصل ۱ آموزک ۲: متغییرها. :neckbeard: 2 | اگر زبان برنامه نویسی دیگه‌ای مثل جاوا، c، c++ و یا... کار کرده باشید احتمالا با دیتاتایپ‌های مختلفی مثل ‍`int`, `string` `float`و ... آشنا هستید. ولی اگر نیستید، 3 | خب مشکلی نداره چون درک مفاهیمشون خیلی دشواری خاصی رو نمی‌طلبه. 4 | 5 | به مثال زیر توجه کنید: 6 | 7 | ``` python 8 | a = 20 9 | ``` 10 | 11 | در اینجا به `a` یک متغییر گفته میشه و به `20` مقدار متغییر و مفهومش هم این هست که ما یه چیزی داریم به اسم `a` 12 | که مقدار `20` رو داخل خودش نگه می‌داره؛ در واقع به بیان ساده‌تر متغییرها به اسامیی گفته می‌شن که یه مقدار رو داخل خودشون نگه می‌دارن و اگر ما اسم اون متغییر رو 13 | صدا بزنیم مقدار اون رو بهمون می‌ده. 14 | مثلا اگر الان در زیر خط کد بالا بنویسیم `print(a)` مقدار `20` در خروجی برامون چاپ میشه. 15 | 16 | یا مثلا اگر از تمرین آخر جلسه قبل استفاده کنیم و بنویسیم : 17 | 18 | ‍ 19 | ``` python 20 | python = ''' 21 | **** * * ***** * * *** * * 22 | * * * * * * * * * ** * 23 | **** * * ***** * * * * * 24 | * * * * * * * * ** 25 | * * * * * *** * * 26 | ''' 27 | print(python) 28 | 29 | ``` 30 | ``` python 31 | >>> **** * * ***** * * *** * * 32 | * * * * * * * * * ** * 33 | **** * * ***** * * * * * 34 | * * * * * * * * ** 35 | * * * * * *** * * 36 | ``` 37 | 38 | بعدها که عملیات‌ها و موارد بیشتر رو در پایتون باهم یادگرفتیم متوجه کاربردهای خیلی زیاد متغییرها در موارد فنی می‌شید ولی خب یکی از قشنگی‌های استفاده از متغییر ها 39 | خواناتر کردن کد هست. یعنی ما بجای این که نیاز باشه یه متن خیلی طویل رو در هربار در کدمون استفاده کنیم، اون رو داخل یه متغییر می‌ریزیم و از این به بعد هربار نیاز به 40 | استفاده از اون متن عدد و یا هرچیز دیگری بود، صرفا نامش رو استفاده می‌کنیم و همین! 41 | 42 | متغییر ها در پایتون همین ها هستند ولی اگر زبان برنامه‌نویسی دیگه‌ای کار کرده باشید احتمالا در اونجا قبل از تعریف متغییر باید نوعش رو هم مشخص می‌کردید. 43 | از قشنگی‌های پایتون که باعث راحت تر شدن کارمون میشه همین هست که نیازی نیست تایپ متغییر رو تعریف کنید و مفسر پایتون اون رو به شکل خودکار شناسایی می‌کنه. 44 | ولی به طور کلی ما چند مورد دیتا تایپ ( نوع متغییر، مثلا متن هست یا عدد هست یا ...) رو در پایتون داریم که لیستش به شرح زیر هست: 45 | 46 | 47 | |دیتا تایپ | توضیحات| 48 | |--------|---------| 49 | |رشته‌ها (متن‌ها) | str | 50 | |اعداد صحیح | int | 51 | | اعداد گویا | float | 52 | | اعداد حقیقی | complex | 53 | | لیست‌ها | list | 54 | | تاپل | tuple | 55 | | رنج | range | 56 | | مجموعه | set | 57 | |مجموعه غیرقابل تغییر | frozenset | 58 | |دیکشنری | dict | 59 | | بولین | bolean | 60 | | بایت | bytes | 61 | | بایت‌اری :| bytearray | 62 | | مموری‌ویو | memoryview | 63 | | تهی | None | 64 | | هرچیزی شما تعریف کنید. | هر اسمی که شما روش بذارید. | 65 | 66 | اما مطالبی که تا اینجا خوندیم در مورد توضیحات متغییرها بود. 67 | 68 | ولی برای تعریف یک متغییر به شکل عملی در زبان پایتون بهتره چند تا نکته رو به خاطر داشته باشید. 69 | 70 | - ۱: نام متغییرتون با عدد شروع نشه. 71 | - ۲: نام متغییرتون شامل حروف انگلیسی کوچک و بزرگ و اعداد و همینطور اندراسکور‍ `_` و این رو به خاطر داشته باشید که پایتون کیس سنستیو هست یعنی foo با Foo برابر نیست. 72 | - از اسامی از پیش رزرو شده در پایتون استفاده نشه. لیست کاملش رو می‌تونید اینجا ببینید: 73 | 74 | | False | def | if | raise | 75 | |-------|-----|----|-------| 76 | | None | del | import | return | 77 | | True | elif | in | try | 78 | | and | else | is | while | 79 | | as | except | lambda | with| 80 | | assert | finally | nonlocal | yield | 81 | | break | for | not | | 82 | | class | from | or | | 83 | | continue | global | pass| 84 | 85 | و اگر محتوای لیست یادتون رفت می‌تونید با وارد کردن دستور ‍`help("keywords")` اون رو ببینید. 86 | 87 | چند نکته کاربردی : 88 | - ۱: در پایتون علاوه بر این که میشه متغییرها رو خط به خط مقداردهی کرد میشه همه این کار رو در یک خط کرد. یعنی مثلا 89 | - 90 | ```number1,number2,number3 = 2,4,8``` 91 | 92 | این یعنی 93 | 94 | ``` python 95 | number1 = 2 96 | number2 = 4 97 | number3 = 8 98 | ``` 99 | - ۲: اگر بخواهیم متغییر های زیادی رو با مقدار یکسان تعریف کنیم می‌تونیم از روش زیر استفاده کنیم. 100 | 101 | 102 | ``` python 103 | number1 = number2 = number3 = 100 104 | ``` 105 | 106 | و این یعنی 107 | 108 | ``` python 109 | number1 = 100 110 | number2 = 100 111 | number3 = 100 112 | ``` 113 | 114 | 115 | در ادامه بحث یه سری موارد هم هست که دونستنشون خالی از لطف نیست. 116 | 117 | ### type 118 | 119 | این تابع نوشته شده در پایتون زمانی کاربرد داره که بخواهییم نوع یک متغییر رو تشخیص بدیم. یعنی برفرض مثال در کدی متغییری وجود داشت که نمی‌دونستیم کجا تعریف شده و 120 | الان از چه نوع داده هست. برای این کار اون رو به تابع type می‌دیم تا دیتا تایپش رو بهمون برگردونه. 121 | 122 | مثلا برای متغییر `python` که در اول کار تعریف کردیم به شکل زیر عمل می‌کنیم: 123 | 124 | ``` python 125 | print(type(python)) 126 | ``` 127 | ``` python 128 | >>> 129 | ``` 130 | 131 | ### id 132 | 133 | ببینید برای تعریف یک متغییر ما می‌تونیم از متغییر های دیگه هم استفاده کنیم. 134 | 135 | یعنی اگر بنویسیم `python3 = python` و در اینجا هر چیزی که در متغییر `python` وجود داشته باشه در `python3` هم وجود خواهد داشت. 136 | 137 | خب بریم سر وقت توضیح تایع id: 138 | 139 | به طور کلی هر متغییر یک شناسه‌ای رو با خودش داره که با دستور `id` می‌تونیم به اون دست پیدا کنیم. مثلا اگر بنویسیم `print(id(python3))‍` اونوقت در خروجی عددی به ما 140 | نمایش داده خواهد شد که شناسه این هست. مثلا `140425230327600`. 141 | حالا چرا این مهم هست؟ همونطور که گفتم مثلا اگر الان ما این تابع رو برای متغییر `python3` هم فرا بخونیم باز هم مقدار ‍`140425230327600` برامون در خروجی چاپ خواهد شد. 142 | ولی اگر متغییر دیگری با مقدار مساوی متغییر `python` بسازیم مقدار متفاوتی برامون برگردونده خواهد شد. 143 | این نوع مقایسه رو در آینده اگر عمری باقی بود بیشتر بحث میکنیم ولی اجالتا این آموزک هم تمام هست و موفق باشید. 144 | 145 | 146 | ------------------------------------------------------------------------- 147 | 148 | نوشته شده با :heart: توسط [Mohammadreza Amani](https://github.com/MohammadrezaAmani) 149 | 150 | [قبلی](./1-1-Hello-world.md) | [بعدی](./1-3-numbers.md) 151 | -------------------------------------------------------------------------------- /chapter-1/1-3-numbers.md: -------------------------------------------------------------------------------- 1 | ### فصل ۱ آموزک ۳: اعداد :100: 2 | 3 | خب به بحث دیتا تایپ ها خوش اومدید. 4 | 5 | همون‌طور که در آموزک قبلی گفتم در پایتون انواع مختلفی از داده‌ها وجود داره و در اینجا قصد داریم اولین اون‌ها یعنی اعداد رو بررسی کنیم. 6 | 7 | به طور کلی اعداد شامل لیست زیر می‌شن که با زدن روی هرکدوم از اون ها به بخش مربوطش برید. 8 | | اعداد صحیح | int | 9 | |-----|-----| 10 | |اعداد گویا | float | 11 | | اعداد حقیقی | complex | 12 | 13 | ### اعداد صحیح | int 14 | 15 | فکر نمی‌کنم نیاز به توضیح زیادی راجع به اعداد صحیح باشه ولی به طور کلی به این نوع داده در زبان پایتون `int` که مخفف ‍`integer‍‍` هست گفته میشه. 16 | 17 | برای تعریف کردن متغییرها با نوع داده `int` تنها کافی هست تا نام متغییر رو بنویسید و بعد از علامت مساوی عدد صحیحی رو جلوش قرار بدید؛ مثلا: 18 | 19 | ``` python 20 | a = 1380 21 | ``` 22 | 23 | 24 | و به همین راحتی شما یک متغییر از جنس `int` ساختید. 25 | 26 | ### اعداد گویا | float 27 | 28 | یکی از فرق های اعداد گویا و اعداد صحیح در داشتن مقدار اعشار هست بر فرض مثال عدد `2` عدد صحیح محسوب میشه ولی عدد `2.0` عدد اعشاری. 29 | 30 | در پایتون برای تعریف اعداد اعشاری هم مثل اعداد صحیح عمل می‌کنیم یعنی صرفا: 31 | 32 | ``` python 33 | number = 2.4 34 | ``` 35 | 36 | البته نوع دیگری از نگارش اعداد گویا هم وجود داره که به روش علمی یعنی استفاده از توان‌های ده هست. 37 | 38 | در این نوع نگارش عدد رو نوشته و بعد جلوش از `e` استفاده میشه و بعد از اون مقدار توان ده اون نوشته میشه. مثلا: 39 | 40 | ``` python 41 | number = 2e-5 42 | ``` 43 | 44 | این عدد با عدد 45 | `0.00002` برابر هست. 46 | 47 | ### اعداد حقیقی | complex 48 | 49 | برای تعریف اعداد حقیقی به شکل زیر عمل می‌کنیم. 50 | 51 | ``` python 52 | number = complex(2,4) 53 | ``` 54 | 55 | یعنی بعد از نوشتن نام متغییر و علامت `=` از تابع ‍`complex` استفاده می‌کنیم و بعد اون به عنوان ورودی اول مقدار real عدد رو وارد می‌کنیم و بعد از کاما ‍`,` 56 | مقدار imag رو. 57 | حالا اگر مقدار `number` رو چاپش کنیم عبارت ‍`(2+4j)` برامون چاپ خواهد شد. 58 | 59 | برای دسترسی به مقدار real تنها کافیه بعد از نام متغییر بدون فاصله یک نقطه قرار بدیم و بعد از اون real رو بنویسیم. 60 | مثلا 61 | 62 | ``` python 63 | adad = complex(2,4) 64 | print(adad.real) 65 | ``` 66 | ``` python 67 | >>> 2.0 68 | ``` 69 | و برای دسترسی به مقدار imag هم بعد از نقطه `imag` رو قرار میدیم. مثلا: 70 | 71 | ``` python 72 | print(adad.imag) 73 | ``` 74 | 75 | ``` python 76 | >>> 4.0 77 | ``` 78 | 79 | ### نعییر نوع داده‌ها | type casting 80 | 81 | این مبحث در آینده بعد از یادگرفتن داده‌های بیشتر، گسترشش می‌دیم و بیشتر راجع بهش بحث میکنیم ولی خب در زمینه اعداد: 82 | 83 | گاهی لازمه عدد اعشاری رو به عدد صحیح تبدیل کنیم و یا بلعکس. برای این کار و کلا هرنوع دیتا کستی اول نوع متغییر رو نوشته و بعد داخل پرانتز متغییری که میخواییم 84 | تبدیل بشه رو وارد می‌کنیم. به مثال‌های زیر توجه کنید: 85 | 86 | ``` python 87 | number1 = 2 88 | number2 = float(number1) 89 | print(number2) 90 | print(type(number2)) 91 | ``` 92 | 93 | ### عملیات‌ها 94 | 95 | در پایتون برای اعداد عملیات‌هایی مثل جمع‌، تفریق، ضرب، تقسیم، توان، رادیکال، باقی مانده و... موجود هست که نام و نمادشون رو در لیست زیر می‌تونید پیدا کنید: 96 | 97 | | نام | نماد | توضیح | مثال | خروجی | 98 | |----|----|----|----|----| 99 | | جمع | + | برای جمع کردن دو عدد | 2 + 2| 4 | 100 | | تفریق | - | برای تفریق دو عدد | 3 - 1 | 2 | 101 | | ضرب | \* |برای ضرب دو عدد | -2\*3 | -6 | 102 | | تقسیم | /|برای تقسیم دو عدد | 3/ 3 | 1 | 103 | | توان | \*\* | برای رساندن عدد به توان مشخص | 2\*\*10 | 1024 | 104 | | باقی مانده | % | برای یافتن باقی مانده یک عدد به یک عدد دیگر | 7 % 4 | 3 | 105 | | تقسیم صحیح | // | برای به دست آوردن تقسیم صحیح عدد به عددی دیگر | 13 // 4 | 3 | 106 | 107 | البته نوع دیگری از این عملیات‌ها هم وجود دارند که شکل خلاصه‌ی موارد بالا هستند. 108 | 109 | فرض کنید متغییر ` a = 2 ` رو داریم. حالا بخواهیم مقدارش رو با 5 جمع کنیم. با توجه به چیزهایی که تا الان بلدیم باید به روش زیر عمل کنیم. 110 | 111 | ``` python 112 | a = 2 113 | a = a + 5 114 | ``` 115 | یعنی اومدیم متغییر a رو با عدد 5 جمع کردیم و بعد متغییر جدیدی با نام a تعریف کردیم و بعد مقدارش رو برابر با حاصل جمعمون گذاشتیم. 116 | 117 | این رو به خاطر داشته باشید که در پایتون ابتدا موارد جلو `=` تفسیر می‌شن و بعد از اون موارد قبلش. چون پایتون باید اول بدونه چه مقداری رو و چون نوع مقداری رو 118 | باید در یک متغییر ذخیره کنه و بعد داده متناسب با همون رو بسازه. 119 | 120 | و اما روش آسان‌تر چی هست؟ 121 | به مثال زیر توجه کنید. 122 | 123 | ``` python 124 | a += 5 125 | ``` 126 | یعنی مقدار متغییر `a` که در بالاتر تعریف کرده بودیم رو هرچقدر که بود با 5 جمعش کن و یه جورایی کارمون رو راحت تر کن. 127 | 128 | این کار رو میشه برای باقی عملیات‌ها هم انجام داد. به جدول زیر دقت کنید: 129 | 130 | | نماد | خلاصه | 131 | |----|-----| 132 | | + | += | 133 | | - | -= | 134 | | \* | \*= | 135 | | / | /= | 136 | | \*\* | \*\*= | 137 | | % | %= | 138 | | // | //= | 139 | 140 | دقت کنید که در این روش بین عملیات و `=` نباید فاصله باشه وگرنه به ارور برخواهید خورد. 141 | 142 | 143 | ### توابع داخلی اعداد 144 | 145 | برای اعداد در پایتون توابع داخلیی نوشته شده‌اند که کار ما رو در حل مسائلمون راحت تر می‌کنند. 146 | 147 | البته با استفاده از کتابخانه ‍`math` و `numpy` و `scympy` و ... خیلی دقیق‌تر و پیشرفته‌تر می‌شه مسائل رو حل کرد ولی خب لیست توابع 148 | موجود در پایتون برای این کار این‌هاست: 149 | 150 | | نام تابع | کاربرد | مثال | خروجی | 151 | |-----|----|----|-----| 152 | | round() | برای رند کردن اعداد به تعداد اعشار دلخواه | (round(5.0932, 2) | 5.093 | 153 | | abs() | گرفتن قدر مطلق | abs(-15) | 15 | 154 | | pow() | به توان رساندن | pow(2,9) | 512 | 155 | | int() | تبدیل به عدد صحیح | int(127.98) | 127 | 156 | | float() | تبدیل به عدد اعشاری | float(13) | 13.0 | 157 | | complex() | تبدیل به عدد موهومی | complex(2, 6) | (2+6j) | 158 | 159 | خب این آموزک هم به پایان رسید. پیشنهاد می‌کنم برای تمرین رند کردن اعداد منفی اعشاری و همینطور به رادیکال گرفتن با استفاده از توان کمی فکر کنید. ( راهنمایی 160 | : مثلا وقتی میخواییم از یه عدد با فرجه 2 رادیکال بگیریم در واقع داریم اون رو به توان 1/2 می‌رسونیم. 161 | 162 | 163 | 164 | ----------------------------------------------------------------------------------------------------------------------------- 165 | نوشته شده با :heart: توسط [Mohammadreza Amani](https://github.com/MohammadrezaAmani) 166 | 167 | [قبلی](./1-2-variables.md) | [بعدی]() 168 | 169 | -------------------------------------------------------------------------------- /chapter-1/1-4-strings.md: -------------------------------------------------------------------------------- 1 | ### فصل ۱ آموزک ۴: رشته‌ها :memo: 2 | 3 | در دنیای برنامه‌نویسی ‍`رشته` یا `string` به دنباله‌ای از کاراکترها گفته میشه که تو اصطلاح عامیانه ما بهش میگیم متن یا تکست. 4 | 5 | برای تعریف متغییر از جنس `string` تنها کافی هست بعد از نوشتن نام متغییر و علامت مساوی `=` رشته مورد نظرتون رو میان دو کوتیشن ‍`'` و یا دابل کوتیشن `"` و 6 | یا `'''` یا `"""` بذارید. 7 | 8 | فرق میون این‌ها رو می‌تونید رو [آموزک تعریف متغییر](./1-2-variables.md) ببینید. 9 | 10 | مثلا: 11 | 12 | ``` python 13 | string1 = 'ba deghat bekhonin darsatono!' 14 | string2 = "نمی‌دونم چی باید بنویسم." 15 | string3 = ''' 16 | salam khobi? 17 | ''' 18 | string4 = """ 19 | e alie! aliiii! 20 | """ 21 | ``` 22 | 23 | ### عملیات‌ها بین رشته‌ها 24 | 25 | برای ساخت رشته‌ها روش‌های دیگه‌ای هم وجود داره که به شرح زیرن: 26 | 27 | #### استفاده از عملات جمع `+` 28 | ``` python 29 | text1 = 'salam man ' 30 | text2 = text1 + 'Mohammadreza Amani hastam.' 31 | print(text2) 32 | ``` 33 | ``` python 34 | >>> salam man Mohammadreza Amani hastam. 35 | ``` 36 | #### استفاده از علامت ضرب `*` 37 | 38 | ``` python 39 | text = 'hi ' * 5 40 | print(text) 41 | ``` 42 | ``` 43 | >>> hi hi hi hi hi 44 | ``` 45 | 46 | #### استفاده از تابع درونی `str()` 47 | 48 | تابع `str()` یکی از توابع درونی پایتون برای تبدیل هر شی به رشته هست. 49 | 50 | برای کار با اون تنها کافی هست تا متغییرتون رو به عنوان ورودی به تابع بدید و اون مقدار رشته شده‌ی اون رو بر میگردونه. مثلا: 51 | 52 | ``` python 53 | myAge = 22 54 | text = 'I have ' + str(myAge) + ' years old.' 55 | print(text) 56 | ``` 57 | ``` python 58 | >>> I have 22 years old. 59 | ``` 60 | #### استفاده از `f string` 61 | 62 | این یکی شاید خیلی ملموس نباشه ولی خب وقتی میخواییم از یک متغییر در دل یک رشته استفاده کنیم می‌تونیم از متدی استفاده کنیم به اسم `f'string'` اول یه نگاهی به 63 | کد زیر بندازید: 64 | ``` python 65 | name = 'Mohammadreza Amani` 66 | age = 22 67 | info = f'Mr.{name} has {age} years old.' 68 | print(info) 69 | ``` 70 | ``` python 71 | >>> Mr. Mohammadreza Amani has 22 years old. 72 | ``` 73 | 74 | در واقع در روش بالا اومدیم قبل از کوتیشن اول یک ‍`f` که مخفف `format` هست رو قرار دادیم و بعد متغییرهای خودمون و یا هر کد پایتونی که نیاز داریم رو در بین دو 75 | کروشه می‌نویسیم و بعد ادامه متنمون. از این روش میشه برای تبدیل دیتا تایپ های دیگه به استرینگ هم استفاده کرد. 76 | 77 | کد بالا معادل کد زیر هست: 78 | 79 | ``` python 80 | name = 'Mohammadreza Amani' 81 | age = 22 82 | info = 'Mr. ' + name + ' has ' + str(age) + ' years old.' 83 | print(info) 84 | ``` 85 | ``` python 86 | >>> Mr. Mohammadreza Amani has 22 years old. 87 | ``` 88 | #### استفاده از format 89 | 90 | روش دیگه ای که شبیه به روش `f'string'` هست اما کمی قدیمی تر روش `format` هست. در این روش به شکل زیر عمل میکنیم. 91 | 92 | ``` python 93 | name = 'Mohammadreza Amani' 94 | age = 22 95 | info = 'Mr. {} has {} years old.'.format(name, age) 96 | print(info) 97 | ``` 98 | ``` python 99 | >>> Mr. Mohammadreza Amani has 22 years old. 100 | ``` 101 | 102 | در این روش بعد از استرینگ یا حتی متغییری با جنس استرینگ علامت `.foramt` رو قرار داده و بعد به عنوان ورودی به ترتیب متغییرهایی که نیاز داریم رو وارد کنیم. 103 | البته این رو هم بگم که میشه ترتیب رو تغییر داد یعنی با قرار دادن اعدادی که از 0 شروع میشن تا تعداد ورودی‌ها منهای یک به ترتیب مکان اون‌ها رو مشخص کرد. 104 | 105 | البته حس می‌کنم یه مقداری بد گفتم، به مثال زیر توجه کنید: 106 | 107 | ``` python 108 | name = 'Mohammadreza Amani' 109 | age = 22 110 | info = 'Mr. {1} has {0} years old.'.format(name, age) 111 | print(info) 112 | ``` 113 | ``` python 114 | >>> Mr. 22 has Mohammadreza Amani years old. 115 | ``` 116 | 117 | در واقع با دادن عدد یک به درون پرانتز اول گفتیم می‌خواییم دومین آرگومان ورودی تابع `format` برای تو باشه و با دادن عدد 0 به پرانتز دوم گفتیم میخواییم 118 | اولین ورودی تابع برای تو باشه. (این رو به خاطر داشته باشید که در پایتون اعداد از 0 شروع می‌شن.) 119 | 120 | #### استفاده از علامت `%` 121 | 122 | این روش که نسبت به روش‌های قبلی کم‌تر دیده شده ولی قدیمی‌تر و راحت‌تر هست به این صورته که بجای پرانتز و استفاده از تابع فرمت از % و نوع ورودی استفاده می‌کنیم. 123 | به مثال زیر دقت کنید. 124 | ``` python 125 | name = 'Mohammadreza Amani' 126 | age = 22 127 | info = 'Mr. %s has %d years old.'%(name, age) 128 | print(info) 129 | ``` 130 | ``` python 131 | Mr. Mohammadreza Amani has 22 years old. 132 | ``` 133 | 134 | برای استفاده از % باید بعد از اون کارکاتر `s` و یا `d` و یا `f‍‍` رو قرار داد. که ‍`%s` برای متن، `%d` برای اعداد صحیح و `%f` برای اعداد اعشاری هست. 135 | 136 | نکته دیگه‌ای که وجود داره برای نشان دادن تعداد مشخصی از اعداد بعد از ممیز در اعداد اعشاری به شکل زیر عمل می‌کنیم: 137 | ``` python 138 | pi = 3.141592653589793 139 | info = "pi is %.2f" % pi 140 | print(info) 141 | ``` 142 | ``` python 143 | >>> pi is 3.14 144 | ``` 145 | 146 | ### متودهای رشته‌ها | string methods 147 | 148 | در پایتون برای رشته‌ها متود‌هایی وجود داره که به شرح زیر هستند: 149 | 150 | ! باید ادیت بشه! 151 | 152 | دقت داشته باشید که در مثال‌ها: 153 | | نام | مقدار | 154 | |----|-----| 155 | | text1 | 'hi im moh\tammdreza' | 156 | | text2 | 'mohammadreza' | 157 | | text3 | 'MohaMMadreza | 158 | | text4 | 'Moh{}ammadreza' | 159 | 160 | | متود | توضیحات | مثال | خروجی | 161 | |-----|-----|-----|-----| 162 | | capitalize() | تبدیل کردن نخستین کاراکتر رشته به حرف بزرگ | text2.capitalize() | Mohammadreza | 163 | | casefold() | تبدیل کردن کل کاراکترهای رشته به حروف کوچک | text3.casefold() | mohammadreza | 164 | | center(width, char) | قرار دادن متن میان `width` تعداد از کاراکتر `char` | text2.center(50, '&') | &&&&&&&&&&&&&&&&&&&mohammadreza&&&&&&&&&&&&&&&&&&& | 165 | | count(word) | شمارش تعداد بارهای تکرار کلمه ‍`word` در متن و برگرداندن آن | text2.count('m') | 3| 166 | | encode()| انکورد کردن متن | text2.encode('utf-8') | b'mohammadreza' | 167 | | endswith(word) | اگر رشته با عبارت `word` تمام شده باشد مقدار `True` را بر می‌گرداند در غیر این صورت `False` | text2.endwith('reza') | True | 168 | | expandtabs(int) | تعیین مقدار `tab` در استرینگ | text1.expandtabs(10) | hi im moh ammadreza | 169 | | find(word) | جست و جو برای یک مقدار مشخص و برگرداندن ایندکس آن | text2.find('ad') | 6 | 170 | | format() | فورمت کردن متن | text4.format('hi') | Mohhiammadreza 171 | | format_map() Formats specified values in a string 172 | | index() Searches the string for a specified value and returns the position of where it was found 173 | | isalnum() Returns True if all characters in the string are alphanumeric 174 | | isalpha() Returns True if all characters in the string are in the alphabet 175 | | isascii() Returns True if all characters in the string are ascii characters 176 | | isdecimal() Returns True if all characters in the string are decimals 177 | | isdigit() Returns True if all characters in the string are digits 178 | | isidentifier() Returns True if the string is an identifier 179 | | islower() Returns True if all characters in the string are lower case 180 | | isnumeric() Returns True if all characters in the string are numeric 181 | | isprintable() Returns True if all characters in the string are printable 182 | | isspace() Returns True if all characters in the string are whitespaces 183 | | istitle() Returns True if the string follows the rules of a title 184 | | isupper() Returns True if all characters in the string are upper case 185 | | join() Converts the elements of an iterable into a string 186 | | ljust() Returns a left justified version of the string 187 | | lower() Converts a string into lower case 188 | | lstrip() Returns a left trim version of the string 189 | | maketrans() Returns a translation table to be used in translations 190 | | partition() Returns a tuple where the string is parted into three parts 191 | | replace() Returns a string where a specified value is replaced with a specified value 192 | | rfind() Searches the string for a specified value and returns the last position of where it was found 193 | | rindex() Searches the string for a specified value and returns the last position of where it was found 194 | | rjust() Returns a right justified version of the string 195 | | rpartition() Returns a tuple where the string is parted into three parts 196 | | rsplit() Splits the string at the specified separator, and returns a list 197 | | rstrip() Returns a right trim version of the string 198 | | split() Splits the string at the specified separator, and returns a list 199 | | splitlines() Splits the string at line breaks and returns a list 200 | | startswith() Returns true if the string starts with the specified value 201 | | strip() Returns a trimmed version of the string 202 | | swapcase() Swaps cases, lower case becomes upper case and vice versa 203 | | title() Converts the first character of each word to upper case 204 | | translate() Returns a translated string 205 | | upper() Converts a string into upper case 206 | | zfill() Fills the string with a specified number of 0 values at the beginning 207 | -------------------------------------------------------------------------------- /codes/1-1-Hello-world.py: -------------------------------------------------------------------------------- 1 | print('Hello,world!') 2 | 3 | #----------------------------------------------------------- 4 | 5 | print('LinkinPark') 6 | 7 | #----------------------------------------------------------- 8 | 9 | print('salam man Mohammadreza amani hastam') 10 | 11 | #----------------------------------------------------------- 12 | 13 | print("""Hi, I'm Mohammadreza. 14 | Have a nice day!""")‍ 15 | 16 | #----------------------------------------------------------- 17 | 18 | print("""* * *** * * *** * * * * *** **** **** ***** ***** *** 19 | ** ** * * * * * * ** ** ** ** * * * * * * * * * * 20 | * * * * * ***** ***** * * * * * * ***** * * **** ***** * ***** 21 | * * * * * * * * * * * * * * * * * * * * * * 22 | * * *** * * * * * * * * * * **** * * ***** ***** * *""") 23 | 24 | # with ❤️ by Mohammadreza Amani - https://www.github.com/MohammadrezaAmani 25 | --------------------------------------------------------------------------------