├── .github └── FUNDING.yml ├── .gitignore ├── .readthedocs.yaml ├── Dockerfile ├── Makefile ├── README.md ├── make.bat ├── requirements.txt └── source ├── _static ├── PayPal-QR.png ├── cryptocurrency │ ├── saeiddrv-btc.jpg │ ├── saeiddrv-doge.jpg │ ├── saeiddrv-eth.jpg │ └── saeiddrv-ltc.jpg ├── lessons │ ├── l02-add-path-on-windows.png │ ├── l02-install-python-on-windows.png │ ├── l03-interpreter.png │ ├── l05-Inheritance-Hierarchy-Sample.png │ ├── l05-car-class-object-sample.jpg │ ├── l05-car-class-sample.jpg │ ├── l05-has-a-Sample.png │ ├── l06-c-variable.png │ ├── l06-python-Indentation-block.png │ ├── l06-python-variable-01.png │ ├── l08-python-list-assignment-01.png │ ├── l08-python-list-assignment-02.png │ ├── l12-nested-namespaces-python.jpg │ ├── l12-python-passing-arguments-01.png │ ├── l12-python-passing-arguments-02.png │ ├── l14-factorial-relation.png │ ├── l14-fibonacci-relation.png │ ├── l18-python-mro-diamond.png │ ├── l18-python-mro-example.png │ ├── l18-python-oop-inheritance.jpg │ ├── l19-python-metaclass-type.jpg │ ├── l23-python-exception-hierarchy.png │ ├── l24-python-assertion-flowchart.png │ └── l24-python-exception-hierarchy-warnings.png ├── logo │ ├── python-3-11.png │ ├── python-logo.png │ └── real-python-logo.svg ├── pages │ ├── 00-support.jpg │ ├── 01-python-introduction.jpg │ ├── 02-python-setup.jpg │ ├── 03-python-project-structure.jpg │ ├── 04-python-interactive-mode.jpg │ ├── 05-python-object-oriented-programming-concept.jpg │ ├── 06-python-syntax.jpg │ ├── 07-python-built-in-data-types-0.jpg │ ├── 07-python-built-in-data-types-1.jpg │ ├── 08-python-built-in-data-types-2.jpg │ ├── 08-python-built-in-data-types-3.jpg │ ├── 09-python-if-else-for-while.jpg │ ├── 10-python-input-output-file.jpg │ ├── 11-python-os-path-math.jpg │ ├── 12-python-function.jpg │ ├── 13-python-function-decorator-generator-coroutine-lambda.jpg │ ├── 14-python-function-recursive-memoization.jpg │ ├── 15-python-regex-1.jpg │ ├── 16-python-regex-re.jpg │ ├── 17-python-object-oriented-programming-class-object.jpg │ ├── 18-python-object-oriented-programming-inheritance-mro-mixin.jpg │ ├── 19-python-object-oriented-programming-abstraction-metaclass.jpg │ ├── 20-python-object-oriented-programming-polymorphism-encapsulation.jpg │ ├── 21-python-object-oriented-programming-property-descriptors.jpg │ ├── 22-python-object-oriented-programming-type-hinting-data-class.jpg │ ├── 23-python-exception-error-warning-try.jpg │ ├── 24-python-raise-exception-warning-assertion.jpg │ └── 25-python-date-time-calendar.jpg ├── practice │ ├── PascalTriangleAnimated2.gif │ └── students.csv ├── python-in-persian-book-cover.png ├── robots.txt └── sitemap-index.xml ├── _templates └── sphinx_minoo_theme │ ├── __init__.py │ ├── genindex.html │ ├── glossary.html │ ├── includes │ ├── bottom.html │ ├── header.html │ ├── sidebar.html │ ├── top.html │ └── versions.html │ ├── layout.html │ ├── page.html │ ├── search.html │ ├── static │ ├── avatar.jpg │ ├── bootstrap.min.css │ ├── bootstrap.min.js │ ├── by-nc-80x15.png │ ├── favicon.ico │ ├── font-awesome.min.css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── Inconsolata-Bold.ttf │ │ ├── Inconsolata.ttf │ │ ├── Lato-Bold.ttf │ │ ├── Lato-Regular.ttf │ │ ├── RobotoSlab-Bold.ttf │ │ ├── RobotoSlab-Regular.ttf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ ├── fontawesome-webfont.woff2 │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── jquery.js │ ├── minoo-20230505.js │ ├── minoo-20240224.css │ ├── minoo-dark.css │ ├── minoo-ltr.css │ ├── modernizr.min.js │ ├── pygment-solarized-light.css │ └── python-in-persian-book-cover-mini.png │ └── theme.conf ├── challenges └── python-code-challenges-basic.rst ├── changelog.rst ├── conf.py ├── index.rst ├── lessons ├── l01-introduction-to-python.rst ├── l02-setup-python.rst ├── l03-create-and-run-a-python-project.rst ├── l04-python-interactive-mode.rst ├── l05-object-oriented-programming.rst ├── l06-python-syntax.rst ├── l07-numeric-types-in-python.rst ├── l07-string-and-bytes-in-python.rst ├── l08-list-and-tuple-in-python.rst ├── l08-set-and-dict-in-python.rst ├── l09-control-flow-statements-in-python.rst ├── l10-input-print-and-files-in-python.rst ├── l11-python-standard-library.rst ├── l12-function-in-python.rst ├── l13-decorator-generator-and-lambda-with-python-functions.rst ├── l14-recursive-functions-and-memoization-in-python.rst ├── l15-regular-expression-in-python.rst ├── l16-python-module-re.rst ├── l17-object-oriented-programming-with-python.rst ├── l18-inheritance-and-association-in-python.rst ├── l19-metaclass-and-abstraction-in-python.rst ├── l20-encapsulation-polymorphism-in-python.rst ├── l21-descriptors-and-context-manager-in-python.rst ├── l22-type-hinting-and-data-class-in-python.rst ├── l23-traceback-and-exception-handling-in-python.rst ├── l24-raise-exception-warning-and-assertion-in-python.rst └── l25-python-module-datetime.rst ├── preface.rst ├── python-interactive.rst ├── python-resources.rst ├── support-report.rst └── support.rst /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: ['https://www.buymeacoffee.com/saeiddrv', 'https://paypal.me/saeiddrv', 'https://pythonpersian.com/support.html'] 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # sphinx build folder 2 | _build 3 | build 4 | .venv 5 | 6 | # Compiled source # 7 | ################### 8 | *.com 9 | *.class 10 | *.dll 11 | *.exe 12 | *.o 13 | *.so 14 | 15 | # Packages # 16 | ############ 17 | # it's better to unpack these files and commit the raw source 18 | # git has its own built in compression methods 19 | *.7z 20 | *.dmg 21 | *.gz 22 | *.iso 23 | *.jar 24 | *.rar 25 | *.tar 26 | *.zip 27 | 28 | # Logs and databases # 29 | ###################### 30 | *.log 31 | *.sql 32 | *.sqlite 33 | 34 | # OS generated files # 35 | ###################### 36 | .DS_Store? 37 | ehthumbs.db 38 | Icon? 39 | Thumbs.db 40 | 41 | # Editor backup files # 42 | ####################### 43 | *~ 44 | -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yaml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | 5 | version: 2 6 | 7 | build: 8 | os: ubuntu-22.04 9 | tools: 10 | python: "3.11" 11 | 12 | python: 13 | install: 14 | - requirements: requirements.txt 15 | 16 | sphinx: 17 | builder: html 18 | configuration: source/conf.py 19 | fail_on_warning: true 20 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.11.2-alpine 2 | 3 | WORKDIR /docs 4 | 5 | EXPOSE 80:8000 6 | 7 | COPY source /docs/ 8 | COPY requirements.txt /docs/requirements.txt 9 | 10 | RUN python -m pip install --upgrade pip \ 11 | && python -m pip install -r requirements.txt \ 12 | && python -m sphinx.cmd.build . _build 13 | 14 | ENTRYPOINT ["sh", "-c", "cd _build && python -m http.server"] 15 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = source 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Python in Persian (Updated with Python 3.11) 3 | 4 | [![Documentation Status](https://readthedocs.org/projects/pythonpersiantutorial/badge/?version=latest)](https://readthedocs.org/projects/pythonpersiantutorial/?badge=latest) 5 | 6 |

7 | 8 | 9 |

10 | 11 | This is an open-source and online book that provides a comprehensive tutorial on the Python programming language in Persian. The book is available at [PythonPersian.com](https://pythonpersian.com/) and covers a wide range of topics, including: 12 | 13 | - Introduction 14 | - Setup and starting a new project 15 | - Interactive mode 16 | - Data types and data structures 17 | - Control flow statements 18 | - File handling 19 | - Standard library 20 | - Functions 21 | - Decorator‌, Generator and lambda 22 | - Regular expressions 23 | - Object-oriented programming 24 | - Descriptors and Context Manager 25 | - Type hinting and Data class 26 | - Exception and Exception handling 27 | - Warning and Assertion 28 | - Date and Time 29 | 30 | This book is designed for Persian-speaking learners without prior experience with programming languages. The book covers all the essential topics, from basic to intermediate programming, and each chapter includes code examples to help learners understand the material. 31 | 32 | ## Getting Started 33 | 34 | To get started with this book, you can: 35 | 36 | - Simply visit [PythonPersian.com](https://pythonpersian.com/) and start reading. 37 | 38 | - Download the source code from GitHub and run it on your local machine: 39 | 40 | ``` 41 | $ git clone https://github.com/saeiddrv/PythonPersianTutorial.git 42 | 43 | $ cd PythonPersianTutorial 44 | 45 | $ pip install -U pip 46 | $ pip install virtualenv 47 | $ python -m virtualenv .venv 48 | $ source .venv/bin/activate 49 | 50 | $ pip install -r requirements.txt 51 | 52 | $ make html 53 | 54 | $ cd ./build/html 55 | $ python -m http.server 8000 56 | ``` 57 | then visit http://127.0.0.1:8000 58 | 59 | - Download the source code from GitHub and run it in Docker: 60 | 61 | ``` 62 | $ git clone https://github.com/saeiddrv/PythonPersianTutorial.git 63 | 64 | $ cd PythonPersianTutorial 65 | 66 | $ docker build -t pypersian . 67 | $ docker run -d --name pypersian -p 80:8000 pypersian 68 | ``` 69 | then visit http://127.0.0.1 70 | 71 | 72 | ## Contributions 73 | 74 | If you'd like to contribute to the book, you can fork the repository on GitHub and submit a pull request with your changes. You can also open an issue to **report errors**. 75 | 76 | ## Credits 77 | 78 | This book was authored by [**Saeid Darvishghazvini**](https://saeiddrv.com). 79 | 80 | ## License 81 | 82 | This book is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License, which means you are free to use, copy, modify, merge, publish, and distribute the book for non-commercial purposes. Please see the [license](https://creativecommons.org/licenses/by-nc-sa/4.0/) for more details. 83 | 84 | ## Acknowledgments 85 | 86 | Special thanks to the Python community and the contributors of open-source Python packages and libraries, without whom this book would not have been possible. 87 | -------------------------------------------------------------------------------- /make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=source 11 | set BUILDDIR=build 12 | 13 | %SPHINXBUILD% >NUL 2>NUL 14 | if errorlevel 9009 ( 15 | echo. 16 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 17 | echo.installed, then set the SPHINXBUILD environment variable to point 18 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 19 | echo.may add the Sphinx directory to PATH. 20 | echo. 21 | echo.If you don't have Sphinx installed, grab it from 22 | echo.https://www.sphinx-doc.org/ 23 | exit /b 1 24 | ) 25 | 26 | if "%1" == "" goto help 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | sphinx 2 | sphinxcontrib.jquery -------------------------------------------------------------------------------- /source/_static/PayPal-QR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/PayPal-QR.png -------------------------------------------------------------------------------- /source/_static/cryptocurrency/saeiddrv-btc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/cryptocurrency/saeiddrv-btc.jpg -------------------------------------------------------------------------------- /source/_static/cryptocurrency/saeiddrv-doge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/cryptocurrency/saeiddrv-doge.jpg -------------------------------------------------------------------------------- /source/_static/cryptocurrency/saeiddrv-eth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/cryptocurrency/saeiddrv-eth.jpg -------------------------------------------------------------------------------- /source/_static/cryptocurrency/saeiddrv-ltc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/cryptocurrency/saeiddrv-ltc.jpg -------------------------------------------------------------------------------- /source/_static/lessons/l02-add-path-on-windows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l02-add-path-on-windows.png -------------------------------------------------------------------------------- /source/_static/lessons/l02-install-python-on-windows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l02-install-python-on-windows.png -------------------------------------------------------------------------------- /source/_static/lessons/l03-interpreter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l03-interpreter.png -------------------------------------------------------------------------------- /source/_static/lessons/l05-Inheritance-Hierarchy-Sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l05-Inheritance-Hierarchy-Sample.png -------------------------------------------------------------------------------- /source/_static/lessons/l05-car-class-object-sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l05-car-class-object-sample.jpg -------------------------------------------------------------------------------- /source/_static/lessons/l05-car-class-sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l05-car-class-sample.jpg -------------------------------------------------------------------------------- /source/_static/lessons/l05-has-a-Sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l05-has-a-Sample.png -------------------------------------------------------------------------------- /source/_static/lessons/l06-c-variable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l06-c-variable.png -------------------------------------------------------------------------------- /source/_static/lessons/l06-python-Indentation-block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l06-python-Indentation-block.png -------------------------------------------------------------------------------- /source/_static/lessons/l06-python-variable-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l06-python-variable-01.png -------------------------------------------------------------------------------- /source/_static/lessons/l08-python-list-assignment-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l08-python-list-assignment-01.png -------------------------------------------------------------------------------- /source/_static/lessons/l08-python-list-assignment-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l08-python-list-assignment-02.png -------------------------------------------------------------------------------- /source/_static/lessons/l12-nested-namespaces-python.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l12-nested-namespaces-python.jpg -------------------------------------------------------------------------------- /source/_static/lessons/l12-python-passing-arguments-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l12-python-passing-arguments-01.png -------------------------------------------------------------------------------- /source/_static/lessons/l12-python-passing-arguments-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l12-python-passing-arguments-02.png -------------------------------------------------------------------------------- /source/_static/lessons/l14-factorial-relation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l14-factorial-relation.png -------------------------------------------------------------------------------- /source/_static/lessons/l14-fibonacci-relation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l14-fibonacci-relation.png -------------------------------------------------------------------------------- /source/_static/lessons/l18-python-mro-diamond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l18-python-mro-diamond.png -------------------------------------------------------------------------------- /source/_static/lessons/l18-python-mro-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l18-python-mro-example.png -------------------------------------------------------------------------------- /source/_static/lessons/l18-python-oop-inheritance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l18-python-oop-inheritance.jpg -------------------------------------------------------------------------------- /source/_static/lessons/l19-python-metaclass-type.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l19-python-metaclass-type.jpg -------------------------------------------------------------------------------- /source/_static/lessons/l23-python-exception-hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l23-python-exception-hierarchy.png -------------------------------------------------------------------------------- /source/_static/lessons/l24-python-assertion-flowchart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l24-python-assertion-flowchart.png -------------------------------------------------------------------------------- /source/_static/lessons/l24-python-exception-hierarchy-warnings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/lessons/l24-python-exception-hierarchy-warnings.png -------------------------------------------------------------------------------- /source/_static/logo/python-3-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/logo/python-3-11.png -------------------------------------------------------------------------------- /source/_static/logo/python-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/logo/python-logo.png -------------------------------------------------------------------------------- /source/_static/logo/real-python-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 16 | 21 | 22 | 34 | 47 | 54 | 61 | 76 | 79 | 90 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /source/_static/pages/00-support.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/00-support.jpg -------------------------------------------------------------------------------- /source/_static/pages/01-python-introduction.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/01-python-introduction.jpg -------------------------------------------------------------------------------- /source/_static/pages/02-python-setup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/02-python-setup.jpg -------------------------------------------------------------------------------- /source/_static/pages/03-python-project-structure.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/03-python-project-structure.jpg -------------------------------------------------------------------------------- /source/_static/pages/04-python-interactive-mode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/04-python-interactive-mode.jpg -------------------------------------------------------------------------------- /source/_static/pages/05-python-object-oriented-programming-concept.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/05-python-object-oriented-programming-concept.jpg -------------------------------------------------------------------------------- /source/_static/pages/06-python-syntax.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/06-python-syntax.jpg -------------------------------------------------------------------------------- /source/_static/pages/07-python-built-in-data-types-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/07-python-built-in-data-types-0.jpg -------------------------------------------------------------------------------- /source/_static/pages/07-python-built-in-data-types-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/07-python-built-in-data-types-1.jpg -------------------------------------------------------------------------------- /source/_static/pages/08-python-built-in-data-types-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/08-python-built-in-data-types-2.jpg -------------------------------------------------------------------------------- /source/_static/pages/08-python-built-in-data-types-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/08-python-built-in-data-types-3.jpg -------------------------------------------------------------------------------- /source/_static/pages/09-python-if-else-for-while.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/09-python-if-else-for-while.jpg -------------------------------------------------------------------------------- /source/_static/pages/10-python-input-output-file.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/10-python-input-output-file.jpg -------------------------------------------------------------------------------- /source/_static/pages/11-python-os-path-math.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/11-python-os-path-math.jpg -------------------------------------------------------------------------------- /source/_static/pages/12-python-function.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/12-python-function.jpg -------------------------------------------------------------------------------- /source/_static/pages/13-python-function-decorator-generator-coroutine-lambda.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/13-python-function-decorator-generator-coroutine-lambda.jpg -------------------------------------------------------------------------------- /source/_static/pages/14-python-function-recursive-memoization.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/14-python-function-recursive-memoization.jpg -------------------------------------------------------------------------------- /source/_static/pages/15-python-regex-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/15-python-regex-1.jpg -------------------------------------------------------------------------------- /source/_static/pages/16-python-regex-re.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/16-python-regex-re.jpg -------------------------------------------------------------------------------- /source/_static/pages/17-python-object-oriented-programming-class-object.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/17-python-object-oriented-programming-class-object.jpg -------------------------------------------------------------------------------- /source/_static/pages/18-python-object-oriented-programming-inheritance-mro-mixin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/18-python-object-oriented-programming-inheritance-mro-mixin.jpg -------------------------------------------------------------------------------- /source/_static/pages/19-python-object-oriented-programming-abstraction-metaclass.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/19-python-object-oriented-programming-abstraction-metaclass.jpg -------------------------------------------------------------------------------- /source/_static/pages/20-python-object-oriented-programming-polymorphism-encapsulation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/20-python-object-oriented-programming-polymorphism-encapsulation.jpg -------------------------------------------------------------------------------- /source/_static/pages/21-python-object-oriented-programming-property-descriptors.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/21-python-object-oriented-programming-property-descriptors.jpg -------------------------------------------------------------------------------- /source/_static/pages/22-python-object-oriented-programming-type-hinting-data-class.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/22-python-object-oriented-programming-type-hinting-data-class.jpg -------------------------------------------------------------------------------- /source/_static/pages/23-python-exception-error-warning-try.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/23-python-exception-error-warning-try.jpg -------------------------------------------------------------------------------- /source/_static/pages/24-python-raise-exception-warning-assertion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/24-python-raise-exception-warning-assertion.jpg -------------------------------------------------------------------------------- /source/_static/pages/25-python-date-time-calendar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/pages/25-python-date-time-calendar.jpg -------------------------------------------------------------------------------- /source/_static/practice/PascalTriangleAnimated2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/practice/PascalTriangleAnimated2.gif -------------------------------------------------------------------------------- /source/_static/practice/students.csv: -------------------------------------------------------------------------------- 1 | ID,Name,Age,Gender,Grade 2 | 1,Alice,21,Female,89 3 | 2,Kevin,19,Male,79 4 | 3,Emily,19,Female,91 5 | 4,Linda,20,Female,93 6 | 5,David,19,Male,76 7 | 6,Sophia,20,Female,97 8 | 7,Mike,20,Male,84 9 | 8,Sarah,20,Female,95 10 | 9,Jack,18,Male,83 11 | 10,Olivia,19,Female,94 12 | 11,Mark,19,Male,82 13 | 12,Kim,20,Female,96 14 | 13,Sam,20,Male,75 15 | 14,George,19,Male,77 16 | 15,Ben,18,Male,72 17 | 16,Chloe,19,Female,90 18 | 17,Ella,21,Female,84 19 | 18,Harry,18,Non-binary,81 20 | 19,Peter,20,Male,77 21 | 20,Pat,19,Non-binary,91 22 | 21,Alice,21,Female,89 23 | 22,Linda,20,Female,93 24 | 23,John,18,Male,85 25 | 24,Ava,19,Female,98 26 | 25,Tom,18,Male,80 27 | 26,Grace,21,Female,88 28 | 27,Sophia,20,Female,97 29 | 28,Jane,19,Female,92 30 | 29,Emma,21,Female,86 31 | 30,Bob,20,Male,78 32 | -------------------------------------------------------------------------------- /source/_static/python-in-persian-book-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/saeiddrv/PythonPersianTutorial/04d2c166d85a25bef0c89b065d7d3929f8a8c7e6/source/_static/python-in-persian-book-cover.png -------------------------------------------------------------------------------- /source/_static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | 3 | Disallow: 4 | 5 | Sitemap: https://pythonpersian.com/_static/sitemap-index.xml 6 | 7 | 8 | -------------------------------------------------------------------------------- /source/_static/sitemap-index.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | https://pythonpersian.com/ 9 | 2021-03-17T17:10:23+00:00 10 | 1.00 11 | 12 | 13 | https://pythonpersian.com/preface.html 14 | 2021-03-17T17:10:24+00:00 15 | 0.80 16 | 17 | 18 | https://pythonpersian.com/lessons/l01-introduction-to-python.html 19 | 2023-03-17T17:10:25+00:00 20 | 0.80 21 | 22 | 23 | https://pythonpersian.com/lessons/l02-setup-python.html 24 | 2023-03-17T17:10:25+00:00 25 | 0.80 26 | 27 | 28 | https://pythonpersian.com/lessons/l03-create-and-run-a-python-project.html 29 | 2023-03-17T17:10:25+00:00 30 | 0.80 31 | 32 | 33 | https://pythonpersian.com/lessons/l04-python-interactive-mode.html 34 | 2023-03-17T17:10:25+00:00 35 | 0.80 36 | 37 | 38 | https://pythonpersian.com/lessons/l05-object-oriented-programming.html 39 | 2023-03-17T17:10:25+00:00 40 | 0.80 41 | 42 | 43 | https://pythonpersian.com/lessons/l06-python-syntax.html 44 | 2023-03-17T17:10:25+00:00 45 | 0.80 46 | 47 | 48 | https://pythonpersian.com/lessons/l07-numeric-types-in-python.html 49 | 2023-03-17T17:10:25+00:00 50 | 0.80 51 | 52 | 53 | https://pythonpersian.com/lessons/l07-string-and-bytes-in-python.html 54 | 2023-03-17T17:10:25+00:00 55 | 0.80 56 | 57 | 58 | https://pythonpersian.com/lessons/l08-list-and-tuple-in-python.html 59 | 2023-03-17T17:10:25+00:00 60 | 0.80 61 | 62 | 63 | https://pythonpersian.com/lessons/l08-set-and-dict-in-python.html 64 | 2023-03-17T17:10:25+00:00 65 | 0.80 66 | 67 | 68 | https://pythonpersian.com/lessons/l09-control-flow-statements-in-python.html 69 | 2023-03-17T17:10:25+00:00 70 | 0.80 71 | 72 | 73 | https://pythonpersian.com/lessons/l10-input-print-and-files-in-python.html 74 | 2023-04-17T17:10:25+00:00 75 | 0.80 76 | 77 | 78 | https://pythonpersian.com/lessons/l11-python-standard-library.html 79 | 2023-04-17T17:10:25+00:00 80 | 0.80 81 | 82 | 83 | https://pythonpersian.com/lessons/l12-function-in-python.html 84 | 2023-04-17T17:10:25+00:00 85 | 0.80 86 | 87 | 88 | https://pythonpersian.com/lessons/l13-decorator-generator-and-lambda-with-python-functions.html 89 | 2023-04-17T17:10:25+00:00 90 | 0.80 91 | 92 | 93 | https://pythonpersian.com/lessons/l14-recursive-functions-and-memoization-in-python.html 94 | 2023-04-17T17:10:25+00:00 95 | 0.80 96 | 97 | 98 | https://pythonpersian.com/lessons/l15-regular-expression-in-python.html 99 | 2023-04-17T17:10:25+00:00 100 | 0.80 101 | 102 | 103 | https://pythonpersian.com/lessons/l16-python-module-re.html 104 | 2023-04-17T17:10:25+00:00 105 | 0.80 106 | 107 | 108 | https://pythonpersian.com/lessons/l17-object-oriented-programming-with-python.html 109 | 2023-04-17T17:10:25+00:00 110 | 0.80 111 | 112 | 113 | https://pythonpersian.com/lessons/l18-inheritance-and-association-in-python.html 114 | 2023-04-17T17:10:25+00:00 115 | 0.80 116 | 117 | 118 | https://pythonpersian.com/lessons/l19-metaclass-and-abstraction-in-python.html 119 | 2023-04-17T17:10:25+00:00 120 | 0.80 121 | 122 | 123 | https://pythonpersian.com/lessons/l20-encapsulation-polymorphism-in-python.html 124 | 2023-04-18T17:10:25+00:00 125 | 0.80 126 | 127 | 128 | https://pythonpersian.com/lessons/l21-descriptors-and-context-manager-in-python.html 129 | 2023-04-19T17:10:25+00:00 130 | 0.80 131 | 132 | 133 | https://pythonpersian.com/lessons/l22-type-hinting-and-data-class-in-python.html 134 | 2023-04-19T17:10:25+00:00 135 | 0.80 136 | 137 | 138 | https://pythonpersian.com/lessons/l23-traceback-and-exception-handling-in-python.html 139 | 2023-04-29T17:10:25+00:00 140 | 0.80 141 | 142 | 143 | https://pythonpersian.com/lessons/l24-raise-exception-warning-and-assertion-in-python.html 144 | 2023-04-01T17:10:25+00:00 145 | 0.80 146 | 147 | 148 | https://pythonpersian.com/lessons/l25-python-module-datetime.html 149 | 2023-04-15T17:10:25+00:00 150 | 0.80 151 | 152 | 153 | https://pythonpersian.com/changelog.html 154 | 2023-04-17T17:10:19+00:00 155 | 0.80 156 | 157 | 158 | https://pythonpersian.com/support.html 159 | 2023-04-17T17:10:25+00:00 160 | 0.80 161 | 162 | 163 | https://pythonpersian.com/support-report.html 164 | 2023-04-17T17:10:25+00:00 165 | 0.80 166 | 167 | 168 | https://pythonpersian.com/python-interactive.html 169 | 2021-04-17T17:10:19+00:00 170 | 0.80 171 | 172 | 173 | https://pythonpersian.com/python-resources.html 174 | 2021-04-20T17:10:19+00:00 175 | 0.80 176 | 177 | 178 | https://pythonpersian.com/index.html 179 | 2021-04-17T17:10:23+00:00 180 | 0.64 181 | 182 | 183 | https://pythonpersian.com/challenges/python-code-challenges-basic.html 184 | 2023-05-05T17:10:23+00:00 185 | 0.64 186 | 187 | 188 | 189 | 190 | -------------------------------------------------------------------------------- /source/_templates/sphinx_minoo_theme/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import print_function 2 | import os 3 | 4 | 5 | """SphinxMinooTheme. 6 | https://github.com/saeiddrv/SphinxMinooTheme. 7 | """ 8 | 9 | class MinooVersion(): 10 | major = "0" 11 | minor = "9" 12 | micro = "0" 13 | level = "Beta" 14 | release = r"2015/05/21" 15 | def info(self): 16 | info = ".".join([self.major, self.minor, self.micro]) 17 | return info 18 | def info_full(self): 19 | info = "major = " + self.major + "\n" + \ 20 | "minor = " + self.minor + "\n" + \ 21 | "micro = " + self.micro + "\n" + \ 22 | "level = " + self.level + "\n" + \ 23 | "release = " + self.release + "\n" 24 | return info 25 | 26 | __version__ = MinooVersion() 27 | 28 | 29 | # From https://github.com/ryan-roemer/sphinx-bootstrap-theme. 30 | def get_html_theme_path(): 31 | """Return list of HTML theme paths.""" 32 | cur_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) 33 | return cur_dir 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /source/_templates/sphinx_minoo_theme/genindex.html: -------------------------------------------------------------------------------- 1 | { 2 | {% macro indexentries(firstname, links) %} 3 |
4 | {%- if links -%} 5 | 6 | {%- if links[0][0] %}{% endif -%} 7 | {{ firstname|e }} 8 | {%- if links[0][0] %}{% endif -%} 9 | 10 | 11 | {%- for ismain, link in links[1:] -%} 12 | , {% if ismain %}{% endif -%} 13 | [{{ loop.index }}] 14 | {%- if ismain %}{% endif -%} 15 | 16 | {%- endfor %} 17 | {%- else %} 18 | {{ firstname|e }} 19 | {%- endif %} 20 |
21 | {% endmacro %} 22 | 23 | {%- extends "layout.html" %} 24 | {% set title = _('Index') %} 25 | {% block body %} 26 | 27 |

{{ _('Index') }}

28 | 29 |
30 | {% for key, dummy in genindexentries -%} 31 | {{ key }} 32 | {% if not loop.last %}| {% endif %} 33 | {%- endfor %} 34 |
35 | 36 | {%- for key, entries in genindexentries %} 37 |

{{ key }}

38 | 39 | {%- for column in entries|slice(2) if column %} 40 | 52 | {%- endfor %} 53 |
41 | {%- for entryname, (links, subitems) in column %} 42 | {{ indexentries(entryname, links) }} 43 | {%- if subitems %} 44 |
45 | {%- for subentryname, subentrylinks in subitems %} 46 | {{ indexentries(subentryname, subentrylinks) }} 47 | {%- endfor %} 48 |
49 | {%- endif -%} 50 | {%- endfor %} 51 |
54 | {% endfor %} 55 | 56 | {% endblock %} 57 | 58 | {% block sidebarrel %} 59 | {% if split_index %} 60 |

{{ _('Index') }}

61 |

{% for key, dummy in genindexentries -%} 62 | {{ key }} 63 | {% if not loop.last %}| {% endif %} 64 | {%- endfor %}

65 | 66 |

{{ _('Full index on one page') }}

67 | {% endif %} 68 | {{ super() }} 69 | {% endblock %} 70 | -------------------------------------------------------------------------------- /source/_templates/sphinx_minoo_theme/glossary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% set search_text = "جستجو" %} 4 | 5 | {% set root_page = "فهرست" %} 6 | 7 | {% set on_github = "در گیت‌هاب" %} 8 | 9 | {% set on_bitbucket = "در بیت‌باکت" %} 10 | 11 | {% set on_source = "سورس" %} 12 | 13 | {% set btn_previous = "قبلی" %} 14 | 15 | {% set btn_next = "بعدی" %} 16 | -------------------------------------------------------------------------------- /source/_templates/sphinx_minoo_theme/includes/bottom.html: -------------------------------------------------------------------------------- 1 | {% import "glossary.html" as glossary %} 2 | 3 | {% if next or prev %} 4 |
5 | {% if theme_direction == "ltr" %} 6 | {% if prev %} 7 |   {{glossary.btn_previous}} 8 | {% endif %} 9 | {% if next %} 10 | {{glossary.btn_next}}   11 | {% endif %} 12 | {% else %} 13 | {% if prev %} 14 |   {{glossary.btn_previous}} 15 | {% endif %} 16 | {% if next %} 17 | {{glossary.btn_next}}   18 | {% endif %} 19 | {% endif %} 20 |
21 | {% endif %} 22 | 23 | 24 | 46 | 47 | 48 | 85 | -------------------------------------------------------------------------------- /source/_templates/sphinx_minoo_theme/includes/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {{ metatags }} 8 | 9 | {%- block htmltitle %} 10 | {% if pagename != "index" %} 11 | {{ title|striptags|e }}{{ titlesuffix }} 12 | {% else %} 13 | {{ title|striptags|e }} 14 | {% endif %} 15 | {%- endblock %} 16 | 17 | 18 | 19 | 20 | 21 | {% if not embedded %} 22 | {% if use_opensearch %} 23 | 24 | {% endif %} 25 | {% endif %} 26 | 27 | {% for cssfile in css_files %} 28 | 29 | {% endfor %} 30 | {% for cssfile in extra_css_files %} 31 | 32 | {% endfor %} 33 | 34 | 35 | 36 | 37 | 38 | {% if theme_direction == "ltr" %} 39 | 40 | {% else %} 41 | 42 | {% endif %} 43 | 44 | 45 | 46 | {%- block linktags %} 47 | {%- if hasdoc('about') %} 48 | 49 | {%- endif %} 50 | {%- if hasdoc('genindex') %} 51 | 52 | {%- endif %} 53 | {%- if hasdoc('search') %} 54 | 55 | {%- endif %} 56 | {%- if hasdoc('copyright') %} 57 | 58 | {%- endif %} 59 | 60 | {%- if parents %} 61 | 62 | {%- endif %} 63 | {%- if next %} 64 | 65 | {%- endif %} 66 | {%- if prev %} 67 | 68 | {%- endif %} 69 | {%- endblock %} 70 | 71 | 72 | {% if not embedded %} 73 | 82 | 83 | {% set script_files = script_files + ['_static/searchtools.js'] %} 84 | 85 | {%- for scriptfile in script_files %} 86 | 87 | {%- endfor %} 88 | {% endif %} 89 | 90 | 91 | 92 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 116 | -------------------------------------------------------------------------------- /source/_templates/sphinx_minoo_theme/includes/sidebar.html: -------------------------------------------------------------------------------- 1 | {% import "glossary.html" as glossary %} 2 | 3 |
4 | 47 | 48 |
49 | 69 |
70 |
71 | 72 | 73 | -------------------------------------------------------------------------------- /source/_templates/sphinx_minoo_theme/includes/top.html: -------------------------------------------------------------------------------- 1 | {% import "glossary.html" as glossary %} 2 | 3 |
4 | {% if pagename == "search" %} 5 | {% set title = _('Search') %} 6 | {% endif %} 7 | {% if pagename != "index" %} 8 |   {{glossary.root_page}}  9 |   10 |   {{ title }} 11 | {% else %} 12 |   {{glossary.root_page}} 13 | {% endif %} 14 | {% if pagename != "search" %} 15 | {% if display_github %} 16 |   {{glossary.on_github}} 17 | {% elif display_bitbucket %} 18 |   {{glossary.on_bitbucket}} 19 | {% elif show_source and source_url_prefix %} 20 |   {{glossary.on_source}} 21 | {% elif show_source and has_source and sourcename %} 22 |   {{glossary.on_source}} 23 | {% endif %} 24 | {% endif %} 25 |
26 |
27 | 28 | 33 | 34 | 35 | 40 | 41 | 42 | 43 | 40 | 41 | 42 | 43 | .. _divisible-by-8: 44 | 45 | اعداد بخش‌پذیر بر هشت 46 | ------------------------------------ 47 | 48 | برنامه‌ای بنویسید که یک عدد صحیح از کاربر دریافت و تمام اعداد صحیح و بخش‌پذیر بر 8 از یک تا آن عدد را چاپ نماید. 49 | 50 | 51 | .. raw:: html 52 | 53 |
54 | 55 |
56 | 57 | 58 | .. _female-student-avg: 59 | 60 | میانگین نمره دانش‌آموزان (فایل CSV) 61 | ------------------------------------ 62 | 63 | فایل [`students.csv `__] را دانلود نمایید. این یک فایل CSV حاوی اطلاعات دانش آموزان یک کلاس است. بدون استفاده از ماژول ``csv`` پایتون، یک برنامه بنویسید که این فایل را پردازش و میانگین نمرات دانش آموزان دختر (Female) این کلاس را محاسبه کند. 64 | 65 | .. raw:: html 66 | 67 |
68 | 69 |
70 | 71 | 72 | .. _find-common-numbers: 73 | 74 | اشتراک دو لیست از اعداد 75 | ------------------------------------ 76 | 77 | برنامه‌ای بنویسید که دو لیست از اعداد صحیح را از کاربر دریافت و سپس اعداد مشترک در هر دو لیست را چاپ نماید. (در هنگام ورود اعداد، آن‌ها را با استفاده از یک فضای خالی جدا نمایید) 78 | 79 | 80 | نمونه:: 81 | 82 | list 1 = [1, 2, 3, 4, 5, 6] 83 | list 2 = [1, 2, 5, 9, 8, 3, 4, 7] 84 | 85 | result = [1, 2, 3, 4, 5] 86 | 87 | .. raw:: html 88 | 89 |
90 | 91 |
92 | 93 | 94 | .. _grade-converter: 95 | 96 | تبدیل نمره 97 | ------------------------------------ 98 | 99 | برنامه‌ای بنویسید که نمره کاربر را از ورودی دریافت (مانند 72) و معادل حرفی آن (مانند C) را چاپ نماید. 100 | 101 | * نمره‌هایی که بیشتر یا برابر 90 و کمتر یا برابر با 100 هستند: A 102 | * نمره‌هایی که بیشتر یا برابر 80 و کمتر از 90 هستند: B 103 | * نمره‌هایی که بیشتر یا برابر 70 و کمتر از 80 هستند: C 104 | * نمره‌هایی که بیشتر یا برابر 60 و کمتر از 70 هستند: D 105 | * نمره‌هایی که کمتر از 60 هستند: F 106 | 107 | 108 | .. raw:: html 109 | 110 |
111 | 112 |
113 | 114 | 115 | .. _max-min-diff: 116 | 117 | تفاضل بزرگترین و کوچکترین عضو یک لیست از اعداد 118 | ---------------------------------------------------- 119 | 120 | برنامه‌ای بنویسید که یک لیست از اعداد صحیح را از کاربر دریافت و سپس تفاضل بین بزرگترین و کوچکترین عضو آن را محاسبه و در خروجی چاپ نماید. (در هنگام ورود اعداد، آن‌ها را با استفاده از یک فضای خالی جدا نمایید) 121 | 122 | نمونه:: 123 | 124 | [1, 5, 3, 2, 8, 16, 20, 18, 3, 0, 4] 125 | max = 20 126 | min = 0 127 | max - min = 20 128 | 129 | .. raw:: html 130 | 131 |
132 | 133 |
134 | 135 | 136 | .. _n-plus-nn-plus-nnn: 137 | 138 | محاسبه عبارت n+nn+nnn 139 | ---------------------------------------------------- 140 | 141 | برنامه‌ای بنویسید که یک عدد صحیح مانند n را از کاربر دریافت و سپس حاصل عبارت n+nn+nnn را محاسبه نماید. برای نمونه چنانچه کاربر عدد 2 را وارد کرد، حاصل عبارت 222+22+2 محاسبه و در خروجی نمایش داده شود: 246 142 | 143 | .. raw:: html 144 | 145 |
146 | 147 |
148 | 149 | 150 | .. _name-in-reverse-order: 151 | 152 | وارونه‌سازی اسم 153 | ---------------------------------------------------- 154 | 155 | برنامه‌ای بنویسید که نام کاربر را از ورودی دریافت و سپس آن را وارونه کرده و در خروجی چاپ نماید. برای نمونه چنانچه کاربر saeid را وارد کرد، در خروجی مقدار dieas چاپ گردد. 156 | 157 | .. raw:: html 158 | 159 |
160 | 161 |
162 | 163 | 164 | .. _palindrome-checker: 165 | 166 | پالیندروم 167 | ---------------------------------------------------- 168 | 169 | برنامه‌ای بنویسید که یک کلمه را از ورودی دریافت و سپس بررسی نماید که آن کلمه پالیندروم (Palindrome) است یا خیر. کلمه‌ای پالیندروم خواهد بود که با وارونه خودش برابر باشد مانند: Madam 170 | 171 | .. raw:: html 172 | 173 |
174 | 175 |
176 | 177 | 178 | .. _student-analysis: 179 | 180 | گزارش دانش‌آموزان 181 | ---------------------------------------------------- 182 | 183 | فایل [`students.csv `__] را دانلود نمایید. این یک فایل CSV حاوی اطلاعات دانش آموزان یک کلاس است. بدون استفاده از ماژول ``csv`` پایتون، یک برنامه بنویسید که این فایل را پردازش و موارد روبرو را محاسبه نماید و در قالب یک شی دیکشنری بر روی خروجی نمایش دهد: کمترین سن دانش‌آموز، بیشترین سن دانش‌آموز، کمترین نمره و بالاترین نمره 184 | 185 | .. raw:: html 186 | 187 |
188 | 189 |
190 | 191 | 192 | .. _count-vowels: 193 | 194 | شمارش حروف صدادار 195 | ---------------------------------------------------- 196 | 197 | برنامه‌ای بنویسید که یک متن از کاربر دریافت کرده، سپس تعداد حروف صدادار انگلیسی (Vowels) را در آن بشمارد و عدد حاصل را در خروجی نمایش دهد. حروف صدادار انگلیسی عبارتند از: ``'a','e','i','o','u'`` 198 | 199 | .. raw:: html 200 | 201 |
202 | 203 |
204 | 205 | 206 | 207 | .. _khayyam-pascal-triangle: 208 | 209 | 210 | رسم مثلث خیام-پاسکال 211 | ---------------------------------------------------- 212 | 213 | برنامه‌ای بنویسید که یک عدد صحیح از کاربر دریافت و مثلث خیام-پاسکال را تا عمق آن سطر محاسبه و رسم نماید. از طریق منابع مختلف، ویکی‌پدیا یا تصویر پایین (تا سطر 5)، می‌توانید با ساختار مثلث خیام-پاسکال [`ویکی‌پدیا `__] آشنا شوید: 214 | 215 | .. image:: /_static/practice/PascalTriangleAnimated2.gif 216 | :align: center 217 | 218 | .. raw:: html 219 | 220 |
221 | 222 |
-------------------------------------------------------------------------------- /source/changelog.rst: -------------------------------------------------------------------------------- 1 | .. role:: emoji-size 2 | 3 | 4 | .. meta:: 5 | :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامه‌نویسی پایتون - گزارش توسعه 6 | :keywords: معرفی پایتون, تاریخچه پایتون, کارایی پایتون, نسخه های پایتون, ویژگی های پایتون, آشنایی با پایتون, آموزش, آموزش پایتون, آموزش برنامه نویسی, پایتون 7 | 8 | 9 | .. _reports: 10 | 11 | گزارش توسعه 12 | ============= 13 | 14 | .. raw:: html 15 | 16 |

00140 - یک‌شنبه ۴ خرداد ۱۴۰۳

17 | 18 | * دامنه کتاب به ``https://pythonpersian.com`` تغییر یافته است. 19 | * دامنه‌های قبلی ``https://python.coderz.club`` و ``https://python.coderz.ir`` تا پایان امسال همچنان معتبر هستند. 20 | 21 | ---- 22 | 23 | 24 | .. raw:: html 25 | 26 |

00139 - شنبه ۲۸ بهمن ۱۴۰۲

27 | 28 | * دامنه سرویس کدرز به ``club.‍‍`` تغییر داده شد. 29 | * صفحه حمایت مالی بروز گردید. 30 | 31 | ---- 32 | 33 | 34 | .. raw:: html 35 | 36 |

00138 - جمعه ۱۵ اردیبهشت ۱۴۰۲

37 | 38 | * نخستین بخش از Code Challenges به کتاب افزوده شد. بخش پایه که برای حل آن نیاز به دانستن دروس ابتدایی تا یازدهم می‌باشد. 39 | 40 | 41 | ---- 42 | 43 | .. raw:: html 44 | 45 |

00137 - جمعه ۸ اردیبهشت ۱۴۰۲

46 | 47 | * دروس دوازدهم تا بیست و پنجم ویرایش و بروزرسانی گردید. 48 | 49 | 50 | ---- 51 | 52 | .. raw:: html 53 | 54 |

00136 - پنج‌شنبه ۷ اردیبهشت ۱۴۰۲

55 | 56 | * درس یازدهم ویرایش و بروزرسانی گردید. 57 | * [`Issue #61 `__] 58 | 59 | 60 | ---- 61 | 62 | .. raw:: html 63 | 64 |

00135 - چهارشنبه ۶ اردیبهشت ۱۴۰۲

65 | 66 | * درس دهم ویرایش و بروزرسانی گردید. 67 | * بخش «ساختارهای ذخیره و تبادل داده» به درس دهم اضافه شد. 68 | * [`Issue #60 `__] 69 | 70 | 71 | ---- 72 | 73 | 74 | .. raw:: html 75 | 76 |

00134 - یک‌شنبه ۳ اردیبهشت ۱۴۰۲

77 | 78 | * درس نهم ویرایش و بروزرسانی گردید. 79 | * شرح دستور ``match/case`` به درس نهم اضافه شد. 80 | * [`Issue #59 `__] 81 | 82 | 83 | 84 | ---- 85 | 86 | .. raw:: html 87 | 88 |

00133 - شنبه ۲ اردیبهشت ۱۴۰۲

89 | 90 | * صفحه «حمایت مالی» ایجاد گردید. [`Issue #63 `__] 91 | 92 | ---- 93 | 94 | .. raw:: html 95 | 96 |

00132 - شنبه ۲ اردیبهشت ۱۴۰۲

97 | 98 | * نام فایل «درس هفتم/بخش دوم» تغییر داده شد. 99 | * توضیحات نوع bytes در درس هفتم ویرایش و بهبود داده شد. 100 | * در درس ششم به پروژه pep8.ir یک ارجاع ایجاد گردید. 101 | 102 | ---- 103 | 104 | .. raw:: html 105 | 106 |

00131 - پنج‌شنبه ۳۱ فروردین ۱۴۰۲

107 | 108 | * درس هشتم ویرایش و بروزرسانی گردید. 109 | * جهت کاهش محتوا و آسانی در مطالعه، درس هشتم در قالب دو صفحه مجزا ارایه گردید. 110 | * شرح شی None از درس هشتم به درس ششم منتقل گردید. 111 | 112 | 113 | ---- 114 | 115 | .. raw:: html 116 | 117 |

00130 - جمعه ۲۵ فروردین ۱۴۰۲

118 | 119 | * درس هفتم ویرایش و بروزرسانی گردید. 120 | * جهت کاهش محتوا و آسانی در مطالعه، درس هفتم در قالب دو صفحه مجزا ارایه گردید. 121 | 122 | 123 | 124 | ---- 125 | 126 | .. raw:: html 127 | 128 |

00129 - پنج‌شنبه ۲۴ فروردین ۱۴۰۲

129 | 130 | * بنابر تذکر آقای «محمد درویشی» متن زیر از درس دهم اصلاح گردید: 131 | 132 | کدگذاری UTF-8 کاراکترهای یونیکد را در یک دنباله بایت با طول متغیر (۱ تا ۴ بایت) ارايه می‌دهد - پیش‌تر به اشتباه ۶ بایت ذکر شده بود. 133 | 134 | 135 | 136 | ---- 137 | 138 | .. raw:: html 139 | 140 |

00128 - جمعه ۱۸ فروردین ۱۴۰۲

141 | 142 | * آغاز بروزرسانی کتاب بر مبنای پایتون 3.11 143 | * دروس یکم تا ششم بروزرسانی گردید. 144 | * با توجه به بایگانی شدن نسخه‌های شاخه 2x زبان برنامه‌نویسی پایتون، بخش‌های مرتبط با این نسخه، از کتاب حذف خواهند شد. 145 | 146 | 147 | ---- 148 | 149 | 150 | 151 | .. raw:: html 152 | 153 |

00127 - پنج‌شنبه ۱۱ آذر ۱۴۰۰

154 | 155 | * توضیح مربوط به بخش «سیستم مدیریت بسته» از درس دوم تکمیل و بخش ``user--`` اضافه گردید. 156 | * گزارش حمایت مالی بروز گردید. 157 | 158 | 159 | 160 | 161 | ---- 162 | 163 | 164 | .. raw:: html 165 | 166 |

00126 - جمعه ۲۷ فروردین ۱۴۰۰

167 | 168 | 169 | * درس بیست و پنجم با عنوان «زمان در پایتون: ماژول‌ datetime » به فهرست کتاب افزوده شد. 170 | * بروزرسانی: توضیحی کوتاه به بخش «property@» از درس بیست و یکم پیرامون «ایجاد Attributeهای read-only» اضافه گردید. 171 | * فونت قالب از «بهداد» به «وزیر» تغییر داده شد. 172 | 173 | ---- 174 | 175 | 176 | .. raw:: html 177 | 178 |

00125 - جمعه ۱۳ فروردین ۱۴۰۰

179 | 180 | 181 | * درس بیست و چهارم با عنوان «مدیریت خطا در پایتون: Warning ،raise Exception و Assertion» به فهرست کتاب افزوده شد. 182 | * بروزرسانی: مبحث «Context Manager و دستور with» به درس بیست و یکم اضافه گردید. 183 | * بروزرسانی: مبحث «مدیریت خطا و دستور with» به درس بیست و سوم اضافه گردید. 184 | * عنوان دروس یازدهم و شانزدهم تغییر داده شد. 185 | * گزارش حمایت مالی بروز گردید. 186 | 187 | 188 | 189 | 190 | ---- 191 | 192 | .. raw:: html 193 | 194 |

00124 - سه‌شنبه ۱۰ فروردین ۱۴۰۰

195 | 196 | * بروزرسانی: مبحث «روند انتشار Exception» به درس بیست و سوم اضافه گردید. 197 | * بروزرسانی: مبحث «کارایی (Performance)» به درس بیست و سوم اضافه گردید. 198 | 199 | 200 | 201 | ---- 202 | 203 | 204 | .. raw:: html 205 | 206 |

00123 - دوشنبه ۹ فروردین ۱۴۰۰

207 | 208 | * درس بیست و سوم با عنوان «مدیریت خطا در پایتون: Exception ،Traceback و Exception Handling» به فهرست کتاب افزوده شد. 209 | 210 | 211 | 212 | ---- 213 | 214 | 215 | .. raw:: html 216 | 217 |

00122 - شنبه ۷ فروردین ۱۴۰۰

218 | 219 | * صفحه‌ای جدید با عنوان «بهترین منابع آموزش پایتون» به فهرست کتاب اضافه گردید که در آن منابعی پیرامون آموزش زبان برنامه‌نویسی پایتون که مطالعه آن‌ها در کنار یا ادامه این کتاب می‌تواند مفید باشد، معرفی خواهند شد. 220 | 221 | 222 | 223 | ---- 224 | 225 | 226 | .. raw:: html 227 | 228 |

00121 - سه‌شنبه ۳ فروردین ۱۴۰۰

229 | 230 | * درس بیست و یکم با عنوان «شی گرایی (OOP) در پایتون: __Descriptors ،Decorator ،__slots و property@» به فهرست کتاب افزوده شد. 231 | * درس بیست و دوم با عنوان «شی گرایی (OOP) در پایتون: Type Hinting و دیتا کلاس (Data Class)» به فهرست کتاب افزوده شد. 232 | * بروزرسانی: مبحث «مقدار Hash یک شی و کاربرد آن در پایتون» به درس هفدهم اضافه گردید. 233 | * بروزرسانی: مبحث «Mixin» به درس هجدهم اضافه گردید. 234 | * نام درس شانزدهم اصلاح گردید. 235 | 236 | ---- 237 | 238 | 239 | 240 | .. raw:: html 241 | 242 |

00120 - جمعه ۲۹ اسفند ۱۳۹۹

243 | 244 | * درس بیستم با عنوان «شی گرایی (OOP) در پایتون: Encapsulation و چندریختی (Polymorphism)» به فهرست کتاب افزوده شد. 245 | 246 | **✽ سال نو مبارک ✽** 247 | 248 | ---- 249 | 250 | 251 | .. raw:: html 252 | 253 |

00119 - چهارشنبه ۲۷ اسفند ۱۳۹۹

254 | 255 | * درس نوزدهم با عنوان «شی گرایی (OOP) در پایتون: متا کلاس (Metaclass) و انتزاع (Abstraction)» به فهرست کتاب افزوده شد. 256 | * بروزرسانی: مبحث «اشیا با قابلیت فراخوانی (Callable Objects)» به درس هفدهم اضافه گردید. 257 | * گزارش حمایت مالی بروز گردید. 258 | 259 | ---- 260 | 261 | 262 | 263 | .. raw:: html 264 | 265 |

00118 - جمعه ۲۲ اسفند ۱۳۹۹

266 | 267 | * درس هجدهم با عنوان «شی گرایی (OOP) در پایتون: وراثت (Inheritance) و Association» به فهرست کتاب افزوده شد. 268 | 269 | ---- 270 | 271 | .. raw:: html 272 | 273 |

00117 - جمعه ۱۵ اسفند ۱۳۹۹

274 | 275 | * درس هفدهم با عنوان «شی گرایی (OOP) در پایتون: تعریف کلاس و ایجاد شی» به فهرست کتاب افزوده شد. 276 | * گزارش حمایت مالی بروز گردید. 277 | 278 | ---- 279 | 280 | .. raw:: html 281 | 282 |

00116 - جمعه ۸ اسفند ۱۳۹۹

283 | 284 | * درس شانزدهم با عنوان «Regular Expression در پایتون - بخش ۲» به فهرست کتاب افزوده شد. 285 | * بروزرسانی: مبحث Zero-length Match به درس پانزدهم اضافه گردید. 286 | * گزارش حمایت مالی بروز گردید. 287 | 288 | ---- 289 | 290 | 291 | 292 | 293 | .. raw:: html 294 | 295 |

00115 - شنبه ۲ اسفند ۱۳۹۹

296 | 297 | * بروزرسانی - ویژگی **پایتون 3.8:** مبحث Walrus Operator به درس ششم اضافه گردید. 298 | * بروزرسانی - ویژگی **پایتون 3.8:** مبحث Positional-Only Parameters به درس دوازدهم اضافه گردید. 299 | * گزارش حمایت مالی بروز گردید. 300 | 301 | ---- 302 | 303 | 304 | 305 | 306 | .. raw:: html 307 | 308 |

00114 - جمعه ۱ اسفند ۱۳۹۹

309 | 310 | * درس پانزدهم با عنوان «Regular Expression در پایتون - بخش ۱» به فهرست کتاب افزوده شد. 311 | * گزارش حمایت مالی بروز گردید. 312 | 313 | ---- 314 | 315 | 316 | 317 | .. raw:: html 318 | 319 |

00113 - سه‌شنبه ۱۴ آبان ۱۳۹۸

320 | 321 | * درس چهاردهم با عنوان «تابع در پایتون: تابع بازگشتی و Memoization» (بخش پایانی از مفهوم تابع در پایتون) به فهرست کتاب افزوده شد. 322 | * نام دروس گذشته به منظور خوانایی بیشتر اصلاح گردید. 323 | 324 | ---- 325 | 326 | .. raw:: html 327 | 328 |

00112 - یک‌شنبه ۲۸ مهر ۱۳۹۸

329 | 330 | * درس سیزدهم با عنوان «تابع - بخش دوم» به فهرست کتاب افزوده شد. 331 | * بخش **f-string** به درس هفتم اضافه گردید. 332 | * کمی توضیح در مورد دستور ``return`` به درس دوازدهم اضافه گردید. 333 | * گزارش هدایای پرداخت شده بروز گردید. 334 | * یک خط فرمان پایتون به صفحه نخست اضافه گردید. *برگرفته از وب‌سایت پایتون* 335 | 336 | ---- 337 | 338 | 339 | .. raw:: html 340 | 341 |

00111 - چهارشنبه ۵ تیر ۱۳۹۸

342 | 343 | صفحه گزارش هدایای پرداخت شده به منظور شفافیت مالی اضافه گردید. :)) 344 | 345 | ---- 346 | 347 | 348 | .. raw:: html 349 | 350 |

00110 - چهارشنبه ۵ تیر ۱۳۹۸

351 | 352 | درس دوازدهم اضافه شد. با امید اینکه بروز رسانی‌های بعدی در فاصله زمانی کمتری انجام بشه. 353 | :emoji-size:`😉` 354 | 355 | ---- 356 | 357 | 358 | .. raw:: html 359 | 360 |

00109 - سه‌شنبه ۲۶ اردیبهشت ۱۳۹۶

361 | 362 | درس یازدهم کامل شد. 363 | :emoji-size:`😉` 364 | 365 | ---- 366 | 367 | 368 | .. raw:: html 369 | 370 |

00108 - یک‌شنبه ۲۱ آذر ۱۳۹۵

371 | 372 | ببخشید؛ بابت تاخیر بسیار طولانی در بروزرسانی کتاب. درس یازدهم با عنوان «کتابخانه استاندارد (بخش ۱)» به فهرست کتاب افزوده شد. 373 | 374 | * بخش پیش‌گفتار ایجاد گردید. 375 | * پاراگراف‌هایی از دروس گذشته اصلاح گردید. 376 | * فونت قالب به «بهداد» تغییر داده شد. 377 | 378 | ---- 379 | 380 | 381 | .. raw:: html 382 | 383 |

00107 - جمعه ۲۰ آذر ۱۳۹۴

384 | 385 | درس دهم با عنوان «ورودی و خروجی» به فهرست کتاب افزوده شد. 386 | :emoji-size:`😉` 387 | 388 | ---- 389 | 390 | 391 | 392 | .. raw:: html 393 | 394 |

00106 - دوشنبه ۲۰ مهر ۱۳۹۴

395 | 396 | درس نهم با عنوان «دستورهای کنترلی» به فهرست کتاب افزوده شد. 397 | 398 | ---- 399 | 400 | 401 | .. raw:: html 402 | 403 |

00105 - شنبه ۲۸ شهریور ۱۳۹۴

404 | 405 | درس هشتم با عنوان «انواع آماده شی - بخش دوم» به فهرست کتاب افزوده شد. 406 | 407 | ---- 408 | 409 | 410 | .. raw:: html 411 | 412 |

00104 - پنج‌شنبه ۲۶ شهریور ۱۳۹۴

413 | 414 | تعدادی اشتباه نوشتاری از دروس موجود (۱-۷) اصلاح گردید. توضیح بخش عملگر NOT بیتی از درس ششم نیز به منظور درک پذیری بیشتر تغییر داده شد. 415 | 416 | ---- 417 | 418 | 419 | .. raw:: html 420 | 421 |

00103 - جمعه ۶ شهریور ۱۳۹۴

422 | 423 | تعدادی اشتباه نوشتاری از درس هفتم اصلاح گردید. 424 | 425 | ---- 426 | 427 | .. raw:: html 428 | 429 |

00102 - چهار‌شنبه ۲۸ مرداد ۱۳۹۴

430 | 431 | 432 | درس هفتم با عنوان «انواع آماده شی - بخش یکم» به فهرست کتاب افزوده شد. 433 | 434 | ---- 435 | 436 | .. raw:: html 437 | 438 |

00101 - سه‌شنبه ۲۷ مرداد ۱۳۹۴

439 | 440 | 441 | افزودن صفحه «گزارش رویداد‌ها» - این صفحه با هدف آگاه‌ ساختن خوانندگان از تغییرات محتوا کتاب ایجاد شده است. از آنجا که این کتاب به تدریج و با فاصله زمانی کامل می‌شود؛ بنابراین امکان تغییر و اصلاح در نوشته‌های آن، چه در زمان تهیه و چه حتی پس از پایان وجود دارد و همچنین ممکن است بخشی از نوشته‌ها با تذکر یا پیشنهاد خوانندگان تغییر، اصلاح یا اضافه گردد که بر همین اساس نیاز به صفحه‌ای برای درج این تغییرات و ذکر علت یا نام افراد موثر ناگزیر می‌بود. 442 | -------------------------------------------------------------------------------- /source/conf.py: -------------------------------------------------------------------------------- 1 | # Configuration file for the Sphinx documentation builder. 2 | # 3 | # For the full list of built-in configuration values, see the documentation: 4 | # https://www.sphinx-doc.org/en/master/usage/configuration.html 5 | 6 | # -- Project information ----------------------------------------------------- 7 | # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information 8 | 9 | project = 'پایتون به پارسی' 10 | copyright = '2015, Saeid Darvishghazvini' 11 | author = 'Saeid Darvishghazvini' 12 | 13 | # -- General configuration --------------------------------------------------- 14 | # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration 15 | 16 | extensions = ["sphinxcontrib.jquery"] 17 | 18 | templates_path = ['_templates'] 19 | exclude_patterns = [] 20 | 21 | language = 'fa' 22 | 23 | master_doc = 'index' 24 | 25 | # -- Options for HTML output ------------------------------------------------- 26 | # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output 27 | 28 | html_theme = 'sphinx_minoo_theme' 29 | html_theme_path = ["_templates"] 30 | html_title = 'کتاب ' + project 31 | 32 | html_static_path = ['_static'] 33 | -------------------------------------------------------------------------------- /source/index.rst: -------------------------------------------------------------------------------- 1 | .. role:: emoji-size 2 | 3 | .. meta:: 4 | :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامه‌نویسی پایتون - صفحه نخست 5 | :keywords: پایتون, آموزش, آموزش برنامه نویسی, آموزش پایتون, برنامه نویسی, کتاب آموزش, آموزش فارسی, کتاب آزاد 6 | 7 | 8 | .. _home-page: 9 | 10 | پایتون به پارسی 11 | ==================== 12 | 13 | 14 | :: 15 | 16 | .-=-. .--. 17 | __ .' '. / " ) 18 | _ .' '. / .-. \ / .-'\ PYTHON 19 | ( \ / .-. \ / / \ \ / / ^ IN PERSIAN 20 | \ `-` / \ `-' / \ `-` / "BATTERIES INCLUDED", ENJOY! 21 | jgs`-.-` '.____.' `.____.' 22 | 23 | 24 | این کتاب تلاشی است برای آموزش زبان برنامه‌نویسی پایتون (Python) بر پایه‌ پیاده‌سازی استاندارد آن (CPython)، به زبانی ساده و روان که بتواند برای افرادی که تاکنون پیشینه برنامه‌نویسی نداشته‌اند نیز کاربردی و مفید باشد. مطالعه این کتاب نیازی به پیش‌زمینه برنامه‌نویسی ندارد و تنها پیش‌نیاز آن علاقه خوانندگان به فن برنامه‌نویسی است. 25 | 26 | 27 | .. toctree:: 28 | :maxdepth: 6 29 | 30 | preface 31 | lessons/l01-introduction-to-python 32 | lessons/l02-setup-python 33 | lessons/l03-create-and-run-a-python-project 34 | lessons/l04-python-interactive-mode 35 | lessons/l05-object-oriented-programming 36 | lessons/l06-python-syntax 37 | lessons/l07-numeric-types-in-python 38 | lessons/l07-string-and-bytes-in-python 39 | lessons/l08-list-and-tuple-in-python 40 | lessons/l08-set-and-dict-in-python 41 | lessons/l09-control-flow-statements-in-python 42 | lessons/l10-input-print-and-files-in-python 43 | lessons/l11-python-standard-library 44 | challenges/python-code-challenges-basic 45 | lessons/l12-function-in-python 46 | lessons/l13-decorator-generator-and-lambda-with-python-functions 47 | lessons/l14-recursive-functions-and-memoization-in-python 48 | lessons/l15-regular-expression-in-python 49 | lessons/l16-python-module-re 50 | lessons/l17-object-oriented-programming-with-python 51 | lessons/l18-inheritance-and-association-in-python 52 | lessons/l19-metaclass-and-abstraction-in-python 53 | lessons/l20-encapsulation-polymorphism-in-python 54 | lessons/l21-descriptors-and-context-manager-in-python 55 | lessons/l22-type-hinting-and-data-class-in-python 56 | lessons/l23-traceback-and-exception-handling-in-python 57 | lessons/l24-raise-exception-warning-and-assertion-in-python 58 | lessons/l25-python-module-datetime 59 | changelog 60 | support 61 | support-report 62 | python-interactive 63 | python-resources 64 | 65 | | 66 | 67 | ---- 68 | 69 | .. figure:: /_static/logo/python-3-11.png 70 | :align: center 71 | :scale: 60 % 72 | :alt: بروز شده با نسخه 3.11 73 | 74 | **شروع:** فروردین ۱۳۹۴ **و** **آخرین بروزرسانی:** اردیبهشت ۱۴۰۲ [`گزارش توسعه `__] - **بروز شده با نسخه ۳.۱۱ پایتون** 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /source/lessons/l05-object-oriented-programming.rst: -------------------------------------------------------------------------------- 1 | .. role:: emoji-size 2 | 3 | .. meta:: 4 | :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامه‌نویسی پایتون - درس پنجم: مفهوم شی‌گرایی 5 | :keywords: شی گرایی, مفهوم شی گرایی, اصول و مبانی شی گرایی, کلاس, شی, متد, صفت, سازنده, نمونه سازی, کپسوله سازی, وراثت, چندریختی, انتزاع, تجرید, برنامه نویسی شی گرا, اشیا در پایتون, کلاس ها در پایتون, آموزش برنامه نویسی, آموزش پایتون,آموزش, سلسله مراتب وراثت, is-a,has-a, ترکیب 6 | 7 | .. _lesson-05: 8 | 9 | درس ۰۵: مفهوم شی‌گرایی 10 | ======================== 11 | 12 | 13 | .. figure:: /_static/pages/05-python-object-oriented-programming-concept.jpg 14 | :align: center 15 | :alt: مفهوم شی گرایی (Object-Oriented Programming) 16 | :class: page-image 17 | 18 | Photo by `Lucas Benjamin `__ 19 | 20 | این درس به توضیح مفاهیم پایه «برنامه‌نویسی شی‌گرا» (Object-Oriented Programming) اختصاص یافته است و آخرین درس از سطح «پایه» در این کتاب می‌باشد. هدف از این درس آشنایی خوانندگان با مفاهیم عمومی شی‌گرایی بوده و نه آموزش آن؛ جزییات بیشتر از برنامه‌نویسی شی‌گرا به همراه آموزش پیاده‌سازی مفاهیم آن در زبان پایتون از درس هفدهم تا بیست و دوم به صورت کامل بررسی خواهد شد. البته در این درس کمی به ساختار اشیا و کلاس‌ها در زبان پایتون اشاره‌ شده است که پیش‌نیاز دروس آتی خواهد بود. 21 | 22 | 23 | :emoji-size:`✔` سطح: پایه 24 | 25 | ---- 26 | 27 | .. contents:: سرفصل‌ها 28 | :depth: 3 29 | 30 | ---- 31 | 32 | 33 | .. _object-oriented-programming: 34 | 35 | برنامه‌نویسی شی‌گرا 36 | -------------------- 37 | «برنامه‌نویسی شی‌گرا» (`Object-Oriented Programming `_) یا به اختصار OOP یک الگو یا شیوه تفکر در برنامه‌نویسی است که برگرفته از دنیای واقعی بوده و از دهه ۱۹۶۰ میلادی مطرح گشته است. به زبانی که از این الگو پشتیبانی کند، «زبان شی‌گرا» گفته می‌شود؛ `Simula 67 `_ و `Smalltalk `_ نخستین زبان‌های برنامه‌نویسی شی‌گرا هستند. ایده شی‌گرایی در پاسخ به برخی از نیازها که الگوهای موجود پاسخ‌گو آن‌ها نبودند به وجود آمد؛ نیازهایی مانند: توانایی پیاده‌سازی مسائل پیچیده (Complex)، «پنهان‌سازی داده» (Data Hiding)، «قابلیت استفاده مجدد» (Reusability) بیشتر، وابستگی کمتر به توابع، انعطاف بالا و... 38 | 39 | رویکرد برنامه‌نویسی شی‌گرا «از پایین به بالا» (Bottom-Up) است؛ یعنی ابتدا واحدهایی کوچک از برنامه ایجاد می‌شوند و سپس با پیوند این واحدها، واحدهایی بزرگتر و در نهایت شکلی کامل از برنامه به وجود می‌آید. برنامه‌نویسی شی‌گرا در قالب دو مفهوم «**کلاس**» (Class) و «**شی**» (Object) ارایه می‌گردد. هر کلاس واحدی از برنامه است که بخشی از عملیات‌ها و داده‌های یک برنامه را تعریف می‌کند و هر شی نیز یک نمونه پیاده‌سازی شده از یک کلاس است. می‌توان هر تعداد شی از یک کلاس ایجاد کرد. هر شی مستقل از دیگر اشیای ایجاد شده خواهد بود که می‌تواند مقادیر متفاوتی را در خود نگهداری کند (در چهارچوبی که توسط کلاس آن تعریف شده است). در برنامه‌نویسی شی‌گرا، تمامی عملیات‌های قابل انتظار یک برنامه از تعامل اشیای گوناگون با یکدیگر حاصل می‌شود. 40 | 41 | 42 | برای مثال، کارخانه تولید یک مدل خودرو را می‌توانیم به شکل یک ساختار بزرگ در نظر بگیریم. بدیهی است که این کارخانه شامل بخش‌های تولیدی کوچکتری به مانند: سیستم الکتریکی، سیستم چرخ‌ها، سیستم سوخت، سیستم خنک کننده، موتور و... است که هر کدام نیز در نوع خود می‌تواند به واحدهایی کوچکتر تقسیم گردد. طراحی شی‌گرای این کارخانه به این صورت می‌شود که ابتدا می‌بایست کلاس‌های کوچکترین واحدها را ایجاد کرد که کاملا ایزوله از یکدیگر هستند. پس از آن به ترتیب کلاس‌هایی بزرگتر تعریف می‌گردند که در آنها بخشی از عملیات‌های مرتبط با یکدیگر هماهنگ می‌شوند، این کلاس‌ها در تعریف خود حاوی اشیای کلاس‌های کوچکتر خواهند بود. با گسترش این طرح به تعریف کلاس نهایی می‌رسیم که در اینجا همان کلاس کارخانه است. اکنون این کلاس با هماهنگ کردن اشیای واحدهای کوچکتر از خود و تعریف عملیات‌های مورد نیاز، آماده تولید نمونه‌های کامل و مورد انتظار خواهد بود. به این صورت که با ایجاد یک شی از آن، یک موجودیت اجرایی (خودرو) پدید می‌آید. 43 | 44 | .. _oop-concepts: 45 | 46 | مفاهیم شی‌گرایی 47 | -------------------- 48 | 49 | 50 | گفته شد که هر کلاس ساختاری است که تعدادی داده و عملیات مرتبط را تعریف می‌کند. از دید برنامه‌نویسی، هر کلاس از دو بخش «اعضای داده» (Data Members) و «توابع عضو» (Member Functions) تشکیل شده است. اعضای داده در واقع همان متغیر‌های درون کلاس هستند که خصوصیات یا صفات شی را بیان می‌کنند و در شی‌گرایی با عنوان «**فیلد**» (Field) یا «**صفت**» (Attribute) از آن‌ها یاد می‌شود. توابع عضو نیز عملیات یا کارهایی هستند که یک شی از کلاس قادر به انجام آن‌ها می‌باشد؛ در شی‌گرایی به این توابع «**متد**» (Method) گفته می‌شود. 51 | 52 | تا به اینجا با مفاهیم «کلاس»، «صفت»، «متد» و «شی» آشنا شده‌ایم؛ در ادامه به توضیح مفاهیم اصلی از برنامه‌نویسی شی‌گرا خواهیم پرداخت. 53 | 54 | 55 | .. _python-oop-instantiation: 56 | 57 | نمونه‌سازی 58 | ~~~~~~~~~~~~~~~~~~~ 59 | 60 | به هر شی از یک کلاس، یک نمونه (Instance) از آن کلاس گفته می‌شود و به عمل ایجاد شی از کلاس در شی‌گرایی «**نمونه‌سازی**» (Instantiation) گفته می‌شود. در این مفهموم، هدف نهایی از تعریف کلاس‌ها در برنامه، تنها تولید شی نیست. گاهی نیز وجود یک کلاس تنها برای درج تعاریف مشترک بین چند کلاس دیگر کاربرد پیدا می‌کند. بر همین اساس دو نوع کلاس در شی‌گرایی وجود دارد: ۱- کلاس‌های عادی که توانایی نمونه‌سازی دارند و به آن‌ها **”Concrete Class“** گفته می‌شود ۲- کلاس‌هایی که توانایی نمونه‌سازی ندارند و به آن‌ها **”Abstract Class“** گفته می‌شود. 61 | 62 | همانطور که در دروس مربوط به پیاده‌سازی کلاس خواهید دید؛ با ایجاد هر نمونه از کلاس یک متد خاص در آن به صورت خودکار اجرا می‌گردد. این متد «**سازنده**» (Constructor) نام دارد و کار آن «**مقداردهی اولیه**» (Initialization) شی است. این کار موجب اطمینان از مقداردهی تمامی اعضای داده پیش از استفاده شی در برنامه می‌گردد. 63 | 64 | 65 | برای مثال یک کلاس خودرو ساده را در نظر بگیرید که در آن صفات: رنگ بدنه، ظرفیت باک، بیشینه سرعت و متدهای: راندن، دریافت میزان سوخت، سوخت گیری، تنظیم سرعت، توقف تعریف شده است. در همان ابتدا یعنی زمان نمونه‌سازی می‌توانیم با تنظیم صفات توسط متد سازنده، اشیا هم نوع ولی با صفات متفاوتی را ایجاد نماییم. برای مثال: دو خودروی آبی با ظرفیت باک ۲۰ لیتر و بیشینه سرعت ۸۰ کیلومتر-ساعت یا یک خودروی صورتی با ظرفیت باک ۴۰ لیتر و بیشینه سرعت ۱۶۰ کیلومتر-ساعت که البته هر سه آن‌ها تمام متدهای کلاس را در خود دارند: 66 | 67 | .. image:: /_static/lessons/l05-car-class-sample.jpg 68 | :align: center 69 | 70 | .. image:: /_static/lessons/l05-car-class-object-sample.jpg 71 | :align: center 72 | 73 | 74 | .. _python-oop-encapsulation: 75 | 76 | کپسوله‌سازی 77 | ~~~~~~~~~~~~~~~~~~~ 78 | 79 | 80 | یک مفهوم دیگر در برنامه‌نویسی شی‌گرا، «**کپسوله‌سازی**» (Encapsulation) است. کپسوله‌سازی به معنی پنهان‌سازی داده‌ها یا عملیات‌های درون یک شی است که با محدودسازی دسترسی به آن‌ها به دست می‌آید. در این شرایط اشیا باید بدون آگاهی از ساختار درونی و چگونگی انجام عملیات یکدیگر به تعامل بپردازند. این امر از پیچیدگی برنامه جلوگیری و تغییر را ساده‌تر می‌کند. 81 | 82 | 83 | .. _python-oop-inheritance: 84 | 85 | وراثت 86 | ~~~~~~~~~~~~~~~~~~~ 87 | 88 | 89 | وراثت (Inheritance) یکی از شکل‌های «قابلیت استفاده مجدد» کد بوده که برنامه‌نویس را قادر می‌سازد تا با ارث‌بری صفات و متدهای یک یا چند کلاس موجود، کلاس‌های جدیدی را ایجاد نماید. 90 | 91 | 92 | برای نمونه فرض کنیم طراح کلاس خودروی پیش، قصد طراحی یک مدل خودرو جدید با رویکرد باربری دارد؛ بنابراین می‌بایست کلاسی جدید برای تولید آن تهیه نماید. ولی کلاس جدید علاوه‌بر صفات (ظرفیت بارگیری و..) و متدهای (انجام بارگیری، تخلیه بار و...) خاص خودش به صفات (رنگ بدنه، ظرفیت باک و...) و متدهای (راندن، سوخت گیری، توقف و...) مشابه در کلاس قبل هم نیاز دارد؛ در این حالت نیازی به تعریف مجدد آن‌ها نیست و می‌توان صفات و متدهای کلاس پیش را در کلاس جدید به ارث برد یا یک Abstract Class برای درج تعاریف مشترک هر دو کلاس ایجاد کرد که این دو مدل خورد می‌توانند آن را به ارث ببرند. 93 | 94 | به کلاسی که از آن ارث‌بری می‌شود **”Parent Class“** یا **”Base Class“** (کلاس پایه) یا **”Superclass“** و به کلاسی که اقدام به ارث‌بری می‌کند **”Child Class“** (کلاس فرزند) یا **”Derived Class“** یا **”Subclass“** گفته می‌شود. 95 | 96 | ارث‌بری توسط «نسبت **هست-یک**» (IS-A Relationship) بیان می‌شود؛ این نسبت می‌گوید کلاس فرزند یک نوع از چیزی است که کلاس پایه هست. کلاس A از کلاس B ارث‌بری دارد؛ در این حالت می‌گوییم: A is a type of B، یعنی درست است اگر بگوییم: «سیب» یک نوع «میوه» است یا «خودرو» یک نوع «وسیله نقلیه» است ولی توجه داشته باشید که این یک ارتباط یک‌طرفه از کلاس فرزند به کلاس پایه است و نمی‌توانیم بگوییم: «میوه» یک نوع «سیب» است یا «وسیله نقلیه» یک نوع «خودرو» است. 97 | 98 | کلاس‌ها می‌توانند مستقل باشند ولی هنگامی که وارد رابطه‌های وراثت می‌شوند، یک ساختار سلسله مراتب (Hierarchy) به شکل درخت را تشکیل می‌دهند. برای نمونه به ساختار سلسله مراتب وراثت پایین که مربوط به برخی اشکال هندسی است توجه نمایید، پیکان‌ها نشانگر نسبت is-a هستند. 99 | 100 | .. image:: /_static/lessons/l05-Inheritance-Hierarchy-Sample.png 101 | :align: center 102 | 103 | 104 | .. _python-oop-composition: 105 | 106 | ترکیب 107 | ~~~~~~~~~~~~~~~~~~~ 108 | 109 | 110 | در برنامه‌نویسی شی‌گرا نسبت دیگری نیز با عنوان «نسبت **دارد-یک**» (HAS-A Relationship) وجود دارد که بیانگر مفهومی به نام «**ترکیب**» (Composition) است که شکل دیگری از قابلیت استفاده مجدد کد می‌باشد ولی مفهومی متفاوت با وراثت دارد. این نسبت زمانی بیان می‌شود که درون یک کلاس (مانند: C) از کلاس دیگری (مانند: D) نمونه‌سازی شده باشد؛ یعنی شی کلاس C درون خودش شی‌ای از کلاس D را داشته باشد؛ در این حالت می‌گوییم: C has a D. به یاد دارید خواندیم کلاس کارخانه خودروسازی با هماهنگ کردن اشیای واحدهای کوچکتر، عملیات خود را تعریف می‌کند. مثلا کلاس موتور - یعنی درون این کلاس یک شی از کلاس موتور ایجاد شده است، اکنون می‌توانیم بگوییم: «خودرو» یک «موتور» دارد. 111 | 112 | .. image:: /_static/lessons/l05-has-a-Sample.png 113 | :align: center 114 | 115 | 116 | .. _python-oop-polymorphism: 117 | 118 | چندریختی 119 | ~~~~~~~~~~~~~~~~~~~ 120 | 121 | مفهوم چندریختی (Polymorphism) بیانگر توانایی کلاس فرزند در بازتعریف متدهایی است که در کلاس پایه موجود می‌باشند. برای نمونه دو کلاس «ماهی» و «گربه» را که هر دو آن‌ها از کلاسی به نام «حیوان» ارث‌بری دارند را در نظر بگیرید؛ در کلاس حیوان متدی با عنوان «غذا خوردن» که عملی مشترک در میان تمام حیوانات است وجود دارد ولی از آنجا که چگونگی انجام آن در ماهی و گربه متفاوت است، بنابراین هر دو این کلاس‌ها نیاز دارند تا متد «غذا خوردن» مخصوص خود را داشته باشند - در این جاست که این متد در کلاس‌های فرزند بازتعریف می‌شود، به این عمل **”Method Overriding“** گفته می‌شود. با Override کردن یک متد، متد کلاس پایه زیر سایه متد مشابه در کلاس فرزند قرار می‌گیرد و از نظر اشیا کلاس فرزند پنهان می‌شود. 122 | 123 | .. _python-oop-abstraction: 124 | 125 | تجرید 126 | ~~~~~~~~~~~~~~~~~~~ 127 | 128 | تجرید (Abstraction) در برنامه‌نویسی شی‌گرا به همراه چندریختی می‌آید و توسط دو مفهوم «**کلاس‌های مجرد**» (Abstract Classes) و «**متدهای مجرد**» (Abstract Methods) ارایه می‌گردد. 129 | 130 | «کلاس مجرد» کلاسی است که شامل یک یا چند «متد مجرد» باشد و «متد مجرد» متدی است که اعلان (Declare) شده ولی بدنه آن ‌تعریف (Define) نشده است. کلاس‌های مجرد قابلیت نمونه‌سازی ندارند و نمی‌توان از آن‌ها شی ایجاد نمود؛ چرا که هدف از توسعه آن‌ها قرار گرفتن در بالاترین سطح (یا چند سطح بالایی) درخت وراثت، به عنوان کلاس پایه برای ارث‌بری کلاس‌های پایین‌تر می‌باشد. ایده طراحی کلاس مجرد در تعیین یک نقشه توسعه برای کلاس‌های فرزند آن است؛ تعیین صفات و متدهای لازم ولی واگذاردن تعریف متدها بر عهده کلاس‌های فرزند. 131 | 132 | به عنوان نمونه سه کلاس «ماهی»، «گربه» و «کبوتر» را در نظر بگیرید. این کلاس‌ها جدا از رفتارهای خاص خود (مانند: «پرواز کردن» در کبوتر یا «شنا کردن» در ماهی)، در یک سری رفتار به مانند «نفس کشیدن»، «غذا خوردن» و... مشترک هستند. راه درستِ توسعه این کلاس‌ها تعیین یک «کلاس پایه» برای رفتارهای مشترک و ارث‌بری هر سه آن‌ها می‌باشد. ولی از آنجا که هر یک، این رفتارهای مشترک را به گونه‌ای دیگر انجام می‌دهد؛ راه درست‌تر آن است که یک «کلاس مجرد» به عنوان «کلاس پایه» آن‌ها در نظر بگیریم؛ در این حالت هر کدام از کلاس‌ها ضمن دانستن رفتارهای لازم می‌تواند آن‌‌ها را متناسب با خواست خود تعریف نمایند. 133 | 134 | 135 | .. note:: 136 | 137 | آنچه در ادامه این درس آورده شده است، چکیده‌ای از پیاده‌سازی برنامه‌نویسی شی گرا در پایتون است. شی گرایی در زبان برنامه نویسی پایتون به صورت کامل از درس هفدهم تا بیست و دوم به صورت کامل شرح داده می‌شود. 138 | 139 | 140 | .. _object-in-python: 141 | 142 | اشیا در پایتون 143 | ---------------- 144 | 145 | علاوه‌بر اینکه پایتون یک زبان برنامه‌نویسی شی‌گراست، ساختار آن نیز بر مبنای شی‌گرایی توسعه یافته است و اینطور بیان می‌شود که **هر چیزی در پایتون یک شی است**. اشیا، انتزاعِ پایتون برای ارایه «انواع داده‌» (Data Types) هستند. به بیان دیگر تمام داده‌های یک برنامه پایتونی یا به صورت مستقیم یک شی است یا از روابط بین اشیا ایجاد می‌گردد. برای نمونه: ``56``، ``"!Hello World"``، توابع و... حتی خود کلاس‌ها نیز توسط یک نوع شی ارایه می‌شوند. 146 | 147 | هر شی در پایتون حاوی یک «**شناسه**» (identity)، یک «**نوع**» (type) و یک «**مقدار**» (value) است. 148 | 149 | * «شناسه» در زمان ایجاد شی به آن اختصاص می‌یابد و غیر قابل تغییر است. تابع ``()id`` شناسه شی را به صورت یک عدد صحیح برمی‌گرداند که این مقدار در CPython بیانگر نشانی (Address) شی در حافظه (Memory) است:: 150 | 151 | 152 | >>> id(5) 153 | 140468674877440 154 | 155 | >>> num = 0.25 156 | >>> id(num) 157 | 140468676592120 158 | 159 | >>> msg = "Hello World!" 160 | >>> id(msg) 161 | 140468675425264 162 | 163 | 164 | * هر شی در پایتون دارای یک «نوع» یا ”type“ است که در واقع معرف کلاسی است که شی از آن ایجاد گردیده است. نوع هر شی توسط تابع ``()type`` قابل مشاهده است:: 165 | 166 | >>> type(127) 167 | 168 | 169 | >>> msg = "Hello World!" 170 | >>> type(msg) 171 | 172 | 173 | >>> type(print) 174 | 175 | 176 | .. caution:: 177 | تمام اعداد صحیح (Integers) در پایتون یک شی از نوع ``int`` می‌باشند. [با انواع آماده (Built-in) شی در پایتون توسط دروس آینده آشنا خواهید شد.] 178 | 179 | 180 | * «مقدار» برخی اشیا در پایتون قابل تغییر است که به این دسته از اشیا **”mutable“** (تغییر پذیر) گفته می‌شود؛ ولی مقدار برخی دیگر قابل تغییر نمی‌باشد (مانند اعداد: شی ``127``) که به آن‌ها اشیا **”immutable“** (تغییر ناپذیر) می‌گویند. 181 | 182 | 183 | .. _class-in-python: 184 | 185 | کلاس‌ها در پایتون 186 | ----------------- 187 | 188 | از نسخه 2.2 طراحی کلاس‌ها در پایتون تغییر کرده است. [`New-style Classes `_] در ساختار جدید مفهوم ”type“ برابر مفهوم ”class“ طراحی شده است. در این ساختار هر کلاس، خود یک شی از کلاسی به نام ``type`` می‌باشد و همچنین تمامی کلاس‌ها از کلاسی به نام ``object`` ارث‌بری دارند:: 189 | 190 | 191 | >>> num = 3 192 | 193 | >>> num.__class__ 194 | 195 | 196 | >>> type(num) 197 | 198 | 199 | >>> type(type(num)) 200 | 201 | 202 | >>> type(num).__class__ 203 | 204 | 205 | >>> type(num).__bases__ 206 | (,) 207 | 208 | 209 | .. caution:: 210 | صفت ``__class__`` نام کلاس یک شی و صفت ``__bases__`` نام کلاس‌های پایه یک کلاس را نمایش می‌دهد. 211 | 212 | 213 | | 214 | 215 | ---- 216 | 217 | :emoji-size:`😊` امیدوارم مفید بوده باشه 218 | 219 | 220 | -------------------------------------------------------------------------------- /source/lessons/l20-encapsulation-polymorphism-in-python.rst: -------------------------------------------------------------------------------- 1 | .. role:: emoji-size 2 | 3 | .. meta:: 4 | :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامه‌نویسی پایتون - درس بیستم: شی گرایی (OOP) در پایتون: Encapsulation و چندریختی (Polymorphism) (OOP) 5 | 6 | 7 | .. _lesson-20: 8 | 9 | درس ۲۰: شی گرایی (OOP) در پایتون: Encapsulation و چندریختی (Polymorphism) 10 | =================================================================================================== 11 | 12 | .. figure:: /_static/pages/20-python-object-oriented-programming-polymorphism-encapsulation.jpg 13 | :align: center 14 | :alt: شی گرایی (OOP) در پایتون: Encapsulation و چندریختی (Polymorphism) 15 | :class: page-image 16 | 17 | Photo by `sanjiv nayak `__ 18 | 19 | این درس در ادامه دروس گذشته مرتبط با آموزش شی گرایی در زبان برنامه‌نویسی پایتون می‌باشد. تاکنون با دو تا از چهار مفهوم مهم در شی‌گرایی آشنا شده‌ایم: **وراثت (Inheritance)** - درس هجدهم و **انتزاع (Abstraction)** - درس نوزدهم. این درس به بررسی دو مورد باقی‌مانده، یعنی **کپسوله‌سازی (Encapsulation)** و **چندریختی (Polymorphism)** در زبان برنامه‌نویسی پایتون می‌پردازد. 20 | 21 | 22 | :emoji-size:`✔` سطح: متوسط 23 | 24 | ---- 25 | 26 | 27 | .. contents:: سرفصل‌ها 28 | :depth: 3 29 | 30 | ---- 31 | 32 | 33 | 34 | کپسوله‌سازی (Encapsulation) 35 | --------------------------------------------------------------- 36 | 37 | در مبحث شی گرایی به پنهان‌سازی اطلاعات درونی یک شی و محدود کردن دسترسی به آن‌ها از بیرون، **کپسوله‌سازی (Encapsulation)** گفته می‌شود - در واقع Encapsulation برابر است با **Information hiding**. 38 | 39 | پیش از هر چیزی لازم است بدانیم که زبان برنامه‌نویسی پایتون از فلسفه‌ای پیروی می‌کند که در جمله «اینجا همه بزرگسال هستیم» "we are all consenting adults here" خلاصه می‌شود! بنابراین این زبان برخلاف زبان‌هایی مانند Java و ++C یک Encapsulation قوی (strong) در اختیار برنامه‌نویس قرار نمی‌دهد. پایتون به برنامه‌نویس اعتماد دارد و می‌گوید «اگر دوست داری در مکان‌های تاریک پرسه بزنی، من مطمئنم که دلیل خوبی داری و هیچ مشکلی ایجاد نمی‌کنی!» 40 | 41 | 42 | .. tip:: 43 | به صورت پیش‌فرض تمام اجزای داخلی یک کلاس، **public** هستند و از هر جایی خارج از کلاس مرتبط خود، قابل دستیابی می‌باشند. 44 | 45 | .. tip:: 46 | بر اساس یک قرارداد مابین برنامه‌نویسان پایتون،‌ چنانچه ابتدای نام Attributeها و Methodها با **یک کاراکتر خط زیرین** (``_``) آغاز شود، این مفهوم را با خود می‌رساند که «دست نزنید مگر داخل همان کلاس یا subclassهای آن». رعایت این قرارداد معادل سطح دسترسی **protected** در Java و ++C می‌باشد. 47 | 48 | .. tip:: 49 | 50 | زبان برنامه‌نویسی پایتون از تکنیک «دستکاری نام» یا **name mangling** [`ویکی‌پدیا `__] پشتیبانی می‌کند. به کمک این تکنیک و با قراردادن **دو کاراکتر خط زیرین** (``__``) در ابتدای نام هر یک از اجزای داخلی یک کلاس (Attributeها و Methodها)، می‌توان معادل سطح دسترسی **private** در Java و ++C را پیاده‌سازی کرد [`اسناد پایتون `__]. 51 | 52 | به نمونه کد زیر توجه نمایید: 53 | 54 | .. code-block:: python 55 | :linenos: 56 | 57 | class Student: 58 | 59 | def __init__(self, name, score=0): 60 | self.name = name 61 | self.__score = score 62 | 63 | def display(self): 64 | print('name:', self.name) 65 | print('score:', self.__score) 66 | 67 | 68 | student = Student('Saeid', 70) 69 | 70 | #accessing using method 71 | student.display() 72 | 73 | #accessing directly from outside 74 | print('-' * 10, 'Accessing directly from outside') 75 | print('name:', student.name) 76 | print('score:', student.__score) 77 | 78 | 79 | :: 80 | 81 | name: Saeid 82 | score: 70 83 | ---------- Accessing directly from outside 84 | name: Saeid 85 | Traceback (most recent call last): 86 | File "sample.py", line 20, in 87 | print('score:', student.__score) 88 | AttributeError: 'Student' object has no attribute '__score' 89 | 90 | داده‌های private را در خارج از کلاس نمی‌توان مستقیم مورد دستیابی قرار داد و همانطور که از نمونه کد بالا مشاهده می‌شود دستیابی چنین عناصری در پایتون باعث بروز AttributeError می‌شود. اما گفته شد که پایتون Encapsulation قوی ندارد، چه اتفاقی افتاد؟ 91 | 92 | مفسر پایتون بر اساس تکنیک **name mangling**، نام تمام عناصری (Attributeها و Methodها) که تنها با **دو کاراکتر خط زیرین** شروع شده باشند (مانند ``spam__``) را به صورت زیر با افزودن نام کلاس به ابتدای آن تغییر می‌دهد:: 93 | 94 | _classname__spam 95 | 96 | بنابراین اگر برنامه‌نویسی به دنبال دستیابی نام موجود (``spam__``) در کلاس باشد، چیزی پیدا نخواهد کرد. با این کار پایتون به صورت نسبی امکان دور نگه‌داشتن عناصر را از حالت عمومی فراهم آورده است. برای مثال پیش داریم:: 97 | 98 | >>> dir(student) 99 | ['_Student__score', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'display', 'name'] 100 | 101 | 102 | متدهای Setter و Getter 103 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 104 | 105 | در برنامه‌نویسی شی گرا چنانچه بخواهیم دسترسی به داده‌ای را به شدت محدود کنیم، به آن داده سطح دسترسی private را اعمال می‌کنیم. اما گاهی می‌خواهیم تنها روند دستیابی و تغییر برخی از داده‌ها را کنترل کنیم - دسترسی مجاز است ولی چگونگی آن مهم است - در این صورت علاوه بر تنظیم سطح دسترسی private به آن عناصر متدهایی را برای تغییر (به عنوان Setter) و دستیابی (به عنوان Getter) آن‌ها نیز می‌بایست ایجاد کنیم: 106 | 107 | .. code-block:: python 108 | :linenos: 109 | 110 | class Student: 111 | 112 | def __init__(self, name, score=0): 113 | self.name = name 114 | self.__score = score 115 | 116 | def set_score(self, score): 117 | if isinstance(score, int) and 0 <= score <= 100: 118 | self.__score = score 119 | 120 | def get_score(self): 121 | return self.__score 122 | 123 | 124 | student = Student('Saeid', 70) 125 | student.set_score(99) 126 | student.set_score('100') 127 | student.set_score(-10) 128 | print(f'{student.name}, score:', student.get_score()) 129 | 130 | 131 | :: 132 | 133 | Saeid, score: 99 134 | 135 | 136 | 137 | 138 | چندریختی (Polymorphism) 139 | --------------------------------------------------------------- 140 | 141 | چندریختی از کلمات یونانی Poly (زیاد) و Morphism (ریخت) گرفته شده است و در برنامه‌نویسی شی گرا به این معنی است که از یک نام یکسان متد برای انواع مختلف می‌توان استفاده کرد. 142 | 143 | در مبحث برنامه‌نویسی شی گرا به شیوه‌های زیر می‌توان چندریختی (Polymorphism) را پیاده‌سازی کرد: 144 | 145 | * Method Overriding 146 | * Method Overloading 147 | * Operator Overloading 148 | 149 | در ادامه به بررسی و پیاده‌سازی هر مورد در زبان برنامه‌نویسی پایتون خواهیم پرداخت. 150 | 151 | 152 | Method Overriding 153 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 154 | 155 | این نوع از چندریختی در هنگام پیاده‌سازی وراثت (Inheritance - درس هجدهم) قابل استفاده است و تا کنون نیز بارها از آن بهره گرفتیم!. 156 | 157 | در واقع به پیاده‌سازی دوباره یک متد از کلاس **superclass** در کلاس **subclass** را **Method Overriding** می‌گویند. در این مواقع متد superclass در زیر سایه متد هم نام در subclass قرار می‌گیرد و هنگام فراخوانی متد توسط اشیای کلاس subclass، این متد subclass است که فراخوانی می‌گردد: 158 | 159 | .. code-block:: python 160 | :linenos: 161 | 162 | class Animal: 163 | 164 | def breathe(self): 165 | print('Animal, breathing...') 166 | 167 | def walk(self): 168 | print('Animal, walking...') 169 | 170 | 171 | class Dog(Animal): 172 | 173 | def walk(self): 174 | print('Dog, walking...') 175 | 176 | 177 | dog = Dog() 178 | dog.breathe() 179 | dog.walk() 180 | 181 | 182 | :: 183 | 184 | Animal, breathing... 185 | Dog, walking... 186 | 187 | در این نمونه کد، کلاس Dog از کلاس Animal ارث‌بری دارد و متد ``walk`` از کلاس Animal را Override کرده است. همانطور که از خروجی مشاهده می‌شود، برخلاف متد ``breathe``، هنگام فراخوانی متد ``walk`` توسط شی Dog، متد باز‌پیاده‌سازی شده موجود در این کلاس فراخوانی می‌شود. 188 | 189 | .. tip:: 190 | 191 | همان‌طور که پیش‌تر نیز انجام می‌دادیم، چنانچه تمایل به فراخوانی متد متناظر در superclass را داشته باشیم، می‌توانیم از تابع ``super`` استفاده کنیم. 192 | 193 | .. tip:: 194 | 195 | اتفاقی که در بحث انتزاع (Abstraction) و ارث‌بری از کلاس‌های Abstract شاهد بودیم نیز در واقع پیروی از همین مبحث بوده و با این تفاوت که Method Overriding اجباری می‌بود. 196 | 197 | .. tip:: 198 | 199 | در زبان برنامه‌نویسی پایتون تنها این نام متدهاست که در Method Overriding نقش دارد و تعداد پارامترهای تعریف شده در هر متد مهم نمی‌باشد. بنابراین متد همنام موجود در subclass می‌تواند پارامترهای متفاوتی نسبت superclass داشته باشد. البته تغییر در پارامترهای متد باز‌پیاده‌سازی شده چیزی نیست که بخواهیم آن را پیشنهاد بدهیم (به خصوص در بحث پیاده‌سازی متدهای Abstract) چرا که یکی از پیامدهای آن شکسته شدن اصل Liskov Substitution Principle [`ویکی‌پدیا `__] می‌شود. 200 | 201 | 202 | 203 | Method Overloading 204 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 205 | 206 | این نوع از چندریختی به امکان کنارهم قرار گرفتن چندین متد همنام ولی با پارامترهای متفاوت (از نظر تعداد یا نوع) در کنار هم می‌باشد. یک شی می‌تواند با ارسال آرگومان‌های متفاوت و فراخوانی یک نام یکسان از متد، کارهای متفاوتی را به انجام برساند. 207 | 208 | همانطور که در قسمت پیش نیز اشاره شد، در زبان برنامه‌نویسی پایتون تعداد و نوع پارامترهای تعریف شده برای یک تابع یا متد، هیچ ارتباطی با هویت آن متد ندارد و یک متد تنها با نام آن شناسایی می‌شود. **بنابراین Method Overloading در پایتون پشتیبانی نمی‌شود** و چنانچه چندین متد یا تابع همنام با پارامترهای متفاوت در یک کلاس یا ماژول در کنار هم باشند، خطایی رخ نمی‌دهد ولی باید توجه داشته باشید که متد یا تابع آخر، تمام موارد پیش از خود را در زیر سایه خواهد گرفت: 209 | 210 | .. code-block:: python 211 | :linenos: 212 | 213 | class Animal: 214 | 215 | def breathe(self): 216 | print('breathing...') 217 | 218 | def walk(self): 219 | print('walking...') 220 | 221 | def walk(self, time=30): 222 | print(f'{time} minutes, walking...') 223 | 224 | def walk(self, minutes=30, seconds=59): 225 | print(f'{minutes} minutes and {seconds} seconds, walking...') 226 | 227 | 228 | animal = Animal() 229 | animal.walk() 230 | 231 | 232 | :: 233 | 234 | 30 minutes and 59 seconds, walking... 235 | 236 | 237 | همان‌طور که از خروجی نمونه کد بالا مشاهده می‌شود، با فراخوانی متد ``walk`` توسط شی Animal، از میان سه متد تعریف شده، این آخرین متد است که اجرا می‌گردد. 238 | 239 | 240 | Operator Overloading 241 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 242 | 243 | گونه‌ای از مفهوم چندریختی که در زبان برنامه‌نویسی پایتون پشتیبانی می‌شود، Operator Overloading می‌باشد که به انجام عملیات متفاوت با استفاده یک عملگر (Operator - درس ششم) یکسان اشاره دارد. برای مثال عملگر ``+`` هنگامی که به همراه دو شی ``int`` قرار بگیرد عمل جمع ریاضی (arithmetic addition) را بین آن دو به انجام می‌رساند ولی زمانی که با دو شی ``str`` قرار بگیرد، مقدار آن دو شی رشته را به یکدیگر پیوند می‌دهد (concatenate):: 244 | 245 | >>> a = 3 246 | >>> b = 'string' 247 | 248 | >>> a + a 249 | 6 250 | >>> b + b 251 | 'stringstring' 252 | 253 | 254 | زیان برنامه‌نویسی پایتون این قابلیت را در اختیار برنامه‌نویس قرار می‌دهد که بتواند عملیات مورد نظر خود را برای اشیای خود در هنگام مواجه با عملگرها فراهم آورد. این کار با استفاده از پیاده‌سازی برخی متدهای خاص ممکن می‌شود و در ادامه به معرفی متدهای معادل چند عملگر پایتون می‌پردازیم. توجه داشته باشید که تعداد این متدهای بسیار بیشتر از این‌ها بوده و در ازای تمام عملگرهای ممکن، یک متد نظیر قابل پیاده‌سازی می‌باشد، برای مطالعه بیشتر می‌توانید به مستندات پایتون مراجعه نمایید: 255 | 256 | .. container:: table-ltr 257 | 258 | =================== =================================================================== 259 | Binary Operators Magic Metods 260 | =================== =================================================================== 261 | ``+`` ``__add__(self, other)`` [`اسناد پایتون `__] 262 | ``-`` ``__sub__(self, other)`` [`اسناد پایتون `__] 263 | ``*`` ``__mul__(self, other)`` [`اسناد پایتون `__] 264 | ``/`` ``__truediv__(self, other)`` [`اسناد پایتون `__] 265 | ``//`` ``__floordiv__(self, other)`` [`اسناد پایتون `__] 266 | ``٪`` ``__mod__(self, other)`` [`اسناد پایتون `__] 267 | ``**`` ``__pow__(self, other)`` [`اسناد پایتون `__] 268 | =================== =================================================================== 269 | 270 | | 271 | 272 | .. container:: table-ltr 273 | 274 | ====================== =================================================================== 275 | Comparison Operators Magic Metods 276 | ====================== =================================================================== 277 | ``<`` ``__lt__(self, other)`` [`اسناد پایتون `__] 278 | ``>`` ``__gt__(self, other)`` [`اسناد پایتون `__] 279 | ``<=`` ``__le__(self, other)`` [`اسناد پایتون `__] 280 | ``>=`` ``__ge__(self, other)`` [`اسناد پایتون `__] 281 | ``==`` ``__eq__(self, other)`` [`اسناد پایتون `__] 282 | ``!=`` ``__ne__(self, other)`` [`اسناد پایتون `__] 283 | ====================== =================================================================== 284 | 285 | | 286 | 287 | | 288 | 289 | به عنوان نمونه یک کلاس Number جدید می‌سازیم و عملگر ``+`` در آن پیاده‌سازی می‌کنیم: 290 | 291 | 292 | .. code-block:: python 293 | :linenos: 294 | 295 | class Number: 296 | 297 | def __init__(self, number): 298 | self.number = number 299 | 300 | # adding two objects 301 | def __add__(self, other_number): 302 | return self.number + other_number.number 303 | 304 | 305 | a = Number(5) 306 | b = Number(7) 307 | 308 | result = a + b 309 | 310 | print(f'{a.number } + {b.number } =', result) 311 | 312 | 313 | :: 314 | 315 | 5 + 7 = 12 316 | 317 | 318 | به عنوان مثالی دیگر، شخصی‌سازی سنجش برابر بودن دو شی: 319 | 320 | 321 | .. code-block:: python 322 | :linenos: 323 | 324 | class Student: 325 | 326 | def __init__(self, name, score=0): 327 | self.name = name 328 | self.score = score 329 | 330 | def __eq__(self, other_student): 331 | return self.score == other_student.score 332 | 333 | 334 | a = Student('Saeid', 75) 335 | b = Student('Babak', 75) 336 | 337 | print(a == b) 338 | 339 | :: 340 | 341 | True 342 | 343 | | 344 | 345 | ---- 346 | 347 | :emoji-size:`😊` امیدوارم مفید بوده باشه 348 | 349 | 350 | 351 | -------------------------------------------------------------------------------- /source/preface.rst: -------------------------------------------------------------------------------- 1 | پیش‌گفتار 2 | ========== 3 | 4 | .. figure:: /_static/python-in-persian-book-cover.png 5 | :align: center 6 | :scale: 60 % 7 | :alt: Python in Persian's Cover 8 | 9 | 10 | آنچه در این کتاب گرد آمده، حاصل یادگیری‌های شخصی از منابع مختلف و در دسترس مرتبط با آموزش پایتون است؛ یک یادداشت شخصی ولی منسجم. با این حال نمی‌توان این کتاب را ترجمه یا برداشت از یک یا چند منبع مشخص دانست. چرا که هر موضوعی پیش از نوشتن، پیش‌نیازهای آن برآورد و کاملا با مستندات اصلی زبان پایتون هماهنگ شده است. این رویه درنهایت منجر به ایجاد طرحی جدا از منابع متداول آموزشی شده است، به گونه‌ای که می‌توان این کتاب را یک نسخه ساده شده و روان از مستندات پایتون همراه با پیش‌نیازهای آن به زبان پارسی در نظر گرفت! 11 | 12 | همانند پایتون، تمرکز این کتاب نیز بر سادگی گذاشته شده و تلاش گشته تا هر زمان که نیاز به دانستن موضوعی عمومی یا جدا از زبان پایتون بوده، آن موضوع نیز بیان شود. به همین دلیل، مطالعه این کتاب برای افرادی که پیش‌تر تجربه برنامه‌نویسی نداشته‌اند نیز کاملا مناسب خواهد بود. تمامی دروس سطح‌بندی شده‌اند و تا سطح متوسط برنامه‌نویسی با زبان پایتون را پوشش می‌دهند. سطوح در نظر گرفته شده در این کتاب عبارتند از: پایه (دروس یکم تا پنجم)، مقدماتی (دروس ششم تا یازدهم) و متوسط (دروس دوازدهم تا بیست و پنجم). 13 | 14 | مفاهیم پوشش داده شده در این کتاب عبارتند از: 15 | 16 | * معرفی 17 | * راهنمای نصب 18 | * چگونگی ایجاد یک پروژه 19 | * محیط تعاملی 20 | * انواع داده و ساختمان‌های داده 21 | * دستورهای کنترلی 22 | * کار با فایل‌ها 23 | * کتابخانه استاندارد 24 | * تابع 25 | * Decorator‌, Generator and Lambda 26 | * Regular expressions 27 | * Object-oriented programming 28 | * Descriptors and Context Manager 29 | * Type hinting and Data class 30 | * Exception and Exception handling 31 | * Warning and Assertion 32 | * Date and Time 33 | 34 | کامل‌ترین منبع برای استفاده از یک زبان برنامه‌نویسی، مستندات اصلی آن است که با کمی تسلط به زبان انگلیسی می‌توان از آن‌ها بهره‌مند شد. مشکل اینجاست که حجم این مستندات زیاد بوده و ممکن است همراه با واژگان تخصصی باشند که برای کاربران جدید کمی نامفهوم خواهند بود. هدف اصلی این کتاب در کنار آموزش زبان برنامه‌نویسی پایتون، نزدیک کردن کاربران به مستندات اصلی آن است. تلاش شده در کنار ارايه توضیحات روان و کافی در هر بخش، لینک به صفحه مستندات اصلی پایتون نیز ارائه شود، مفاهیم و کلمات کلیدی با زبان اصلی (انگلیسی) ذکر شوند تا امکان جستجوی بیشتر در اینترنت نیز برای خوانندگان فراهم باشد. همچنین سعی شده هیچ نکته و مفهومی بدون ذکر نمونه کد و مثال بیان نشود به این امید که پس از پایان هر بخش، جای ابهامی برای خوانندگان باقی نمانده باشد. 35 | 36 | | 37 | 38 | این کتاب متن‌باز و آزاد است که سورس آن به منظور امکان مشارکت عمومی در توسعه و همچنین بهره‌برداری‌های آزاد متناسب با مجوز انتشار آن، بر روی `گیت‌هاب `__ قرار داده شده است. 39 | 40 | ---- 41 | 42 | از جامعه پایتون و همه افرادی که در ایجاد این کتاب من را تشویق کردند، سپاسگزاری می‌کنم. به ویژه از وبلاگ کدرز و دوست عزیزم سجاد شکری که همواره در این مسیر، برای من الهام بخش و راهنما بوده است. 43 | 44 | | 45 | 46 | `سعید درویش `__ (`saeiddrv.com `__) 47 | 48 | 49 | 50 | 51 | 52 | ---- 53 | 54 | زیربنا: 55 | 56 | * `Python `_ 57 | * `Sphinx `_ 58 | * `Minoo Theme `_ 59 | * `Vazir Font `_ 60 | * `GitHub `_ 61 | * `Read the Docs `_ 62 | 63 | -------------------------------------------------------------------------------- /source/python-interactive.rst: -------------------------------------------------------------------------------- 1 | 2 | .. meta:: 3 | :description: کتاب آنلاین و آزاد آموزش زبان برنامه‌نویسی پایتون به فارسی 4 | :keywords: پایتون, آموزش, آموزش برنامه نویسی, آموزش پایتون, برنامه نویسی, کتاب آموزش, آموزش فارسی, کتاب آزاد 5 | 6 | محیط تعاملی پایتون 7 | ================== 8 | 9 | در این بخش می‌توانید به تمرین پایتون بپردازید. 10 | 11 | 12 | .. raw:: html 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /source/python-resources.rst: -------------------------------------------------------------------------------- 1 | 2 | .. meta:: 3 | :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامه‌نویسی پایتون - معرفی منابع آموزشی زبان برنامه‌نویسی پایتون 4 | :keywords: پایتون, آموزش, آموزش برنامه نویسی, آموزش پایتون, برنامه نویسی, کتاب آموزش, آموزش فارسی, کتاب آزاد 5 | 6 | 7 | .. _python-resources: 8 | 9 | 10 | بهترین منابع آموزش پایتون 11 | ======================================================== 12 | 13 | در این بخش منابع خوب و رایگان آموزش زبان‌برنامه‌نویسی پایتون معرفی می‌گردد که مطالعه آن‌ها در کنار یا ادامه این کتاب می‌تواند مفید باشد. 14 | 15 | ---- 16 | 17 | | 18 | 19 | .. _python-main: 20 | 21 | آموزش جامع 22 | ------------------ 23 | 24 | The Python Tutorial 25 | ~~~~~~~~~~~~~~~~~~~~~~~ 26 | 27 | .. image:: /_static/logo/python-logo.png 28 | :align: center 29 | :width: 300 30 | :alt: بهترین منابع آموزش زبان برنامه‌نویسی پایتون 31 | 32 | `The Python Tutorial `__: آموزش رسمی زبان برنامه‌نویسی پایتون 33 | 34 | 35 | Real Python 36 | ~~~~~~~~~~~~~~~ 37 | 38 | 39 | .. image:: /_static/logo/real-python-logo.svg 40 | :align: center 41 | :width: 300 42 | :alt: بهترین منابع آموزش زبان برنامه‌نویسی پایتون 43 | 44 | `Real Python `__: منبعی قابل اعتماد و بروز پیرامون مباحث زبان برنامه‌نویسی پایتون که شامل مطالبی از تمام سطوح (ابتدایی تا پیشرفته) زبان برنامه‌نویسی پایتون است. 45 | 46 | 47 | .. _python-persian-resources: 48 | 49 | متن‌باز فارسی 50 | ------------------ 51 | 52 | .. note:: 53 | در صورت تمایل به ایجاد پیوند در این صفحه و معرفی به خوانندگان، لطفا توضیحات پروژه متن‌باز مرتبط با آموزش زبان برنامه‌نویسی پایتون خود را به نشانی [python@saeiddrv.com] ایمیل نمایید. سپاس فراوان. 54 | 55 | 56 | .. _python-persian-pep8: 57 | 58 | شیوه‌نامه نگارش پایتون (PEP 8 فارسی) 59 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 60 | * `نشانی `__ 61 | * `گیت‌هاب `__ -------------------------------------------------------------------------------- /source/support-report.rst: -------------------------------------------------------------------------------- 1 | .. role:: emoji-size 2 | 3 | 4 | .. meta:: 5 | :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامه‌نویسی پایتون - گزارش حمایت‌های مالی 6 | :keywords: پایتون, آموزش, آموزش برنامه نویسی, آموزش پایتون, برنامه نویسی, کتاب آموزش, آموزش فارسی, کتاب آزاد, پایتون نسخه 7 | 8 | .. _support-report: 9 | 10 | گزارش حمایت‌های مالی 11 | ========================= 12 | 13 | 14 | 15 | **از ابتدا (1394) تا بهمن ماه ۱۴۰۲:‌ 2,949,222 تومان** 16 | 17 | .. note:: 18 | 19 | برای مشاهده گزارش پرداخت‌های جدیدتر از بهمن ماه ۱۴۰۲، لطفا به نشانی روبرو مراجعه نمایید:‌ [`PythonInPersian, Donation Information `__] 20 | 21 | 22 | برای طرح هرگونه سوال یا اعلام مغایرت، لطفا با ایمیل ``python@saeiddrv.com`` تماس حاصل بفرمایید. 23 | 24 | ---- 25 | 26 | 27 | 28 | | 29 | 30 | **سال 1402: 200,000 تومان** 31 | 32 | | 33 | 34 | 35 | 36 | .. raw:: html 37 | 38 |

84: 100,000 تومان در تاریخ 12-06-1402

39 | 40 | 41 | .. raw:: html 42 | 43 |

83: 100,000 تومان در تاریخ 29-04-1402
بابت این کار بسیار سودمند و بی‌مانند از شما سپاسگزارم و با امید بهترین‌ها برای شما.

44 | 45 | ---- 46 | 47 | 48 | 49 | 50 | 51 | | 52 | 53 | **سال 1400: 628,000 تومان** 54 | 55 | | 56 | 57 | 58 | 59 | 60 | .. raw:: html 61 | 62 |

82: 20,000 تومان در زمان 19:31 24-12-1400
بابت کتاب آزاد پایتون

63 | 64 | ---- 65 | 66 | 67 | .. raw:: html 68 | 69 |

81: 15,000 تومان در زمان 17:06 15-12-1400
اموزش پایتون

70 | 71 | ---- 72 | 73 | 74 | .. raw:: html 75 | 76 |

80: 10,000 تومان در زمان 23:06 01-12-1400
سلام ناقابل اما از صمیم قلب

77 | 78 | ---- 79 | 80 | 81 | .. raw:: html 82 | 83 |

79: 2,000 تومان در زمان 08:36 14-11-1400
سلام، شرمنده‌ام انشالله بزودی پیشتر کمک کنم. سپاس برای لطفتان💚

84 | 85 | ---- 86 | 87 | .. raw:: html 88 | 89 |

78: 5,000 تومان در زمان 04:50 07-11-1400
تازه شروع کردم. همین که رایگان وقت میزاری دمت گرم.

90 | 91 | ---- 92 | 93 | .. raw:: html 94 | 95 |

77: 10,000 تومان در زمان 15:50 04-11-1400
دمت گرم

96 | 97 | ---- 98 | 99 | .. raw:: html 100 | 101 |

76: 20,000 تومان در زمان 19:28 23-10-1400
عالی توضیح دادی

102 | 103 | ---- 104 | 105 | .. raw:: html 106 | 107 |

75: 70,000 تومان در زمان 13:52 02-10-1400
دو سه روزه دارم استفاده می‌کنم. دمتون گرم

108 | 109 | ---- 110 | 111 | .. raw:: html 112 | 113 |

74: 20,000 تومان در زمان 12:57 15-09-1400
آرزوی توفیق

114 | 115 | ---- 116 | 117 | 118 | .. raw:: html 119 | 120 |

73: 1,000 تومان در زمان 23:27 22-07-1400
للل

121 | 122 | ---- 123 | 124 | .. raw:: html 125 | 126 |

72: 50,000 تومان در زمان 11:44 21-07-1400
شاکری

127 | 128 | ---- 129 | 130 | .. raw:: html 131 | 132 |

71: 20,000 تومان در زمان 18:48 11-07-1400
tnx_dude

133 | 134 | ---- 135 | 136 | .. raw:: html 137 | 138 |

70: 5,000 تومان در زمان 13:28 10-07-1400
حمایت

139 | 140 | ---- 141 | 142 | .. raw:: html 143 | 144 |

69: 50,000 تومان در زمان 06:45 06-07-1400
بخاطر توضیح بسیار شفاف و مفاهیم

145 | 146 | ---- 147 | 148 | .. raw:: html 149 | 150 |

68: 20,000 تومان در زمان 13:33 29-05-1400
تشکر

151 | 152 | ---- 153 | 154 | .. raw:: html 155 | 156 |

67: 5,000 تومان در زمان 02:00 28-05-1400
دانشجو هم وسعم همینقدر هست

157 | 158 | ---- 159 | 160 | .. raw:: html 161 | 162 |

66: 40,000 تومان در زمان 09:18 12-05-1400
H

163 | 164 | ---- 165 | 166 | 167 | .. raw:: html 168 | 169 |

65: 30,000 تومان در زمان 10:28 04-05-1400
پایتون

170 | 171 | ---- 172 | 173 | .. raw:: html 174 | 175 |

64: 50,000 تومان در زمان 01:11 04-05-1400
عالیست

176 | 177 | ---- 178 | 179 | .. raw:: html 180 | 181 |

63: 20,000 تومان در زمان 11:13 30-04-1400
این آموزش عالی و بینظیر هست

182 | 183 | ---- 184 | 185 | .. raw:: html 186 | 187 |

62: 5,000 تومان در زمان 18:44 19-04-1400
حمایت از اموزش درست

188 | 189 | ---- 190 | 191 | .. raw:: html 192 | 193 |

61: 5,000 تومان در زمان 11:27 14-04-1400
amini

194 | 195 | ---- 196 | 197 | .. raw:: html 198 | 199 |

60: 5,000 تومان در زمان 17:17 10-04-1400
ممنون بابت کتاب

200 | 201 | ---- 202 | 203 | .. raw:: html 204 | 205 |

59: 10,000 تومان در زمان 21:54 22-03-1400
aaa

206 | 207 | ---- 208 | 209 | .. raw:: html 210 | 211 |

59: 10,000 تومان در زمان 20:00 07-03-1400
واقعا سایت خوبی داری . دمت گرم

212 | 213 | ---- 214 | 215 | .. raw:: html 216 | 217 |

58: 10,000 تومان در زمان 01:08 13-02-1400
ممنون بابت زحماتتون

218 | 219 | ---- 220 | 221 | .. raw:: html 222 | 223 |

57: 10,000 تومان در زمان 01:25 12-02-1400
آنکه می بخشد بی منت آزاد است

224 | 225 | ---- 226 | 227 | .. raw:: html 228 | 229 |

56: 20,000 تومان در زمان 11:49 03-02-1400
با تشکر از زحمات شما امیدوارم هر چه زودتر مطالب دیگری قرار بدهید.

230 | 231 | ---- 232 | 233 | .. raw:: html 234 | 235 |

55: 10,000 تومان در زمان 11:48 03-02-1400
مبلغ کمیه اما ب مرور باز پرداخت میکنم❤

236 | 237 | ---- 238 | 239 | .. raw:: html 240 | 241 |

54: 50,000 تومان در زمان 20:34 12-01-1400
از زحمات شما ممنونم . خیلی ناقابل هست

242 | 243 | ---- 244 | 245 | .. raw:: html 246 | 247 |

53: 10,000 تومان در زمان 11:44 12-01-1400
با تشکر از مطالب خیلی مفید بعضی نکات که به دنبالشون بودم را توی این کتاب پیدا کردم

248 | 249 | ---- 250 | 251 | .. raw:: html 252 | 253 |

52: 20,000 تومان در زمان 21:12 11-01-1400
خیلی هم خوب

254 | 255 | ---- 256 | 257 | 258 | | 259 | 260 | **سال 1399: 652,222 تومان** 261 | 262 | | 263 | 264 | 265 | 266 | 267 | 268 | .. raw:: html 269 | 270 |

51: 200,000 تومان در زمان 13:53 24-12-1399
بسیار کتاب خوبی هست لطفا زودتر تمومش کنید

271 | 272 | ---- 273 | 274 | 275 | .. raw:: html 276 | 277 |

50: 50,000 تومان در زمان 16:42 13-12-1399
ممنون که همیشه در حال بروز رسانی هستید، منم سعی میکنم تا بروز میکنید دونیت کنم!

278 | 279 | ---- 280 | 281 | 282 | .. raw:: html 283 | 284 |

49: 150,000 تومان در زمان 13:30 04-12-1399
خیلی واضح و عالی مطالب را عنوان کردید واقعا ممنونم

285 | 286 | ---- 287 | 288 | 289 | .. raw:: html 290 | 291 |

48: 100,000 تومان در زمان 09:03 02-12-1399
عالی بود

292 | 293 | ---- 294 | 295 | 296 | 297 | .. raw:: html 298 | 299 |

47: 10,000 تومان در زمان 12:25 23-11-1399
ممنون بایت وقتی که گذاشتین

300 | 301 | ---- 302 | 303 | 304 | .. raw:: html 305 | 306 |

46: 5,000 تومان در زمان 21:20 13-10-1399
دوست دار عالم

307 | 308 | ---- 309 | 310 | .. raw:: html 311 | 312 |

45: 5,000 تومان در زمان 14:24 03-06-1399
با سپاس

313 | 314 | ---- 315 | 316 | .. raw:: html 317 | 318 |

44: 22,222 تومان در زمان 14:24 30-02-1399
لطفا یه راهی پیدا کنید برای گسترش سریعتر مطالب

319 | 320 | ---- 321 | 322 | .. raw:: html 323 | 324 |

43: 5,000 تومان در زمان 15:03 03-02-1399
دمتون گرم، در حد وسعم کمکی کرده باشم

325 | 326 | ---- 327 | 328 | .. raw:: html 329 | 330 |

42: 100,000 تومان در زمان 18:54 21-01-1399
ممنون از زحمات شما

331 | 332 | ---- 333 | 334 | .. raw:: html 335 | 336 |

41: 5,000 تومان در زمان 18:32 13-01-1399
سلام - ممنون از زحمات شما - لطفاً به تلاش خود ادامه دهید

337 | 338 | ---- 339 | 340 | | 341 | 342 | **سال 1398: 1,298,000 تومان** 343 | 344 | | 345 | 346 | 347 | .. raw:: html 348 | 349 |

40: 10,000 تومان در زمان 15:01 20-12-1398
تشکر از شما بابت جمع آوری این مطالب

350 | 351 | ---- 352 | 353 | 354 | .. raw:: html 355 | 356 |

39: 5,000 تومان در زمان 22:15 09-12-1398
ممنونم از زحمات شما ،خوشحال میشم بتونم تو پروژها تون شرکت کنم

357 | 358 | ---- 359 | 360 | 361 | .. raw:: html 362 | 363 |

38: 5,000 تومان در زمان 01:50 08-12-1398
از زحمات ارزشمند شما ممنونم و آرزوی موفقییت براتون دارم

364 | 365 | ---- 366 | 367 | 368 | 369 | .. raw:: html 370 | 371 |

37: 10,000 تومان در زمان 17:21 24-11-1398
دمت گرم

372 | 373 | ---- 374 | 375 | .. raw:: html 376 | 377 |

36: 2,000 تومان در زمان 04:58 22-10-1398
واقعا دمت گرم

378 | 379 | ---- 380 | 381 | .. raw:: html 382 | 383 |

35: 5,000 تومان در زمان 08:26 07-10-1398
احسنت

384 | 385 | ---- 386 | 387 | .. raw:: html 388 | 389 |

34: 5,000 تومان در زمان 12:17 05-10-1398
Thanks

390 | 391 | ---- 392 | 393 | .. raw:: html 394 | 395 |

33: 20,000 تومان در زمان 18:18 11-09-1398
خدا حفظت کنه

396 | 397 | ---- 398 | 399 | 400 | .. raw:: html 401 | 402 |

32: 10,000 تومان در زمان 12:40 22-08-1398
ممنون از اطلاعات مفید شما

403 | 404 | ---- 405 | 406 | .. raw:: html 407 | 408 |

31: 50,000 تومان در زمان 12:47 01-08-1398
ممنون از اموزش پایتون

409 | 410 | ---- 411 | 412 | .. raw:: html 413 | 414 |

30: 1,000 تومان در زمان 14:51 29-07-1398
درود بر تو.

415 | 416 | ---- 417 | 418 | 419 | .. raw:: html 420 | 421 |

29: 20,000 تومان در زمان 11:41 03-06-1398
ممنون از زحمات شما

422 | 423 | ---- 424 | 425 | 426 | 427 | .. raw:: html 428 | 429 |

28: 5,000 تومان در زمان 13:10 02-06-1398
متشکرم که دانشتون رو در اختیار ما می زارید.

430 | 431 | ---- 432 | 433 | 434 | .. raw:: html 435 | 436 |

27: 1,000,000 تومان در زمان 22:23 11-04-1398
Omidvaram tashvighi beshe vase sorato detaile bishtar!

437 | 438 | ---- 439 | 440 | 441 | .. raw:: html 442 | 443 |

26: 50,000 تومان در زمان 16:52 28-03-1398
وسع یه دانشجو همینقدره ببخشید. کاش تا جایی که میتونین وب سایتو رایگان نگه دارین...

444 | 445 | ---- 446 | 447 | .. raw:: html 448 | 449 |

25: 50,000 تومان در زمان 09:13 08-02-1398
با تشکر

450 | 451 | ---- 452 | 453 | .. raw:: html 454 | 455 |

24: 50,000 تومان در زمان 22:44 26-01-1398
آقا برای آموزش پایتون خیلی زحمت کشیدی، مرسی.

456 | 457 | ---- 458 | 459 | | 460 | 461 | **سال 1397: 92,000 تومان** 462 | 463 | | 464 | 465 | 466 | 467 | ---- 468 | 469 | .. raw:: html 470 | 471 |

23: 5,000 تومان در زمان 13:52 23-11-1397
از کتاب آموزش پایتون شما لذت بردم، درس اول و دوم رو خوندم. موفق و پیروز باشید.

472 | 473 | ---- 474 | 475 | .. raw:: html 476 | 477 |

22: 5,000 تومان در زمان 09:13 05-11-1397
ممنون از کار بسیار مفید شما

478 | 479 | ---- 480 | 481 | .. raw:: html 482 | 483 |

21: 10,000 تومان در زمان 15:25 01-11-1397
تشکر

484 | 485 | ---- 486 | 487 | .. raw:: html 488 | 489 |

20: 2,000 تومان در زمان 20:36 20-10-1397
omid

490 | 491 | ---- 492 | 493 | .. raw:: html 494 | 495 |

19: 1,000 تومان در زمان 13:47 13-10-1397
با سلام خیلی خوشحال شدم از مطالب خوبت. امیدوارم ادامه بدی ممنونم مجید

496 | 497 | ---- 498 | 499 | .. raw:: html 500 | 501 |

18: 1,000 تومان در زمان 09:35 28-07-1397
salam

502 | 503 | ---- 504 | 505 | .. raw:: html 506 | 507 |

17: 1,000 تومان در زمان 18:39 20-07-1397
خوب بود

508 | 509 | ---- 510 | 511 | .. raw:: html 512 | 513 |

16: 25,000 تومان در زمان 16:45 10-06-1397
با تشکر

514 | 515 | ---- 516 | 517 | .. raw:: html 518 | 519 |

15: 2,000 تومان در زمان 12:45 24-05-1397
با تشکر از کتاب روان و جامع شما

520 | 521 | ---- 522 | 523 | .. raw:: html 524 | 525 |

14: 20,000 تومان در زمان 19:50 08-04-1397
.لطفا ادامه پایتون را هم تکمیل کنید

526 | 527 | ---- 528 | 529 | .. raw:: html 530 | 531 |

13: 10,000 تومان در زمان 22:27 04-04-1397
Awesome work! continue it!

532 | 533 | ---- 534 | 535 | .. raw:: html 536 | 537 |

12: 10,000 تومان در زمان 18:30 26-02-1397
تشکر از نوشته بسیار خوبتان

538 | 539 | ---- 540 | 541 | | 542 | 543 | **سال 1396: 61,000 تومان** 544 | 545 | | 546 | 547 | ---- 548 | 549 | .. raw:: html 550 | 551 |

11: 5,000 تومان در زمان 17:51 06-12-1396
هدیه :)

552 | 553 | ---- 554 | 555 | .. raw:: html 556 | 557 |

10: 10,000 تومان در زمان 21:23 10-09-1396
بهترین سایت پایتون هستید چقدر بدبختی کشیدم بدون شما. شرمنده فعلا کمه جبران میکنم بیشتر

558 | 559 | ---- 560 | 561 | .. raw:: html 562 | 563 |

9: 5,000 تومان در زمان 21:00 07-09-1396
👍

564 | 565 | ---- 566 | 567 | .. raw:: html 568 | 569 |

8: 10,000 تومان در زمان 08:39 06-08-1396
مرسی از آقا سعید عزیز برای این کار با ارزش. ارزش این کارتون هیچ جوره با قابل پرداخت نیست.

570 | 571 | ---- 572 | 573 | .. raw:: html 574 | 575 |

7: 10,000 تومان در زمان 13:50 13-07-1396
لطفا ادامه بدید

576 | 577 | ---- 578 | 579 | .. raw:: html 580 | 581 |

6: 1,000 تومان در زمان 10:04 11-06-1396
ببخشید کمه ولی ایشالا بعد بیشتر

582 | 583 | ---- 584 | 585 | .. raw:: html 586 | 587 |

5: 10,000 تومان در زمان 22:44 16-04-1396
مبلغی ناچیز و ناقابل بابت زحماتی که درآموزش پایتون میکشید

588 | 589 | ---- 590 | 591 | .. raw:: html 592 | 593 |

4: 10,000 تومان در زمان 17:51 11-04-1396
بخاطر کارهای خوب در نگارش دقیق آموزش پای‌تُن

594 | 595 | ---- 596 | 597 | | 598 | 599 | **سال 1395: 18,000 تومان** 600 | 601 | | 602 | 603 | 604 | ---- 605 | 606 | 607 | .. raw:: html 608 | 609 |

3: 10,000 تومان در زمان 19:33 27-11-1395
کارتون عالیه، ادامه بدید.

610 | 611 | ---- 612 | 613 | .. raw:: html 614 | 615 | 616 |

2: 5,000 تومان در زمان 20:51 15-11-1395
با تشکر از زحمات شما برای نشر علم .هر چند این مبالغ در برابر تلاش شما ناچیز است .

617 | 618 | 619 | ---- 620 | 621 | .. raw:: html 622 | 623 |

1: 3,000 تومان در زمان 11:27 09-11-1395
دم شما گرم

624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | -------------------------------------------------------------------------------- /source/support.rst: -------------------------------------------------------------------------------- 1 | .. role:: emoji-size 2 | 3 | .. meta:: 4 | :description: پایتون به پارسی - کتاب آنلاین و آزاد آموزش زبان برنامه‌نویسی پایتون - حمایت مالی 5 | :keywords: پایتون, آموزش, آموزش برنامه نویسی, آموزش پایتون, برنامه نویسی, کتاب آموزش, آموزش فارسی, کتاب آزاد, پایتون نسخه 6 | 7 | 8 | .. _support: 9 | 10 | حمایت مالی 11 | ==================== 12 | 13 | .. figure:: /_static/pages/00-support.jpg 14 | :align: center 15 | :alt: کتاب پایتون به پارسی - حمایت مالی 16 | :class: page-image 17 | 18 | Photo by `Neil Thomas `__ 19 | 20 | ممنون که در این صفحه هستید 🙂 21 | 22 | ----- 23 | 24 | در این اینجا راه‌های حمایت مالی از توسعه و نگهداری این کتاب قرار داده شده است. 25 | 26 | هیچ تعریف مبلغی وجود ندارد! به هر روش و میزان که تمایل دارید، می‌توانید از توسعه و نگهداری این کتاب حمایت نمایید. 27 | 28 | سپاس فراوان. 🥰 29 | 30 | .. note:: 31 | 32 | لطفا پس از حمایت نقدی، اطلاعات مربوط به آن را از طریق لینک زیر با دیگران به اشتراک بگذارید. 33 | 34 | [`PythonInPersian, Donation Information `__] 35 | 36 | اطاعات از طریق یک فایل اکسل به اشتراک گذاشته شده، جمع‌آوری می‌گردد. تاریخ تغییرات نگهداری می‌شود. 37 | 38 | برای طرح هرگونه سوال یا نظر، لطفا با ایمیل ``python@saeiddrv.com`` تماس حاصل بفرمایید. 39 | 40 | 41 | 42 | ----- 43 | 44 | .. contents:: میان‌بر 45 | :depth: 3 46 | 47 | ----- 48 | 49 | 50 | .. _support-rials: 51 | 52 | پرداخت ریالی 53 | -------------- 54 | 55 | 56 | 57 | .. _support-c2c: 58 | 59 | کارت به کارت 60 | ~~~~~~~~~~~~~~~~~~~ 61 | 62 | در این روش کمی کارمزد نیز از شما کسر خواهد شد. 63 | 64 | * شماره کارت: ``0354-5901-8610-6219`` (``6219861059010354``) 65 | * به نام: سعید درویش قزوینی 66 | * نزد بانک: سامان 67 | * شماره شبا: ``IR-08-0560-9201-8880-2362-1720-01`` (``IR080560920188802362172001``) 68 | 69 | 70 | 71 | 72 | پرداخت ارزی 73 | -------------- 74 | 75 | 76 | .. _support-buy-me-a-coffee: 77 | 78 | Buy me a coffee 79 | ~~~~~~~~~~~~~~~~~~~ 80 | 81 | `buymeacoffee.com/saeiddrv `__ 82 | 83 | 84 | .. _support-paypal: 85 | 86 | PayPal 87 | ~~~~~~~~~~~~~~~~~~~ 88 | 89 | `paypal.me/saeiddrv `__ 90 | 91 | .. image:: /_static/PayPal-QR.png 92 | :align: center 93 | :width: 200 94 | 95 | 96 | 97 | .. _support-github: 98 | 99 | GitHub 100 | ~~~~~~~~~~~~~~~~~~~ 101 | 102 | .. raw:: html 103 | 104 | 105 | 106 | 107 | 108 | .. _support-cryptocurrency: 109 | 110 | رمزارز 111 | --------- 112 | 113 | 114 | .. _support-btc: 115 | 116 | بیت کوین (BTC) 117 | ~~~~~~~~~~~~~~~~~~~ 118 | 119 | .. image:: /_static/cryptocurrency/saeiddrv-btc.jpg 120 | :align: center 121 | :width: 256 122 | 123 | :: 124 | 125 | bc1q8sdd2zarj4swalx2f895y2v3exk53rh7t8jzve 126 | 127 | 128 | .. _support-eth: 129 | 130 | اتریوم (ETH) 131 | ~~~~~~~~~~~~~~~~~~~ 132 | 133 | .. image:: /_static/cryptocurrency/saeiddrv-eth.jpg 134 | :align: center 135 | :width: 256 136 | 137 | :: 138 | 139 | 0x7218D1c2c9614e5f3c9959c1b9D2f36592aAa4c7 140 | 141 | 142 | .. _support-ltc: 143 | 144 | لایت کوین (LTC) 145 | ~~~~~~~~~~~~~~~~~~~ 146 | 147 | .. image:: /_static/cryptocurrency/saeiddrv-ltc.jpg 148 | :align: center 149 | :width: 256 150 | 151 | :: 152 | 153 | ltc1qsw63lq9a6c9r8ukufrk6rkg4lge5tn528k2qwd 154 | 155 | 156 | .. _support-doge: 157 | 158 | دوج (DOGE) 159 | ~~~~~~~~~~~~~~~~~~~ 160 | 161 | .. image:: /_static/cryptocurrency/saeiddrv-doge.jpg 162 | :align: center 163 | :width: 256 164 | 165 | :: 166 | 167 | DNWR6VJMXV7HwMyj28WVHTMJSCKEr6mKvz 168 | 169 | 170 | .. _support-non: 171 | 172 | غیرنقدی 173 | -------------------- 174 | 175 | * اشتراک‌گذاری و معرفی کتاب 176 | * استار زدن به پروژه روی گیت‌هاب 😉 [`Python in Persian `__] 177 | * مطالعه کتاب 178 | 179 | 180 | --------------------------------------------------------------------------------