diff --git a/20_Day_Python_package_manager/20_python_package_manager.md b/20_Day_Python_package_manager/20_python_package_manager.md index 37dc6911b..f147e51bd 100644 --- a/20_Day_Python_package_manager/20_python_package_manager.md +++ b/20_Day_Python_package_manager/20_python_package_manager.md @@ -29,7 +29,6 @@ - [Reading from URL](#reading-from-url) - [Creating a Package](#creating-a-package) - [Further Information About Packages](#further-information-about-packages) - - [Exercises: Day 20](#exercises-day-20) # πŸ“˜ Day 20 @@ -37,20 +36,19 @@ ### What is PIP ? -PIP stands for Preferred installer program. We use _pip_ to install different Python packages. -Package is a Python module that can contain one or more modules or other packages. A module or modules that we can install to our application is a package. -In programming, we do not have to write every utility program, instead we install packages and import them to our applications. +PIP αž˜αžΆαž“αž“αŸαž™αžαžΆ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Installer Preferred αŸ” αž™αžΎαž„αž”αŸ’αžšαžΎ _pip_ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Python αž•αŸ’αžŸαŸαž„αŸ— +Package αž‚αžΊαž‡αžΆαž˜αŸ‰αžΌαžŒαž»αž› Python αžŠαŸ‚αž›αž’αžΆαž…αž˜αžΆαž“αž˜αž½αž™αž¬αž…αŸ’αžšαžΎαž“αž˜αŸ‰αžΌαžŒαž»αž›αž¬αž―αž€αžŸαžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž˜αŸ‰αžΌαžŒαž»αž› ឬ αž˜αŸ‰αžΌαžŒαž»αž› αžŠαŸ‚αž› αž™αžΎαž„ αž’αžΆαž… αžŠαŸ†αž‘αžΎαž„ αž‘αŸ…αž›αžΎ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αžšαž”αžŸαŸ‹ αž™αžΎαž„ αž‚αžΊαž‡αžΆ αž€αž‰αŸ’αž…αž”αŸ‹ αŸ” +αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž™αžΎαž„αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Utility αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ αž‡αŸ†αž“αž½αžŸαžœαž·αž‰αž™αžΎαž„αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„ Package αž“αž·αž„importαžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ ### Installing PIP -If you did not install pip, let us install it now. Go to your terminal or command prompt and copy and paste this: +αž”αžΎαžŸαž·αž“αž‡αžΆαž’αŸ’αž“αž€αž˜αž·αž“αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„ pip αžŸαžΌαž˜αž²αŸ’αž™αž™αžΎαž„αžŠαŸ†αž‘αžΎαž„αžœαžΆαž₯αž‘αžΌαžœαž“αŸαŸ‡ αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ Terminal ឬ Command Prompt αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™ Copy αž“αž·αž„ paste αž“αŸαŸ‡: ```sh asabeneh@Asabeneh:~$ pip install pip ``` -Check if pip is installed by writing - +αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαžΆ pip αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αžŠαŸ„αž™αžŸαžšαžŸαŸαžš ```sh pip --version ``` @@ -60,19 +58,19 @@ asabeneh@Asabeneh:~$ pip --version pip 21.1.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.9.6) ``` -As you can see, I am using pip version 21.1.3, if you see some number a bit below or above that, means you have pip installed. +αžŠαžΌαž… αžŠαŸ‚αž› αž’αŸ’αž“αž€ αž’αžΆαž… αž˜αžΎαž› αž”αžΆαž“ αžαŸ’αž‰αž»αŸ† αž€αŸ†αž–αž»αž„ αž”αŸ’αžšαžΎ Pip Version 21.1.3 αž”αŸ’αžšαžŸαž·αž“ αž”αžΎ αž’αŸ’αž“αž€ αžƒαžΎαž‰ αž…αŸ†αž“αž½αž“ αžŽαžΆαž˜αž½αž™ αž“αŸ… αžαžΆαž„ αž€αŸ’αžšαŸ„αž˜ ឬ αžαžΆαž„ αž›αžΎ αž“αŸ„αŸ‡ αž˜αžΆαž“ αž“αŸαž™ ថអ αž’αŸ’αž“αž€ αž˜αžΆαž“ Pip αž”αžΆαž“ αžŠαŸ†αž‘αžΎαž„ -Let us check some of the packages used in the Python community for different purposes. Just to let you know that there are lots of packages available for use with different applications. +αžŸαžΌαž˜αž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž“αžΌαžœ Package αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαž αž‚αž˜αž“αŸ Python αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αžŠαŸ…αž•αŸ’αžŸαŸαž„αŸ— αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž’αŸ„αž™αž’αŸ’αž“αž€αžŠαžΉαž„αžαžΆ αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž“αžΌαžœαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžΎαž‡αžΆαž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αŸ— ### Installing packages using pip -Let us try to install _numpy_, called numeric python. It is one of the most popular packages in machine learning and data science community. +αžŸαžΌαž˜αž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαŸ†αž‘αžΎαž„ _numpy_ αž αŸ…αžαžΆ numeric python αžœαžΆαž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž½αž™αžŠαŸ‚αž›αž–αŸαž‰αž“αž·αž™αž˜αž”αŸ†αž•αž»αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαž·αž€αŸ’αžŸαžΆαž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž“αž·αž„αžŸαž αž‚αž˜αž“αŸαžœαž·αž‘αŸ’αž™αžΆαžŸαžΆαžŸαŸ’αžαŸ’αžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” -- NumPy is the fundamental package for scientific computing with Python. It contains among other things: - - a powerful N-dimensional array object - - sophisticated (broadcasting) functions - - tools for integrating C/C++ and Fortran code - - useful linear algebra, Fourier transform, and random number capabilities +- NumPy αž‚αžΊαž‡αžΆαž€αž‰αŸ’αž…αž”αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αžŽαž“αŸαž™αŸ’αž™αžœαž·αž‘αŸ’αž™αžΆ αž‡αžΆαž˜αž½αž™ Python αŸ” αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αžšαž½αž˜αž˜αžΆαž“αŸ– +- a powerful N-dimensional array object +- αž˜αž»αžαž„αžΆαžš (αž€αžΆαžšαž•αŸ’αžŸαžΆαž™) αžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžαŸ’αž–αžŸαŸ‹ +- αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž€αžΌαžŠ C/C++ αž“αž·αž„ Fortran +- algebra linear αžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– αž”αŸ’αžαžΌαžš Fourier αž“αž·αž„αžŸαž˜αžαŸ’αžαž—αžΆαž–αž…αŸ†αž“αž½αž“αž›αŸαž…αž›αžΊ ```sh asabeneh@Asabeneh:~$ pip install numpy @@ -101,7 +99,7 @@ array([3, 4, 5, 6, 7]) >>> ``` -Pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language. Let us install the big brother of numpy, _pandas_: +Pandas αž‚αžΊαž‡αžΆαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αž›αž·αžαž·αžαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ„αž™ BSD αžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαž—αž–αž”αžΎαž€αž‘αžΌαž›αžΆαž™ αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžαŸ’αž–αžŸαŸ‹ αž“αž·αž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαžŸαžΆ Python αŸ” αžŸαžΌαž˜αž²αŸ’αž™αž™αžΎαž„αžŠαŸ†αž‘αžΎαž„αž”αž„αž’αŸ†αžšαž”αžŸαŸ‹ Numpy, _pandas_: ```sh asabeneh@Asabeneh:~$ pip install pandas @@ -114,10 +112,9 @@ Python 3.9.6 (default, Jun 28 2021, 15:26:21) Type "help", "copyright", "credits" or "license" for more information. >>> import pandas ``` +αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž’αŸ†αž–αžΈ numpy ឬ pandas αž‘αŸαž™αžΎαž„αž€αŸ†αž–αž»αž„αžαŸ‚αž–αŸ’αž™αžΆαž™αžΆαž˜αžšαŸ€αž“αžŸαžΌαžαŸ’αžšαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ†αž‘αžΎαž„αž―αž€αžŸαžΆαžš αž“αž·αž„αžšαž”αŸ€αž”αž“αžΆαŸ†αž…αžΌαž›αžœαžΆαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎ វអ αžαŸ’αžšαžΌαžœαž€αžΆαžš αž™αžΎαž„ αž“αžΉαž„ αž“αž·αž™αžΆαž™ αž’αŸ†αž–αžΈ αž€αž‰αŸ’αž…αž”αŸ‹ αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆ αž“αŸ…αž€αŸ’αž“αž»αž„ αž•αŸ’αž“αŸ‚αž€ αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αŸ” -This section is not about numpy nor pandas, here we are trying to learn how to install packages and how to import them. If it is needed, we will talk about different packages in other sections. - -Let us import a web browser module, which can help us to open any website. We do not need to install this module, it is already installed by default with Python 3. For instance if you like to open any number of websites at any time or if you like to schedule something, this _webbrowser_ module can be used. +αžŸαžΌαž˜αž™αžΎαž„αž“αžΆαŸ†αž…αžΌαž›αž˜αŸ‰αžΌαžŒαž»αž› Browser αžŠαŸ‚αž›αž’αžΆαž…αž‡αž½αž™αž™αžΎαž„αž”αžΎαž€αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŽαžΆαž˜αž½αž™αŸ” αž™αžΎαž„αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸαŸ‡αž‘αŸ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αžŠαŸ„αž™ default αž‡αžΆαž˜αž½αž™ Python 3 αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αžΎαž€αž‚αŸαž αž‘αŸ†αž–αŸαžšαž…αŸ†αž“αž½αž“αžŽαžΆαž˜αž½αž™αž€αŸ’αž“αž»αž„αž–αŸαž›αžŽαžΆαž˜αž½αž™ αž¬αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž€αŸ†αžŽαžαŸ‹αž–αŸαž›αž’αŸ’αžœαžΈαž˜αž½αž™αž“αŸαŸ‡ _webbrowser_ module αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ” ```py import webbrowser # web browser module to open websites @@ -137,7 +134,7 @@ for url in url_lists: ### Uninstalling Packages -If you do not like to keep the installed packages, you can remove them using the following command. +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž›αŸ„αž€αž’αŸ’αž“αž€αž˜αž·αž“αž…αž„αŸ‹αžšαž€αŸ’αžŸαžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ„αŸ‡αž‘αŸ αž›αŸ„αž€αž’αŸ’αž“αž€αž’αžΆαž…αž›αž»αž”αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” ```sh pip uninstall packagename @@ -145,7 +142,7 @@ pip uninstall packagename ### List of Packages -To see the installed packages on our machine. We can use pip followed by list. +αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ pip αžαžΆαž˜αžŠαžΆαž“αžŠαŸ„αž™αž”αž‰αŸ’αž‡αžΈ ```sh pip list @@ -153,8 +150,7 @@ pip list ### Show Package -To show information about a package - +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αž‰αŸ’αž…αž”αŸ‹ ```sh pip show packagename ``` @@ -173,8 +169,7 @@ Requires: python-dateutil, pytz, numpy Required-by: ``` -If we want even more details, just add --verbose - +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž αžŸαžΌαž˜αž”αž“αŸ’αžαŸ‚αž˜ --verbose ```sh asabeneh@Asabeneh:~$ pip show --verbose pandas Name: pandas @@ -209,7 +204,7 @@ Entry-points: ### PIP Freeze -Generate installed Python packages with their version and the output is suitable to use it in a requirements file. A requirements.txt file is a file that should contain all the installed Python packages in a Python project. +αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš Python αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„ αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαžΈαžŸαŸαžšαžΈαžšαž”αžŸαŸ‹αžœαžΆ αž αžΎαž™ output αž‚αžΊαžŸαž˜αžŸαŸ’αžšαž”αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžΎαžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αž―αž€αžŸαžΆαžš requirements.txt αž‚αžΊαž‡αžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž˜αžΆαž“αž―αž€αžŸαžΆαžš Python αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„ Python αŸ” ```sh asabeneh@Asabeneh:~$ pip freeze @@ -223,9 +218,8 @@ Sphinx==1.2.2 The pip freeze gave us the packages used, installed and their version. We use it with requirements.txt file for deployment. ### Reading from URL - -By now you are familiar with how to read or write on a file located on you local machine. Sometimes, we would like to read from a website using url or from an API. -API stands for Application Program Interface. It is a means to exchange structured data between servers primarily as json data. To open a network connection, we need a package called _requests_ - it allows to open a network connection and to implement CRUD(create, read, update and delete) operations. In this section, we will cover only reading ore getting part of a CRUD. +αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž”αžΆαž“αžŸαŸ’αž‚αžΆαž›αŸ‹αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž’αžΆαž“αž¬αžŸαžšαžŸαŸαžšαž‘αŸ…αž›αžΎαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αžŸαŸ’αžαž·αžαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž–αŸαž›αžαŸ’αž›αŸ‡αž™αžΎαž„αž…αž„αŸ‹αž’αžΆαž“αž–αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžšαž˜αž½αž™ αžŠαŸ„αž™αž”αŸ’αžšαžΎ url αž¬αž–αžΈ API +API αž˜αžΆαž“αž“αŸαž™αžαžΆ Application Program Interface (αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ) αŸ” αžœαžΆαž‚αžΊαž‡αžΆαž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαžœαžΆαž„ server αž‡αžΆαž–αž·αžŸαŸαžŸαž‡αžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™ json αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αžΎαž€αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš, αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž―αž€αžŸαžΆαžšαž˜αž½αž™αžŠαŸ‚αž›αž αŸ…αžαžΆ _requests_ - αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž”αžΎαž€αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αž·αž„αž’αž“αž»αžœαžαŸ’αž CRUD (αž”αž„αŸ’αž€αžΎαž, αž’αžΆαž“, αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž“αž·αž„αž›αž»αž”) αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαŸ‚αž€αžΆαžšαž’αžΆαž“αžŠαŸ‚αž€αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž•αŸ’αž“αŸ‚αž€αž“αŸƒ CRUD αŸ” Let us install _requests_: @@ -233,12 +227,14 @@ Let us install _requests_: asabeneh@Asabeneh:~$ pip install requests ``` -We will see _get_, _status_code_, _headers_, _text_ and _json_ methods in _requests_ module: - - _get()_: to open a network and fetch data from url - it returns a response object - - _status_code_: After we fetched data, we can check the status of the operation (success, error, etc) - - _headers_: To check the header types - - _text_: to extract the text from the fetched response object - - _json_: to extract json data +αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰ _get_, _status_code_, _headers_, _text_ αž“αž·αž„ _json_ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸ…αž€αŸ’αž“αž»αž„ _requests_ module: + +- _get()_: αžŠαžΎαž˜αŸ’αž”αžΈαž”αžΎαž€αž”αžŽαŸ’αžαžΆαž‰αž“αž·αž„αž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈ url - αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ Reply Object +- _status_code_: αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž™αžΎαž„αž”αžΆαž“αž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™, αž™αžΎαž„αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš (αž‡αŸ„αž‚αž‡αŸαž™, αž€αŸ†αž αž»αžŸ, αž‡αžΆαžŠαžΎαž˜) +- _headers_: αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘ headers +- _text_: αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αž’αžαŸ’αžαž”αž‘αž–αžΈ object αž”αŸ’αžšαžαž·αž€αž˜αŸ’αž˜αž‘αžΆαž‰αž™αž€ +- _json_: αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™ json +- Let's read a txt file from this website, https://www.w3.org/TR/PNG/iso_8859-1.txt. ```py @@ -259,7 +255,7 @@ print(response.text) # gives all the text from the page {'date': 'Sun, 08 Dec 2019 18:00:31 GMT', 'last-modified': 'Fri, 07 Nov 2003 05:51:11 GMT', 'etag': '"17e9-3cb82080711c0;50c0b26855880-gzip"', 'accept-ranges': 'bytes', 'cache-control': 'max-age=31536000', 'expires': 'Mon, 07 Dec 2020 18:00:31 GMT', 'vary': 'Accept-Encoding', 'content-encoding': 'gzip', 'access-control-allow-origin': '*', 'content-length': '1616', 'content-type': 'text/plain', 'strict-transport-security': 'max-age=15552000; includeSubdomains; preload', 'content-security-policy': 'upgrade-insecure-requests'} ``` -- Let us read from an API. API stands for Application Program Interface. It is a means to exchange structure data between servers primarily a json data. An example of an API:https://restcountries.eu/rest/v2/all. Let us read this API using _requests_ module. +- αžŸαžΌαž˜αž±αŸ’αž™αž™αžΎαž„αž’αžΆαž“αž–αžΈ API αŸ” API αž˜αžΆαž“αž“αŸαž™αžαžΆ Application Program Interface (αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ) αŸ” αžœαžΆαž‡αžΆαž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαžœαžΆαž„ server αž‡αžΆαž–αž·αžŸαŸαžŸαž‘αž·αž“αŸ’αž“αž“αŸαž™ json αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒ API: αžŸαžΌαž˜αž™αžΎαž„αž’αžΆαž“ API αž“αŸαŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αŸ‰αžΌαžŒαž»αž› _requests_ ```py import requests @@ -323,15 +319,15 @@ print(countries[:1]) # we sliced only the first country, remove the slicing to 'pt': 'AfeganistΓ£o'}}] ``` -We use _json()_ method from response object, if the we are fetching JSON data. For txt, html, xml and other file formats we can use _text_. +αž™αžΎαž„αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš _json()_ αž–αžΈ Reply Object αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž€αŸ†αž–αž»αž„αž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™ JSON αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ txt, html, xml αž“αž·αž„αž―αž€αžŸαžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ _text_ αŸ” ### Creating a Package -We organize a large number of files in different folders and sub-folders based on some criteria, so that we can find and manage them easily. As you know, a module can contain multiple objects, such as classes, functions, etc. A package can contain one or more relevant modules. A package is actually a folder containing one or more module files. Let us create a package named mypackage, using the following steps: +αž™αžΎαž„ αžšαŸ€αž”αž…αŸ† αž―αž€αžŸαžΆαžš αž‡αžΆαž…αŸ’αžšαžΎαž“ αž“αŸ…αž€αŸ’αž“αž»αž„ αž€αŸ’αžšαžŠαžΆαžŸ αž“αž·αž„ αž€αŸ’αžšαžŠαžΆαžŸ αž’αž“αž» αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆ αžŠαŸ„αž™ αž•αŸ’αž’αŸ‚αž€αž›αžΎ αž›αž€αŸ’αžαžαžŽαŸ’αžŒ αž˜αž½αž™αž…αŸ†αž“αž½αž“ αžŠαžΎαž˜αŸ’αž”αžΈ αž™αžΎαž„ αž’αžΆαž… αžšαž€ αž“αž·αž„ αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ វអ αž”αžΆαž“ αžŠαŸ„αž™ αž„αžΆαž™αžŸαŸ’αžšαž½αž› αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αžŠαžΉαž„αž˜αŸ‰αžΌαžŠαž›αŸαžšαž’αžΆαž…αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž”αŸ’αžšαž—αŸαž‘αžŠαžΌαž…αž‡αžΆ Class, Function αž‡αžΆαžŠαžΎαž˜αŸ” αž€αž‰αŸ’αž…αž”αŸ‹αž˜αž½αž™αž’αžΆαž…αž˜αžΆαž“αž˜αž½αž™αž¬αž…αŸ’αžšαžΎαž“αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αŸ” Package αž‚αžΊαž‡αžΆ folder αžŠαŸ‚αž›αž˜αžΆαž“αž―αž€αžŸαžΆαžš module αž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αŸ” αžŸαžΌαž˜αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ mypackage αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‡αŸ†αž αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜: -Create a new folder named mypacakge inside 30DaysOfPython folder -Create an empty **__init__**.py file in the mypackage folder. -Create modules arithmetic.py and greet.py with following code: +αž”αž„αŸ’αž€αžΎαž folder αžαŸ’αž˜αžΈαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ mypacakge αž“αŸ…αž€αŸ’αž“αž»αž„ folder 30DaysOfPython +αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš ****init****.py αžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ folder mypackage αŸ” +αž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΌαžŒαž»αž› arithmetic.py αž“αž·αž„ greet.py αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΌαžŠαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜: ```py # mypackage/arithmetics.py @@ -370,8 +366,7 @@ def greet_person(firstname, lastname): return f'{firstname} {lastname}, welcome to 30DaysOfPython Challenge!' ``` -The folder structure of your package should look like this: - +αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ folder αžšαž”αžŸαŸ‹ package αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αž½αžšαž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡: ```sh ─ mypackage β”œβ”€β”€ __init__.py @@ -379,7 +374,7 @@ The folder structure of your package should look like this: └── greet.py ``` -Now let's open the python interactive shell and try the package we have created: +αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΎαž€ shell interactive python αž αžΎαž™αžŸαžΆαž€αž›αŸ’αž”αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž: ```sh asabeneh@Asabeneh:~/Desktop/30DaysOfPython$ python @@ -405,8 +400,9 @@ Type "help", "copyright", "credits" or "license" for more information. >>> ``` -As you can see our package works perfectly. The package folder contains a special file called **__init__**.py - it stores the package's content. If we put **__init__**.py in the package folder, python start recognizes it as a package. -The **__init__**.py exposes specified resources from its modules to be imported to other python files. An empty **__init__**.py file makes all functions available when a package is imported. The **__init__**.py is essential for the folder to be recognized by Python as a package. +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž”αžΆαž“ αž€αž‰αŸ’αž…αž”αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αž›αŸ’αž’αŸ” αž€αŸ’αžšαžŠαžΆαžŸαž€αž‰αŸ’αž…αž”αŸ‹αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ ****init****.py - αžœαžΆαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž•αŸ’αž‘αž»αž€αžšαž”αžŸαŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αžŠαžΆαž€αŸ‹ ****init****.py αž“αŸ…αž€αŸ’αž“αž»αž„ folder package, python start αž“αžΉαž„αžŸαŸ’αž‚αžΆαž›αŸ‹αžœαžΆαž‡αžΆ package αŸ” + +****init****.py αž”αž„αŸ’αž αžΆαž‰αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž–αžΈαž˜αŸ‰αžΌαžŒαž»αž›αžšαž”αžŸαŸ‹αžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž“αžΆαŸ†αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš Python αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž―αž€αžŸαžΆαžš ****init****.py αžŠαŸ‚αž›αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚αžŸαž»αž‘αŸ’αž’αžŸαžΉαž„αžαŸ‚ ****init****.py αž‚αžΊαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ folder αžŠαŸ‚αž› Python αž’αžΆαž…αž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αžαžΆαž‡αžΆ packages αŸ” ### Further Information About Packages @@ -439,20 +435,7 @@ The **__init__**.py exposes specified resources from its modules to be imported - requests: is a package which we can use to send requests to a server(GET, POST, DELETE, PUT) - _pip install requests_ -πŸŒ• You are always progressing and you are a head of 20 steps to your way to greatness. Now do some exercises for your brain and muscles. - -## Exercises: Day 20 -1. Read this url and find the 10 most frequent words. romeo_and_juliet = 'http://www.gutenberg.org/files/1112/1112.txt' -2. Read the cats API and cats_api = 'https://api.thecatapi.com/v1/breeds' and find : - 1. the min, max, mean, median, standard deviation of cats' weight in metric units. - 2. the min, max, mean, median, standard deviation of cats' lifespan in years. - 3. Create a frequency table of country and breed of cats -3. Read the [countries API](https://restcountries.eu/rest/v2/all) and find - 1. the 10 largest countries - 2. the 10 most spoken languages - 3. the total number of languages in the countries API -4. UCI is one of the most common places to get data sets for data science and machine learning. Read the content of UCL (https://archive.ics.uci.edu/ml/datasets.php). Without additional libraries it will be difficult, so you may try it with BeautifulSoup4 πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ diff --git a/21_Day_Classes_and_objects/21_classes_and_objects.md b/21_Day_Classes_and_objects/21_classes_and_objects.md index 9876cfb55..f3a1c70e4 100644 --- a/21_Day_Classes_and_objects/21_classes_and_objects.md +++ b/21_Day_Classes_and_objects/21_classes_and_objects.md @@ -21,27 +21,21 @@ - [πŸ“˜ Day 21](#-day-21) - [Classes and Objects](#classes-and-objects) - [Creating a Class](#creating-a-class) - - [Creating an Object](#creating-an-object) + - [αž”αž„αŸ’αž€αžΎαž object](#αž”αž„αŸ’αž€αžΎαž-object) - [Class Constructor](#class-constructor) - [Object Methods](#object-methods) - [Object Default Methods](#object-default-methods) - - [Method to Modify Class Default Values](#method-to-modify-class-default-values) + - [αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž”αŸ’αžšαŸ‚αžαž˜αŸ’αž›αŸƒ default αžšαž”αžŸαŸ‹ class](#αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž”αŸ’αžšαŸ‚αžαž˜αŸ’αž›αŸƒ-default-αžšαž”αžŸαŸ‹-class) - [Inheritance](#inheritance) - [Overriding parent method](#overriding-parent-method) - - [πŸ’» Exercises: Day 21](#-exercises-day-21) - - [Exercises: Level 1](#exercises-level-1) - - [Exercises: Level 2](#exercises-level-2) - - [Exercises: Level 3](#exercises-level-3) # πŸ“˜ Day 21 ## Classes and Objects +Python αž‚αžΊαž‡αžΆ αž—αžΆαžŸαžΆ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αžŠαŸ‚αž› αž˜αžΆαž“ αž‚αŸ„αž›αžŠαŸ… αž‘αŸ…αž›αžΎ object αŸ” αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Python αž‚αžΊαž‡αžΆobjectαž˜αž½αž™ αžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž· αž“αž·αž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αŸ” αž…αŸ†αž“αž½αž“, string, list, dictionary, tuple, set αž‡αžΆαžŠαžΎαž˜ αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž‚αžΊαž‡αžΆ object αžšαž”αžŸαŸ‹ class αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αŸ” αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž class αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž object αž€αž˜αŸ’αžšαž·αž αž‚αžΊαžŠαžΌαž…αž‡αžΆ object constructor ឬ " blueprint" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαž object αŸ” αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž class αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž object αž€αž˜αŸ’αžšαž·αžαž€αŸ†αžŽαžαŸ‹αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž· αž“αž·αž„αž’αžΆαž€αž”αŸ’αž”αž€αž·αžšαž·αž™αžΆαžšαž”αžŸαŸ‹αžœαžαŸ’αžαž» αžαžŽαŸˆαžŠαŸ‚αž›objectαžœαž·αž‰αžαŸ†αžŽαžΆαž„αž±αŸ’αž™αž€αž˜αŸ’αžšαž·αžαŸ” -Python is an object oriented programming language. Everything in Python is an object, with its properties and methods. A number, string, list, dictionary, tuple, set etc. used in a program is an object of a corresponding built-in class. We create class to create an object. A class is like an object constructor, or a "blueprint" for creating objects. We instantiate a class to create an object. The class defines attributes and the behavior of the object, while the object, on the other hand, represents the class. - -We have been working with classes and objects right from the beginning of this challenge unknowingly. Every element in a Python program is an object of a class. -Let us check if everything in python is a class: - +αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αžœαžαŸ’αžαž» αžαžΆαŸ†αž„αž–αžΈαžŠαžΎαž˜αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžˆαž˜αž“αŸαŸ‡ αžŠαŸ„αž™αž˜αž·αž“αžŠαžΉαž„αžαŸ’αž›αž½αž“ αž‚αŸ’αžšαž”αŸ‹αž’αŸαž‘αž·αž…αžαŸ’αžšαžΌαž“αž·αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Python αž‚αžΊαž‡αžΆαž’αžΆαžœαž™αžΊαžαž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹αŸ” +αžŸαžΌαž˜αž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Python αž‚αžΊαž‡αžΆ class αž¬αž‘αŸ: ```py asabeneh@Asabeneh:~$ python Python 3.9.6 (default, Jun 28 2021, 15:26:21) @@ -72,7 +66,7 @@ Type "help", "copyright", "credits" or "license" for more information. ### Creating a Class -To create a class we need the key word **class** followed by the name and colon. Class name should be **CamelCase**. +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž class αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αžΆαž€αŸ’αž™ Keyword **class** αžαžΆαž˜αž€αŸ’αžšαŸ„αž™αžˆαŸ’αž˜αŸ„αŸ‡ αž“αž·αž„ colon αŸ” αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹αžšαŸ€αž“αž‚αž½αžšαž‡αžΆ **CamelCase**αŸ” ```sh # syntax @@ -92,9 +86,9 @@ print(Person) <__main__.Person object at 0x10804e510> ``` -### Creating an Object +### αž”αž„αŸ’αž€αžΎαž object -We can create an object by calling the class. +αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž object αžŠαŸ„αž™αž αŸ… class ```py p = Person() @@ -103,7 +97,8 @@ print(p) ### Class Constructor -In the examples above, we have created an object from the Person class. However, a class without a constructor is not really useful in real applications. Let us use constructor function to make our class more useful. Like the constructor function in Java or JavaScript, Python has also a built-in **__init__**() constructor function. The **__init__** constructor function has self parameter which is a reference to the current instance of the class +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎαž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž object αž–αžΈ class Person αŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™, αž€αž˜αŸ’αžšαž·αžαžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“ constructor αž˜αž·αž“αžŸαžΌαžœαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž·αžαž‘αŸαŸ” αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž€αž˜αŸ’αžšαž·αž constructor αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™ class αžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αŸ” αžŠαžΌαž… Function constructor αž€αŸ’αž“αž»αž„ Java ឬ JavaScript Python αž€αŸαž˜αžΆαž“ Function constructor ****init****() αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž•αž„αžŠαŸ‚αžš αŸ” αžαž½αž“αžΆαž‘αžΈ constructor ****init**** αž˜αžΆαž“ self parameter αžŠαŸ‚αž›αž‡αžΆαž€αžΆαžšαž’αžαŸ’αžαžΆαž’αž·αž”αŸ’αž”αžΆαž™αž‘αŸ…αž“αžΉαž„αž€αžšαžŽαžΈαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹ + **Examples:** ```py @@ -123,8 +118,7 @@ Asabeneh <__main__.Person object at 0x2abf46907e80> ``` -Let us add more parameters to the constructor function. - +αžŸαžΌαž˜αž™αžΎαž„αž”αž“αŸ’αžαŸ‚αž˜ parameter αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž‘αŸ…αž›αžΎ function constructor αŸ” ```py class Person: def __init__(self, firstname, lastname, age, country, city): @@ -154,7 +148,7 @@ Helsinki ### Object Methods -Objects can have methods. The methods are functions which belong to the object. +αžœαžαŸ’αžαž»αž’αžΆαž…αž˜αžΆαž“αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž αž‚αžΊαž‡αžΆαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž‡αžΆαžšαž”αžŸαŸ‹αžœαžαŸ’αžαž»αŸ” **Example:** @@ -180,7 +174,7 @@ Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland ### Object Default Methods -Sometimes, you may want to have a default values for your object methods. If we give default values for the parameters in the constructor, we can avoid errors when we call or instantiate our class without parameters. Let's see how it looks: +αž–αŸαž›αžαŸ’αž›αŸ‡, αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž…αž„αŸ‹αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒ default αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžšαž”αžŸαŸ‹ object αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž”αŸ’αžšαžŸαž·αž“ αž”αžΎ αž™αžΎαž„ αž•αŸ’αžαž›αŸ‹ αžαž˜αŸ’αž›αŸƒ αž‡αžΆ αž’αž˜αŸ’αž˜αžαžΆ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Parameters αž€αŸ’αž“αž»αž„ constructor αž™αžΎαž„ αž’αžΆαž… αž‡αŸ€αžŸαžœαžΆαž„ αž€αŸ†αž αž»αžŸ αž“αŸ…αž–αŸαž› αžŠαŸ‚αž› αž™αžΎαž„ αž αŸ… ឬ αž”αž„αŸ’αž€αžΎαž instance αžšαž”αžŸαŸ‹ class αžŠαŸ„αž™ αž‚αŸ’αž˜αžΆαž“ Parameters αŸ” αžŸαžΌαž˜αž˜αžΎαž›αžαžΆαžœαžΆαž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž˜αŸ’αžŠαŸαž…: **Example:** @@ -208,9 +202,9 @@ Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland. John Doe is 30 years old. He lives in Noman city, Nomanland. ``` -### Method to Modify Class Default Values +### αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž”αŸ’αžšαŸ‚αžαž˜αŸ’αž›αŸƒ default αžšαž”αžŸαŸ‹ class -In the example below, the person class, all the constructor parameters have default values. In addition to that, we have skills parameter, which we can access using a method. Let us create add_skill method to add skills to the skills list. +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜, αž˜αž“αž»αžŸαŸ’αžŸαžαŸ’αž“αžΆαž€αŸ‹, αž‚αŸ’αžšαž”αŸ‹αž‚αŸ†αžšαžΌ constructor αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž‡αžΆαž˜αž»αž“αžŸαž·αž“αŸ” αž€αŸ’αžšαŸ…αž–αžΈαž“αŸαŸ‡αž™αžΎαž„αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαŸ” αžŸαžΌαž˜αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž add_skill method αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜ skills αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈ skills ```py class Person: @@ -248,8 +242,8 @@ John Doe is 30 years old. He lives in Noman city, Nomanland. ### Inheritance -Using inheritance we can reuse parent class code. Inheritance allows us to define a class that inherits all the methods and properties from parent class. The parent class or super or base class is the class which gives all the methods and properties. Child class is the class that inherits from another or parent class. -Let us create a student class by inheriting from person class. +αžŠαŸ„αž™αž”αŸ’αžšαžΎ inheritance αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαž‘αžΎαž„αžœαž·αž‰αž€αžΌαžŠαžαŸ’αž“αžΆαž€αŸ‹αžͺαž–αž»αž€ αž€αžΆαžšαž‘αž‘αž½αž›αž€αŸαžšαžŠαŸ†αžŽαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž€αŸ†αžŽαžαŸ‹αž›αŸ†αžŠαžΆαž”αŸ‹αžŠαŸ‚αž›αž‘αž‘αž½αž›αž€αŸαžšαžŠαŸ†αžŽαŸ‚αž›αž‚αŸ’αžšαž”αŸ‹αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™ αž“αž·αž„αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž–αžΈαž›αŸ†αžŠαžΆαž”αŸ‹αžͺαž–αž»αž€αž˜αŸ’αžαžΆαž™αŸ” αž€αž˜αŸ’αžšαž·αžαž˜αŸ ឬ super ឬ base class αž‚αžΊαž‡αžΆαž€αž˜αŸ’αžšαž·αžαžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš αž“αž·αž„αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” Child class αž‚αžΊαž‡αžΆ class αžŠαŸ‚αž›αž‘αž‘αž½αž›αž™αž€αž–αžΈ class αž•αŸ’αžŸαŸαž„ ឬ parent class αŸ” +αžŸαžΌαž˜αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžclassαžŸαž·αžŸαŸ’αžŸ αžŠαŸ„αž™αž‘αž‘αž½αž›αž™αž€αž–αžΈclassαž˜αž“αž»αžŸαŸ’αžŸαŸ” ```py class Student(Person): @@ -280,8 +274,8 @@ Lidiya Teklemariam is 28 years old. He lives in Espoo, Finland. ['Organizing', 'Marketing', 'Digital Marketing'] ``` -We did not call the **__init__**() constructor in the child class. If we didn't call it then we can still access all the properties from the parent. But if we do call the constructor we can access the parent properties by calling _super_. -We can add a new method to the child or we can override the parent class methods by creating the same method name in the child class. When we add the **__init__**() function, the child class will no longer inherit the parent's **__init__**() function. +αž™αžΎαž„αž˜αž·αž“αž”αžΆαž“αž αŸ… constructor ****init****( αž“αŸ…αž€αŸ’αž“αž»αž„ child class αž‘αŸ αž”αžΎαžŸαž·αž“αž‡αžΆαž™αžΎαž„αž˜αž·αž“αž αŸ…αžœαžΆαž‘αŸ αž™αžΎαž„αž“αŸ…αžαŸ‚αž’αžΆαž…αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž‘αžΆαŸ†αž„αž’αžŸαŸ‹parent classαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αžΎαž™αžΎαž„αž αŸ… constructor αž™αžΎαž„αž’αžΆαž…αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ properties parent αžŠαŸ„αž™αž αŸ… _super_ +αž™αžΎαž„αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αžαŸ’αž˜αžΈαž‘αŸ…αž›αžΎαž€αžΌαž“ αž¬αž™αžΎαž„αž’αžΆαž… override αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αžαŸ’αž“αžΆαž€αŸ‹αž˜αŸ αžŠαŸ„αž™αž”αž„αŸ’αž€αžΎαžαžˆαŸ’αž˜αŸ„αŸ‡αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαž€αŸ‹αž€αžΌαž“αŸ” When we add the ****init****() function, the child class will no longer inherit the parent's ****init****() function. ### Overriding parent method @@ -315,54 +309,9 @@ Eyob Yetayeh is 30 years old. He lives in Helsinki, Finland. Lidiya Teklemariam is 28 years old. She lives in Espoo, Finland. ['Organizing', 'Marketing', 'Digital Marketing'] ``` +αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ super() built-in function αž¬αžˆαŸ’αž˜αŸ„αŸ‡αžͺαž–αž»αž€αž˜αŸ’αžαžΆαž™ Person αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž™αž€αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž· αž“αž·αž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž–αžΈparentαžšαž”αžŸαŸ‹αžœαžΆαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎαž™αžΎαž„ override αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšparentαŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž€αžΌαž“αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžαž»αžŸαž‚αŸ’αž“αžΆαžœαžΆαž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžαžΆ αžαžΎαž—αŸαž‘αž‡αžΆαž”αŸ’αžšαž»αžŸαž¬αžŸαŸ’αžšαžΈ αž αžΎαž™αž€αŸ†αžŽαžαŸ‹αž–αžΆαž€αŸ’αž™αž…αžΆαžαŸ‹αž‘αž»αž€αžŠαŸ‚αž›αžŸαž˜αžšαž˜αŸ’αž™ (He/She) αŸ” -We can use super() built-in function or the parent name Person to automatically inherit the methods and properties from its parent. In the example above we override the parent method. The child method has a different feature, it can identify, if the gender is male or female and assign the proper pronoun(He/She). - -πŸŒ• Now, you are fully charged with a super power of programming. Now do some exercises for your brain and muscles. - -## πŸ’» Exercises: Day 21 - -### Exercises: Level 1 - -1. Python has the module called _statistics_ and we can use this module to do all the statistical calculations. However, to learn how to make function and reuse function let us try to develop a program, which calculates the measure of central tendency of a sample (mean, median, mode) and measure of variability (range, variance, standard deviation). In addition to those measures, find the min, max, count, percentile, and frequency distribution of the sample. You can create a class called Statistics and create all the functions that do statistical calculations as methods for the Statistics class. Check the output below. - -```py -ages = [31, 26, 34, 37, 27, 26, 32, 32, 26, 27, 27, 24, 32, 33, 27, 25, 26, 38, 37, 31, 34, 24, 33, 29, 26] - -print('Count:', data.count()) # 25 -print('Sum: ', data.sum()) # 744 -print('Min: ', data.min()) # 24 -print('Max: ', data.max()) # 38 -print('Range: ', data.range() # 14 -print('Mean: ', data.mean()) # 30 -print('Median: ', data.median()) # 29 -print('Mode: ', data.mode()) # {'mode': 26, 'count': 5} -print('Standard Deviation: ', data.std()) # 4.2 -print('Variance: ', data.var()) # 17.5 -print('Frequency Distribution: ', data.freq_dist()) # [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)] -``` - -```sh -# you output should look like this -print(data.describe()) -Count: 25 -Sum: 744 -Min: 24 -Max: 38 -Range: 14 -Mean: 30 -Median: 29 -Mode: (26, 5) -Variance: 17.5 -Standard Deviation: 4.2 -Frequency Distribution: [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)] -``` - -### Exercises: Level 2 - -1. Create a class called PersonAccount. It has firstname, lastname, incomes, expenses properties and it has total_income, total_expense, account_info, add_income, add_expense and account_balance methods. Incomes is a set of incomes and its description. The same goes for expenses. -### Exercises: Level 3 πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ diff --git a/Khmer/01_Day_Introduction/helloworld.py b/Khmer/01_Day_Introduction/helloworld.py new file mode 100644 index 000000000..bb953f361 --- /dev/null +++ b/Khmer/01_Day_Introduction/helloworld.py @@ -0,0 +1,21 @@ +# αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† +# αžαŸ’αž„αŸƒαž‘αžΈ 1 - 30DaysOfPython Challenge + +print(2 + 3) # addition αž”αžΌαž€(+) +print(3 - 1) # substraction αžŠαž€(-) +print(2 * 3) # multiplication αž‚αž»αžŽ(*) +print(3 / 2) # division αž…αŸ‚αž€(/) +print(3 ** 2) # exponential αž’αŸŠαž·αž…αžŸαŸ’αž”αŸ‰αžΌαžŽαž„αŸ‹αžŸαŸ’αž™αŸ‚αž›(**) +print(3 % 2) # modulus αž˜αŸ‰αžΌαžŒαž»αž›(%) +print(3 // 2) # floor divsion operator αž…αŸ‚αž€αž™αž€αž…αŸ†αž“αž½αž“αž‚αžαŸ‹(//) + +# αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ + +print(type(10)) # Int = αž…αŸ†αž“αž½αž“αž‚αžαŸ‹ +print(type(3.14)) # Float = αž‘αžŸαž—αžΆαž‚ +print(type(1 + 3j)) # Complexx αž…αŸ†αž“αž½αž“αž€αž»αŸ†αž•αŸ’αž›αž·αž… +print(type('Asabeneh')) # String = αž‘αž·αž“αŸ’αž“αŸαž™αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžš +print(type([1, 2, 3])) # List = αž”αž‰αŸ’αž‡αžΈ αžŠαŸ‚αž›αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹, αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžŠαžΌαžš, αž“αž·αž„αž’αžΆαž…αžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αžΆαž“ +print(type({'name':'Asabeneh'})) # Dictionary = αž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαž˜αŸ’αž›αŸƒαž“αž·αž„αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αžœαžΆ αžŠαŸ‚αž›αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹, αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžŠαžΌαžš, αž”αž“αŸ’αžαŸ‚αž˜αž·αž“αž’αžΆαž…αžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αžΆαž“ +print(type({9.8, 3.14, 2.7})) # Set = αž”αž‰αŸ’αž…αžΈ αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹ αž“αž·αž„ αž˜αž·αž“αž’αžΆαž…αžŠαžΌαž…αž‚αŸ’αž“αžΆ +print(type((9.8, 3.14, 2.7))) # Tuple = αž”αž‰αŸ’αž…αžΈ αžŠαŸ‚αž›αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹, αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžαžΌαžšαž”αžΆαž“ diff --git a/Khmer/02_Day_Variables_builtin_functions/02_Day_Variables_builtin_functions.md b/Khmer/02_Day_Variables_builtin_functions/02_Day_Variables_builtin_functions.md new file mode 100644 index 000000000..78f5ce27f --- /dev/null +++ b/Khmer/02_Day_Variables_builtin_functions/02_Day_Variables_builtin_functions.md @@ -0,0 +1,256 @@ +
+

30 Days Of Python: Day 2 - Variables, Builtin Functions

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 1](../Readme_Khmer_Ver.md) | [Day 3 >>](../03_Day_Operators/03_Day_Operators.md) + +![30DaysOfPython](./../../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 2](#-day-2) + - [Built in functions](#built-in-functions) + - [Variables](#variables) + - [Declaring Multiple Variable in a Line](#declaring-multiple-variable-in-a-line) + - [Data Types](#data-types) + - [Checking Data types and Casting](#checking-data-types-and-casting) + - [Numbers](#numbers) + +# πŸ“˜ Day 2 + +## Built in functions + +αž“αŸ…αž€αŸ’αž“αž»αž„ Python αž™αžΎαž„αž˜αžΆαž“αž’αž“αž»αž‚αž˜αž“αŸ αžŠαŸ‚αž›αž‚αŸαž”αž„αŸ’αž€αžΎαžαž˜αž€αžŸαŸ’αžšαŸαž…αž…αŸ’αžšαžΎαž“αŸ” αž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαŸαž… αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αž‡αžΆαžŸαž€αž› αžŠαŸ„αž™αž˜αž·αž“αž”αžΆαž…αŸ‹αž“αžΆαŸ†αž…αžΌαž›αž–αžΈαžαžΆαž„αž€αŸ’αžšαŸ…αž˜αž€αž‘αŸαŸ” αž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαŸαž… αžŠαŸ‚αž›αž‚αŸαž’αŸ’αž›αžΆαž”αŸ‹αž”αŸ’αžšαžΎαž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž‚αŸαž‚αžΊ αŸ– +_print()_, _len()_, _type()_, _int()_, _float()_, _str()_, _input()_, _list()_, _dict()_, _min()_, _max()_, _sum()_, _sorted()_, _open()_, _file()_, _help()_, and _dir()_ +αž“αŸ…αž€αŸ’αžšαŸ„αž˜αž‡αžΆαžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž˜αžΆαž“αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαŸαž…αž”αžΆαž“αž˜αž€αž‘αžΈ [python documentation](https://docs.python.org/3.9/library/functions.html). + +![Built-in Functions](../images/builtin-functions.png) + +αž™αžΎαž„αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αžΎαž€ Python shell αž“αž·αž„αž™αž€αž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαŸαž…αž˜αž€αž”αŸ’αžšαžΎαŸ” + +![Built-in functions](../images/builtin-functions_practice.png) + +αžŸαžΆαž€αž αžΆαžαŸ‹αž”αŸ’αžšαžΎαž’αž“αž»αž‚αž˜αž“αŸαž•αŸ’αžŸαŸαž„αŸ—αž‘αŸ€αžαŸ” + +![Help and Dir Built in Functions](../images/help_and_dir_builtin.png) + +αžŠαžΌαž…αž™αžΎαž„αžƒαžΎαž‰αžαžΆαž„αž›αžΎ Python αž˜αžΆαž“αž–αžΆαž€αŸ’αž™αžŠαŸ‚αž›αžŸαŸ†αžαžΆαž“αŸ‹αžαŸ’αž›αžΆαžŸαŸ‹αžŠαŸ‚αž›αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αŸ” + +αž™αžΎαž„αž‚αž·αžαžαžΆ αž’αŸ’αž“αž€αž™αž›αŸ‹αž’αŸ†αž–αžΈαž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαŸαž…αž αžΎαž™αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž’αžΆαž…αŸ‹αž”αŸ’αžšαžΎαž˜αž½αž™αž‘αŸ€αž αž αžΎαž™αž™αžΎαž„αž’αžΆαž…αž“αžΆαŸ†αž‘αŸ…αž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž‘αŸ€αžαŸ” + +![Min Max Sum](../images/builtin-functional-final.png) + +## Variables + +ធថេរ αž’αžΆαž…αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαŸ” αž‚αŸαžŽαŸ‚αž“αžΆαŸ†αž’αŸ„αž™αž”αŸ’αžšαžΎαž’αžαŸαžšαžŽαžΆαžŠαŸ‚αž›αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αžΆαŸ†αž“αž·αž„αžŸαŸ’αžšαž½αž›αž™αž›αŸ‹αŸ” αž’αžαŸαžšαž˜αž·αž“αž’αžΆαž…αž˜αžΆαž“αž›αŸαžαž“αŸ…αžαžΆαž„αž˜αž»αž, αžαž½αž’αž€αŸ’αžŸαžšαž–αž·αžŸαŸαžŸ, αž“αž·αž„αžŸαž αžŸαž‰αŸ’αž‰αžΆαŸ” αž’αžαŸαžšαžαŸ’αž›αŸ‡αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ’αž›αžΈ(x, y, z)​ αžαŸ’αž›αŸ‡αž‘αŸ€αžαžœαŸ‚αž„αž αžΎαž™αžŸαŸ’αžšαž½αž›αž™αž›αŸ‹(firstname, lastname, age, country)αŸ” + +αž…αŸ’αž”αžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ„αž™αžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžš + +- αžαŸ’αžšαžΌαžœαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž’αž„αŸ’αžŸαžš ឬ "_" +- αž˜αž·αž“αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž›αŸαž +- αž’αžΆαž…αž”αŸ’αžšαžΎαžαŸ‚αž’αž„αŸ’αžŸαžš A-Z, αž›αŸαž 0-9, αž“αž·αž„ "\_" +- αž€αžΆαžšαž”αŸ’αžšαžΎαž’αž€αŸ’αžŸαžšαž’αŸ†αžαžΌαž…αžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αŸ” (firstname, Firstname, FirstName and FIRSTNAME) αž‚αžΊαžαž»αžŸαž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” + +αž™αžΎαž„αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž„αŸ’αž€αžΎαžαž’αžαŸαžšαžαžΆαž˜αž…αŸ’αž”αžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡ + +```shell +firstname +lastname +age +country +city +first_name +last_name +capital_city +_if +year_2021 +year2021 +current_year_2021 +birth_year +num1 +num2 +``` + +αž’αžαŸαžšαžŠαŸ‚αž›αžαž»αžŸαž…αŸ’αž”αžΆαž”αŸ‹ + +```shell +first-name +first@name +first$name +num-1 +1num +``` + +αž™αžΎαž„αž‚αž½αžšαž”αŸ’αžšαžΎαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž”αŸ’αžšαžΎαž…αŸ’αžšαžΎαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŠαŸ‚αž›αž”αŸ’αžšαžΎ PythonαŸ” αž™αžΎαž„αž‚αž½αžšαž”αŸ’αžšαžΎ snake use(snake_case) αžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαžŠαžΆαž€αŸ‹αžŸαž‰αŸ’αž‰αžΆ "_" αž€αŸ’αžšαŸ„αž™αž–αžΆαž€αŸ’αžšαž˜αž½αž™αŸ— αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž–αžΆαž€αŸ’αžšαž…αŸ’αžšαžΎαž“ (ex. first_name, last_name, engine_rotation_speed) + +αž™αžΎαž„αž’αžΆαž…αžŠαžΆαž€αŸ‹αžαž˜αŸ’αž›αŸƒαž…αžΌαž›αž’αžαŸαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαž‰αŸ’αž‰αžΆαžŸαŸ’αž˜αžΎαžšαŸ” + +```py +# αž’αžαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Python +first_name = 'Hanni' +last_name = 'Pham' +country = 'Vietnam' +city = 'Hanoi' +age = 19 +is_married = False +skills = ['Dancing', 'Singing', 'Variety Show', 'Modelling', 'Being a cutie'] +person_info = { + 'firstname':'Hanni', + 'lastname':'Pham', + 'country':'Vietnam', + 'city':'Hanoi' + } +``` + +αžαŸ„αŸ‡ αžŸαžΆαž€αž”αŸ’αžšαžΎαž’αž“αž»αž‚αž˜αž“αŸ _print()_ αž“αž·αž„ _len()_ αŸ” αž’αž“αž»αž‚αž˜αž“αŸ print αž’αžΆαž…αž™αž€αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αžŠαžΆαž€αŸ‹αž…αžΌαž›αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αŸ” αž™αžΎαž„αžŠαžΆαž€αŸ‹αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž…αžΌαž›αž’αž“αž»αž‚αž˜αž“αŸαž“αŸ…αž€αŸ’αž“αž»αž„αžœαž„αŸ‹αž€αŸ’αžšαž…αž€αžšαž”αžŸαŸ‹αžœαžΆαŸ” +argument = αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹ + +**Example** + +```py +print('Hello, World!') # αž’αž„αŸ’αžŸαžš Hello, World! αž‡αžΆαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹ +print('Hello',',', 'World','!') # αžœαžΆαž’αžΆαž…αž™αž€αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž…αžΌαž›αž…αŸ’αžšαžΎαž“ +print(len('Hello, World!')) # αž€αŸ’αž“αž»αž„αž“αŸαŸ‡αž™αž€αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž…αžΌαž›αžαŸ‚αž˜αž½αž™ +``` + +αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαž’αž“αž»αž‚αž˜αž“αŸ print αž“αŸαŸ‡αž“αž·αž„αžšαž€αž”αŸ’αžšαžœαŸ‚αž„αž’αžαŸαžšαž“αŸ…αžαžΆαž„αž›αžΎ + +**Example:** + +```py +# αž”αž„αŸ’αž αžΆαž‰αžαž˜αŸ’αž›αŸƒαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸαžš + +print('First name:', first_name) +print('First name length:', len(first_name)) +print('Last name: ', last_name) +print('Last name length: ', len(last_name)) +print('Country: ', country) +print('City: ', city) +print('Age: ', age) +print('Married: ', is_married) +print('Skills: ', skills) +print('Person information: ', person_info) +``` + +### Declaring Multiple Variable in a Line + +αž’αžαŸαžšαž…αŸ’αžšαžΎαž“αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž”αžΆαž“αž“αŸ…αž‡αž½αžšαžαŸ‚αž˜αž½αž™ + +**Example:** + +```py +first_name, last_name, country, age, is_married = 'Hanni', 'Pham', 'Hanoi', 19, False + +print(first_name, last_name, country, age, is_married) +print('First name:', first_name) +print('Last name: ', last_name) +print('Country: ', country) +print('Age: ', age) +print('Married: ', is_married) +``` + +αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαžŠαŸ„αž™αž”αŸ’αžšαžΎαž’αž“αž»αž‚αž˜αž“αŸ _input()_ αž™αžΎαž„αž’αžΆαž…αž…αžΆαžαŸ‹αžαžΆαŸ†αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αž…αžΌαž›αž€αŸ’αž“αž»αž„αž’αžαŸαžš first_name αž“αž·αž„ age + +**Example:** + +```py +first_name = input('What is your name: ') +age = input('How old are you? ') + +print(first_name) +print(age) +``` + +## Data Types + +αž“αŸ… Python αž˜αžΆαž“αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αŸ’αžšαžΎαž“αŸ” αž”αžΎαž…αž„αŸ‹αžŠαžΉαž„αžαžΆαž’αžαŸαžšαž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ’αžœαžΈ αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαž’αž“αž»αž‚αž˜αž“αŸ _type_ αŸ” + +## Checking Data types and Casting + +- αž™αžΎαž„αž”αŸ’αžšαžΎαž’αž“αž»αž‚αž˜αž“αŸ _type_ + + **Example:** + +```py +# Different python data types +# Let's declare variables with various data types + +first_name = 'Hanni' # str +last_name = 'Pham' # str +country = 'Vietnam' # str +city= 'Hanoi' # str +age = 19 # int + +# Printing out types +print(type('Hanni')) # str +print(type(first_name)) # str +print(type(10)) # int +print(type(3.14)) # float +print(type(1 + 1j)) # complex +print(type(True)) # bool +print(type([1, 2, 3, 4])) # list +print(type({'name':'Asabeneh','age':250, 'is_married':250})) # dict +print(type((1,2))) # tuple +print(type(zip([1,2],[3,4]))) # set +``` + +- Casting: αž”αŸ’αžαžΌαžšαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž½αž™αž‘αŸ…αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž½αž™αž‘αŸ€αžαŸ” αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ _int()_, _float()_, _str()_, _list_, _set_αŸ” αž“αŸ…αž–αŸαž›αž™αžΎαž„αž‚αž·αžαž›αŸαž, αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžαžΌαžšαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž’αž€αŸ’αžŸαžšαž›αŸαž(string numbers) αž‘αŸ… int ឬ float αž˜αž»αž“αŸ” αž”αžΎαž…αž„αŸ‹αžŠαžΆαž€αŸ‹αž›αŸαžαž“αž·αž„αž’αž€αŸ’αžŸαžšαž…αžΌαž›αž‚αŸ’αž“αžΆ, αž™αžΎαž„αž‚αž½αžšαž”αŸ’αžαžΌαžšαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž›αŸαž number αž‘αŸ…αž’αž€αŸ’αžŸαžš string αž˜αž»αž“αŸ” + + **Example:** + +```py +# int to float +num_int = 10 +print('num_int',num_int) # 10 +num_float = float(num_int) +print('num_float:', num_float) # 10.0 + +# float to int +gravity = 9.81 +print(int(gravity)) # 9 + +# int to str +num_int = 10 +print(num_int) # 10 +num_str = str(num_int) +print(num_str) # '10' + +# str to int or float +num_str = '10.6' +print('num_int', int(num_str)) # 10 +print('num_float', float(num_str)) # 10.6 + +# str to list +first_name = 'Asabeneh' +print(first_name) # 'Asabeneh' +first_name_to_list = list(first_name) +print(first_name_to_list) # ['A', 's', 'a', 'b', 'e', 'n', 'e', 'h'] +``` + +## Numbers + +αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αŸαž + +1. Integers αž…αŸ†αž“αž½αž“αž‚αžαŸ‹: Integer(negative, zero and positive) numbers + Ex: + ... -3, -2, -1, 0, 1, 2, 3 ... + +2. Floating Point Numbers αž‘αžŸαž—αžΆαž‚(Decimal numbers) + Ex: + ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ... + +3. Complex Numbers αž…αŸ†αž“αž½αž“αž€αž»αŸ†αž•αŸ’αž›αž·αž… + Ex: + 1 + j, 2 + 4j, 1 - 1j + +αž’αž”αž’αžšαžŸαžΆαž‘αžš αž’αŸ’αž“αž€αž”αžΆαž“αžšαŸ€αž“αž…αž”αŸ‹αžαŸ’αž„αŸƒαž‘αžΈαŸ’αž αžΎαž™αŸ” diff --git a/Khmer/02_Day_Variables_builtin_functions/variables.py b/Khmer/02_Day_Variables_builtin_functions/variables.py new file mode 100644 index 000000000..f5580984e --- /dev/null +++ b/Khmer/02_Day_Variables_builtin_functions/variables.py @@ -0,0 +1,40 @@ +# Variable = ធថេរ ឬ αž’αžαŸαžšαž€αžΌαžŠ +# ធថេរ αž“αŸ…αž€αŸ’αž“αž»αž„ Python + +first_name = 'Hanni' +last_name = 'Pham' +country = 'Vietnam' +city = 'Hanoi' +age = 19 +is_married = False +skills = ['Dancing', 'Singing', 'Variety Show', 'Modelling', 'Being a cutie'] +person_info = { + 'firstname':'Hanni', + 'lastname':'Pham', + 'country':'Vietnam', + 'city':'Hanoi' + } + +# αž”αž„αŸ’αž αžΆαž‰αžαž˜αŸ’αž›αŸƒ αžŠαŸ‚αž€αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž’αžαŸαžš αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αžαžΆαž„αž›αžΎ + +print('First name:', first_name) +print('First name length:', len(first_name)) +print('Last name: ', last_name) +print('Last name length: ', len(last_name)) +print('Country: ', country) +print('City: ', city) +print('Age: ', age) +print('Married: ', is_married) +print('Skills: ', skills) +print('Person information: ', person_info) + +# αž”αž„αŸ’αž€αžΎαžαž’αžαŸαžšαžαŸ’αž˜αžΈαž…αŸ’αžšαžΎαž“αž“αŸ…αž‡αž½αžšαžαŸ‚αž˜αž½αž™ + +first_name, last_name, country, age, is_married = 'Asabeneh', 'Yetayeh', 'Helsink', 250, True + +print(first_name, last_name, country, age, is_married) +print('First name:', first_name) +print('Last name: ', last_name) +print('Country: ', country) +print('Age: ', age) +print('Married: ', is_married) \ No newline at end of file diff --git a/Khmer/03_Day_Operators/03_Day_Operators.md b/Khmer/03_Day_Operators/03_Day_Operators.md new file mode 100644 index 000000000..af657afab --- /dev/null +++ b/Khmer/03_Day_Operators/03_Day_Operators.md @@ -0,0 +1,251 @@ +
+

30 Days Of Python: Day 3 - Operators

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+
+ +[<< Day 2](../02_Day_Variables_builtin_functions/02_variables_builtin_functions.md) | [Day 4 >>](../04_Day_Strings/04_strings.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 3](#-day-3) + - [Boolean](#boolean) + - [Operators](#operators) + - [Assignment Operators](#assignment-operators) + - [Arithmetic Operators:](#arithmetic-operators) + - [Comparison Operators](#comparison-operators) + - [Logical Operators](#logical-operators) + +# πŸ“˜ Day 3 + +## Boolean + +αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž…αŸ†αž“αž½αž“αž”αŸŠαžΌαž›αžΈαž“ αžαŸ†αžŽαžΆαž„αž±αŸ’αž™αžαž˜αŸ’αž›αŸƒαž˜αž½αž™αž“αŸƒαžαž˜αŸ’αž›αŸƒαž–αžΈαžš: _True_ ឬ _False_ αŸ” αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αŸ” αž’αž€αŸ’αžŸαžšαžŠαŸ†αž”αžΌαž„ **T** αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ True αž“αž·αž„ **F** αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ False αž‚αž½αžšαžαŸ‚αž˜αžΆαž“αž’αž€αŸ’αžŸαžšαž’αŸ†αž˜αž·αž“αžŠαžΌαž… JavaScript αž‘αŸαŸ” +**Example: αžαž˜αŸ’αž›αŸƒαž…αŸ†αž“αž½αž“αž”αŸŠαžΌαž›αžΈαž“** + +```py +print(True) +print(False) +``` + +## Operators + +αž—αžΆαžŸαžΆ Python αž‚αžΆαŸ†αž‘αŸ’αžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αž”αŸ’αžšαž—αŸαž‘αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž“αŸαŸ‡, αž™αžΎαž„αž“αžΉαž„αž•αŸ’αžαŸ„αžαž›αžΎαž›αžΎαžœαžΆαžαŸ’αž›αŸ‡αŸ—αŸ” + +### Assignment Operators + +αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž…αžΆαžαŸ‹αžαžΆαŸ†αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αž›αŸƒαž‘αŸ…αž›αžΎ ធថេរ αŸ” αž™αž€ = αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαŸ” αžŸαž‰αŸ’αž‰αžΆαžŸαŸ’αž˜αžΎαž€αŸ’αž“αž»αž„αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαž”αž„αŸ’αž αžΆαž‰αžαžΆαžαž˜αŸ’αž›αŸƒαž–αžΈαžšαžŸαŸ’αž˜αžΎαž‚αŸ’αž“αžΆαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„ Python αžœαžΆαž˜αžΆαž“αž“αŸαž™αžαžΆ αž™αžΎαž„αž€αŸ†αž–αž»αž„αžαŸ‚αžšαž€αŸ’αžŸαžΆαžαž˜αŸ’αž›αŸƒαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸαžšαž˜αž½αž™ αž αžΎαž™αž™αžΎαž„αž αŸ…αžœαžΆαžαžΆαž…αžΆαžαŸ‹αžαžΆαŸ†αž„αžαž˜αŸ’αž›αŸƒαž‘αŸ…αž›αžΎαž’αžαŸαžšαž˜αž½αž™αŸ” αžαžΆαžšαžΆαž„αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž”αŸ’αžšαž—αŸαž‘αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž…αžΆαžαŸ‹αžαžΆαŸ†αž„ Python αž•αŸ’αžŸαŸαž„αŸ—, αž”αžΆαž“αž˜αž€αž–αžΈ [w3school](https://www.w3schools.com/python/python_operators.asp). + +![Assignment Operators](../images/assignment_operators.png) + +### Arithmetic Operators + +- αž”αžΌαž€ Addition(+): a + b +- αžŠαž€ Subtraction(-): a - b +- αž‚αž»αžŽ Multiplication(*): a * b +- αž…αŸ‚αž€ Division(/): a / b +- αž˜αŸ‰αžΌαžŒαž»αž› (αž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž“αŸ…αžŸαž›αŸ‹) Modulus(%): a % b +- αž”αž„αŸ’αž€αžαŸ‹αž…αž»αŸ‡ Floor division(//): a // b +- αžŸαŸ’αžœαžΆαž™αž‚αž»αžŽ Exponentiation(**): a ** b + +![Arithmetic Operators](../images/arithmetic_operators.png) + +**Example:αž…αŸ†αž“αž½αž“αž‚αžαŸ‹** + +```py +# αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αž–αŸ’αžœαž“αŸ’αž’ αž€αŸ’αž“αž»αž„ Python +# αž…αŸ†αž“αž½αž“αž‚αžαŸ‹ + +print('Addition: ', 1 + 2) # 3 +print('Subtraction: ', 2 - 1) # 1 +print('Multiplication: ', 2 * 3) # 6 +print ('Division: ', 4 / 2) # 2.0 αž€αžΆαžšαž…αŸ‚αž€αž€αŸ’αž“αž»αž„ Python αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž…αŸ†αž“αž½αž“αž‘αžŸαž—αžΆαž‚ +print('Division: ', 6 / 2) # 3.0 +print('Division: ', 7 / 2) # 3.5 +print('Division without the remainder: ', 7 // 2) # 3, αž€αžΆαžšαž…αŸ‚αž€ αž‘αž‘αž½αž›αž”αžΆαž“αž…αŸ†αž“αž½αž“αž‚αžαŸ‹ +print ('Division without the remainder: ',7 // 3) # 2 +print('Modulus: ', 3 % 2) # 1, αž€αžΆαžšαžšαž€αžŸαŸ†αžŽαž›αŸ‹ +print('Exponentiation: ', 2 ** 3) # 9 αž˜αžΆαž“αž“αŸαž™αžαžΆ 2 * 2 * 2 +``` + +**Example:αž‘αžŸαž—αžΆαž‚** + +```py +# αž›αŸαžαž‘αžŸαž—αžΆαž‚ +print('Floating Point Number, PI', 3.14) +print('Floating Point Number, gravity', 9.81) +``` + +**Example:αž…αŸ†αž“αž½αž“αž€αž»αŸ†αž•αŸ’αž›αž·αž…** + +```py +# αž…αŸ†αž“αž½αž“αž€αž»αŸ†αž•αŸ’αž›αž·αž… +print('Complex number: ', 1 + 1j) +print('Multiplying complex numbers: ',(1 + 1j) * (1 - 1j)) +``` + +Let's declare a variable and assign a number data type. I am going to use single character variable but remember do not develop a habit of declaring such types of variables. Variable names should be all the time mnemonic. + +αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž ធថេរ αž αžΎαž™αž€αŸ†αžŽαžαŸ‹αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΎαž’αžαŸαžšαž’αž€αŸ’αžŸαžšαžαŸ‚αž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αž„αž…αžΆαŸ†αžαžΆαž€αž»αŸ†αž”αž„αŸ’αž€αžΎαžαž‘αž˜αŸ’αž›αžΆαž”αŸ‹αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž’αžαŸαžšαžŠαžΌαž…αž†αŸ’αž“αŸαŸ‡αŸ” αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αž’αžαŸαžšαž‚αž½αžšαžαŸ‚αž…αž˜αŸ’αžšαž»αŸ‡αž‚αž½αžšαžαŸ‚αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αž‡αžΆ mnemonic αž‚αžΊαžŸαŸ’αžšαž½αž›αž…αžΆαŸ†αž“αž·αž„αž™αž›αŸ‹αŸ” + +**Example:** + +```python +# αž”αž„αŸ’αž€αžΎαžαž’αžαŸαžšαž“αŸ…αžαžΆαž„αž›αžΎαž˜αž»αž“ + +a = 3 # a αž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžš αž“αž·αž„ 3 αž‡αžΆαž…αŸ†αž“αž½αž“αž‚αžαŸ‹ +b = 2 # b αž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžš αž“αž·αž„ 2 αž‡αžΆαž…αŸ†αž“αž½αž“αž‚αžαŸ‹ + +# αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αž–αŸ’αžœαž“αŸ’αž’ αž“αž·αž„ αž€αžΆαžšαžŠαžΆαž€αŸ‹αž…αž˜αŸ’αž›αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸαžš +total = a + b +diff = a - b +product = a * b +division = a / b +remainder = a % b +floor_division = a // b +exponential = a ** b + +print(total) +print('a + b = ', total) +print('a - b = ', diff) +print('a * b = ', product) +print('a / b = ', division) +print('a % b = ', remainder) +print('a // b = ', floor_division) +print('a ** b = ', exponentiation) +``` + +**Example:** + +```py +print('== Addition, Subtraction, Multiplication, Division, Modulus ==') + +# Dαž”αž„αŸ’αž€αžΎαžαž’αžαŸαžšαž“αž·αž„αžαž˜αŸ’αž›αŸƒ 2 αž αžΎαž™αžšαŸ€αž”αžœαžΆαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆ +num_one = 3 +num_two = 4 + +# αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αž–αŸ’αžœαž“αŸ’αž’ +total = num_one + num_two +diff = num_two - num_one +product = num_one * num_two +div = num_two / num_one +remainder = num_two % num_one + +# αž”αž„αŸ’αž αžΆαž‰αž…αž˜αŸ’αž›αžΎαž™αž‡αžΆαž˜αž½αž™αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αžœαžΆ +print('total: ', total) +print('difference: ', diff) +print('product: ', product) +print('division: ', div) +print('remainder: ', remainder) +``` + +αž™αžΎαž„αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αžαžΉαž˜αžαŸ‚αžšαŸ€αž„αžŠαŸ„αž™αž‚αžŽαž“αžΆ (area, volume,density, weight, perimeter, distance, force). + +**Example:** + +```py +# αž€αžΆαžšαž‚αžŽαž“αžΆαž•αŸ’αž‘αŸƒαž€αŸ’αžšαž‘αžΆαžšαž„αŸ’αžœαž„αŸ‹ +radius = 10 # αž€αžΆαŸ†αž“αŸƒαžšαž„αŸ’αžœαž„αŸ‹ +area_of_circle = 3.14 * radius ** 2 # ** αž˜αžΆαž“αž“αŸαž™αžαžΆαžŸαŸ’αžœαžΆαž™αž‚αž»αžŽ +print('Area of a circle:', area_of_circle) + +# αž€αžΆαžšαž‚αžŽαž“αžΆαž•αŸ’αž‘αŸƒαž€αŸ’αžšαž‘αžΆαž“αŸƒαž…αžαž»αž€αŸ„αžŽαž€αŸ‚αž„ +length = 10 +width = 20 +area_of_rectangle = length * width +print('Area of rectangle:', area_of_rectangle) + +# αž€αžΆαžšαž‚αžŽαž“αžΆαž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαžœαžαŸ’αžαž»αž˜αž½αž™ +mass = 75 +gravity = 9.81 +weight = mass * gravity +print(weight, 'N') + +# αž‚αžŽαž“αžΆαžŠαž„αŸ‹αžŸαŸŠαžΈαžαŸαž“αŸƒαž’αž„αŸ’αž‚αž’αžΆαžαž»αžšαžΆαžœ +mass = 75 # in Kg +volume = 0.075 # in cubic meter +density = mass / volume # 1000 Kg/m^3 + +``` + +### Comparison Operators + +αž€αŸ’αž“αž»αž„ programming we compare values, αž™αžΎαž„αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžαž˜αŸ’αž›αŸƒ αž™αžΎαž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžαž˜αŸ’αž›αŸƒαž–αžΈαžšαŸ” αž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαžαž˜αŸ’αž›αŸƒαž˜αž½αž™αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž’αŸ†αž‡αžΆαž„ αž¬αžαž·αž…αž‡αžΆαž„ αž¬αžŸαŸ’αž˜αžΎαž“αžΉαž„αžαž˜αŸ’αž›αŸƒαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž¬αž’αžαŸ‹αŸ” αžαžΆαžšαžΆαž„αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž”αž„αŸ’αž αžΆαž‰αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” Python αž”αžΆαž“αž˜αž€αž–αžΈ [w3shool](https://www.w3schools.com/python/python_operators.asp). + +![Comparison Operators](../images/comparison_operators.png) +**Example: αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”** + +```py +print(3 > 2) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž‚αžΊαž’αŸ†αž‡αžΆαž„ 2 +print(3 >= 2) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž‚αžΊαž’αŸ†αž‡αžΆαž„ 2 +print(3 < 2) # False, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž‚αžΊαž’αŸ†αž‡αžΆαž„ 2 +print(2 < 3) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 2 αž‚αžΊαžαž·αž…αž‡αžΆαž„ 3 +print(2 <= 3) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 2 iαž‚αžΊαžαž·αž…αž‡αžΆαž„ 3 +print(3 == 2) # False, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž˜αž·αž“αžŸαŸ’αž˜αžΎαž“αžΉαž„ 2 +print(3 != 2) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž˜αž·αž“αžŸαŸ’αž˜αžΎαž“αžΉαž„ 2 +print(len('mango') == len('avocado')) # False +print(len('mango') != len('avocado')) # True +print(len('mango') < len('avocado')) # True +print(len('milk') != len('meat')) # False +print(len('milk') == len('meat')) # True +print(len('tomato') == len('potato')) # True +print(len('python') > len('dragon')) # False + + +# αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž’αŸ’αžœαžΈαž˜αž½αž™αž•αŸ’αžαž›αŸ‹ True ឬ False + +print('True == True: ', True == True) +print('True == False: ', True == False) +print('False == False:', False == False) +``` + +αž€αŸ’αžšαŸ…αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžαžΆαž„αž›αžΎ Python αž”αŸ’αžšαžΎ: + +- _is_: αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ true αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αžαŸαžšαž‘αžΆαŸ†αž„αž–αžΈαžšαž‚αžΊαžŠαžΌαž…αž‚αŸ’αž“αžΆ(x is y) +- _is not_: αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ true αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αžαŸαžšαž‘αžΆαŸ†αž„αž–αžΈαžšαž˜αž·αž“αžŠαžΌαž…αž‚αŸ’αž“αžΆ(x is not y) +- _in_: αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ true αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž½αžšαž˜αžΆαž“αžœαžαŸ’αžαž»αž“αŸ„αŸ‡(x in y) +- _not in_: RαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ true αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž½αžšαž˜αž·αž“αž˜αžΆαž“αžœαžαŸ’αžαž»αž“αŸ„αŸ‡(x in y) + +```py +print('1 is 1', 1 is 1) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžαž˜αŸ’αž›αŸƒαžŠαžΌαž…αž‚αŸ’αž“αžΆ +print('1 is not 2', 1 is not 2) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 1 αž˜αž·αž“αž˜αŸ‚αž“ 2 +print('A in Asabeneh', 'A' in 'Asabeneh') # True - A αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž€αŸ’αžŸαžš +print('B in Asabeneh', 'B' in 'Asabeneh') # False - αž‚αŸ’αž˜αžΆαž“αž’αž€αŸ’αžŸαžš B +print('coding' in 'coding for all') # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ "coding for all" αž˜αžΆαž“αž–αžΆαž€αŸ’αž™ "coding" +print('a in an:', 'a' in 'an') # True +print('4 is 2 ** 2:', 4 is 2 ** 2) # True +``` + +### Logical Operators + +αžαž»αžŸαž–αžΈαž—αžΆαžŸαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αž Python αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡ _and_, _or_ αž“αž·αž„ _not_ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžαž€αŸ’αž€αŸ” αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžαž€αŸ’αž€αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αŸ’αž…αžΆαž”αŸ‹αžŸαŸαž…αž€αŸ’αžαžΈαž–αžΈαžšαž¬αž…αŸ’αžšαžΎαž“αŸ” + +![Logical Operators](../images/logical_operators.png) + +```py +print(3 > 2 and 4 > 3) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž‚αžΊαž–αž·αž +print(3 > 2 and 4 < 3) # False - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΈ 2 αž˜αž·αž“αž–αž·αž +print(3 < 2 and 4 < 3) # False - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž‚αžΊαž˜αž·αž“αž–αž·αž +print('True and True: ', True and True) +print(3 > 2 or 4 > 3) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž‚αžΊαž–αž·αž +print(3 > 2 or 4 < 3) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž˜αž½αž™αž‚αžΊαž–αž·αž +print(3 < 2 or 4 < 3) # False - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž‚αžΊαž˜αž·αž“αž–αž·αž +print('True or False:', True or False) +print(not 3 > 2) # False - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 > 2 αž‚αžΊαž–αž·αž, αž αžΎαž™ not True αž”αžΆαž“ False +print(not True) # False - αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’, αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· not αž‘αž‘αž½αž›αž”αžΆαž“ true αž‘αŸ… false +print(not False) # True +print(not not True) # True +print(not not False) # False + +``` + +[<< Day 2](../02_Day_Variables_builtin_functions/02_variables_builtin_functions.md) | [Day 4 >>](../04_Day_Strings/04_strings.md) diff --git a/Khmer/03_Day_Operators/day-3.py b/Khmer/03_Day_Operators/day-3.py new file mode 100644 index 000000000..18a23010f --- /dev/null +++ b/Khmer/03_Day_Operators/day-3.py @@ -0,0 +1,123 @@ +# αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αž–αŸ’αžœαž“αŸ’αž’ αž€αŸ’αž“αž»αž„ Python +# αž…αŸ†αž“αž½αž“αž‚αžαŸ‹ + +print('Addition: ', 1 + 2) +print('Subtraction: ', 2 - 1) +print('Multiplication: ', 2 * 3) +print ('Division: ', 4 / 2) # αž€αžΆαžšαž…αŸ‚αž€αž€αŸ’αž“αž»αž„ Python αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž…αŸ†αž“αž½αž“αž‘αžŸαž—αžΆαž‚ +print('Division: ', 6 / 2) +print('Division: ', 7 / 2) +print('Division without the remainder: ', 7 // 2) # αž€αžΆαžšαž…αŸ‚αž€ αž‘αž‘αž½αž›αž”αžΆαž“αž…αŸ†αž“αž½αž“αž‚αžαŸ‹ +print('Modulus: ', 3 % 2) # αž€αžΆαžšαžšαž€αžŸαŸ†αžŽαž›αŸ‹ +print ('Division without the remainder: ', 7 // 3) +print('Exponential: ', 3 ** 2) # αž˜αžΆαž“αž“αŸαž™αžαžΆ 3 * 3 + +# αž…αŸ†αž“αž½αž“αž‘αžŸαž—αžΆαž‚ +print('Floating Number,PI', 3.14) +print('Floating Number, gravity', 9.81) + +# αž…αŸ†αž“αž½αž“αž€αŸ†αž•αŸ’αž›αž·αž… +print('Complex number: ', 1 + 1j) +print('Multiplying complex number: ',(1 + 1j) * (1-1j)) + +# αž”αž„αŸ’αž€αžΎαžαž’αžαŸαžšαž“αŸ…αžαžΆαž„αž›αžΎαž˜αž»αž“ + +a = 3 # a αž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžš αž“αž·αž„ 3 αž‡αžΆαž…αŸ†αž“αž½αž“αž‚αžαŸ‹ +b = 2 # b αž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžš αž“αž·αž„ 2 αž‡αžΆαž…αŸ†αž“αž½αž“αž‚αžαŸ‹ + +# αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αž–αŸ’αžœαž“αŸ’αž’ αž“αž·αž„ αž€αžΆαžšαžŠαžΆαž€αŸ‹αž…αž˜αŸ’αž›αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸαžš +total = a + b +diff = a - b +product = a * b +division = a / b +remainder = a % b +floor_division = a // b +exponential = a ** b + +print(total) +print('a + b = ', total) +print('a - b = ', diff) +print('a * b = ', product) +print('a / b = ', division) +print('a % b = ', remainder) +print('a // b = ', floor_division) +print('a ** b = ', exponential) + +# αž”αž„αŸ’αž€αžΎαžαž’αžαŸαžšαž“αž·αž„αžαž˜αŸ’αž›αŸƒ 2 αž αžΎαž™αžšαŸ€αž”αžœαžΆαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆ +num_one = 3 +num_two = 4 + +# αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αž–αŸ’αžœαž“αŸ’αž’ +total = num_one + num_two +diff = num_two - num_one +product = num_one * num_two +div = num_two / num_two +remainder = num_two % num_one + +# αž”αž„αŸ’αž αžΆαž‰αž…αž˜αŸ’αž›αžΎαž™αž‡αžΆαž˜αž½αž™αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αžœαžΆ +print('total: ', total) +print('difference: ', diff) +print('product: ', product) +print('division: ', div) +print('remainder: ', remainder) + +# αž€αžΆαžšαž‚αžŽαž“αžΆαž•αŸ’αž‘αŸƒαž€αŸ’αžšαž‘αžΆαžšαž„αŸ’αžœαž„αŸ‹ +radius = 10 # αž€αžΆαŸ†αž“αŸƒαžšαž„αŸ’αžœαž„αŸ‹ +area_of_circle = 3.14 * radius ** 2 # ** αž˜αžΆαž“αž“αŸαž™αžαžΆαžŸαŸ’αžœαžΆαž™αž‚αž»αžŽ +print('Area of a circle:', area_of_circle) + +# αž€αžΆαžšαž‚αžŽαž“αžΆαž•αŸ’αž‘αŸƒαž€αŸ’αžšαž‘αžΆαž“αŸƒαž…αžαž»αž€αŸ„αžŽαž€αŸ‚αž„ +length = 10 +width = 20 +area_of_rectangle = length * width +print('Area of rectangle:', area_of_rectangle) + +# αž€αžΆαžšαž‚αžŽαž“αžΆαž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸƒαžœαžαŸ’αžαž»αž˜αž½αž™αŸ” +mass = 75 +gravity = 9.81 +weight = mass * gravity +print(weight, 'N') + +# True = αž–αž·αž , False = αž˜αž·αž“αž–αž·αž +print(3 > 2) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž‚αžΊαž’αŸ†αž‡αžΆαž„ 2 +print(3 >= 2) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž‚αžΊαž’αŸ†αž‡αžΆαž„ 2 +print(3 < 2) # False, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž‚αžΊαž’αŸ†αž‡αžΆαž„ 2 +print(2 < 3) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 2 αž‚αžΊαžαž·αž…αž‡αžΆαž„ 3 +print(2 <= 3) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 2 iαž‚αžΊαžαž·αž…αž‡αžΆαž„ 3 +print(3 == 2) # False, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž˜αž·αž“αžŸαŸ’αž˜αžΎαž“αžΉαž„ 2 +print(3 != 2) # True, αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 αž˜αž·αž“αžŸαŸ’αž˜αžΎαž“αžΉαž„ 2 +print(len('mango') == len('avocado')) # False +print(len('mango') != len('avocado')) # True +print(len('mango') < len('avocado')) # True +print(len('milk') != len('meat')) # False +print(len('milk') == len('meat')) # True +print(len('tomato') == len('potato')) # True +print(len('python') > len('dragon')) # False + +# αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‡αžΆαž˜αž½αž™αžŸαž‰αŸ’αž‰αžΆβ€‹αž”αŸ’αžšαž˜αžΆαžŽ +print('True == True: ', True == True) +print('True == False: ', True == False) +print('False == False:', False == False) +print('True and True: ', True and True) +print('True or False:', True or False) + +# αžœαž·αž’αžΈαž˜αž½αž™αž‘αŸ€αž +print('1 is 1', 1 is 1) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžαž˜αŸ’αž›αŸƒαžŠαžΌαž…αž‚αŸ’αž“αžΆ +print('1 is not 2', 1 is not 2) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 1 αž˜αž·αž“αž˜αŸ‚αž“ 2 +print('A in Asabeneh', 'A' in 'Asabeneh') # True - A αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αž€αŸ’αžŸαžš +print('B in Asabeneh', 'B' in 'Asabeneh') # False - αž‚αŸ’αž˜αžΆαž“αž’αž€αŸ’αžŸαžš B +print('coding' in 'coding for all') # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ "coding for all" αž˜αžΆαž“αž–αžΆαž€αŸ’αž™ "coding" +print('a in an:', 'a' in 'an') # True +print('4 is 2 ** 2:', 4 is 2 ** 2) # True + +print(3 > 2 and 4 > 3) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž‚αžΊαž–αž·αž +print(3 > 2 and 4 < 3) # False - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΈ 2 αž˜αž·αž“αž–αž·αž +print(3 < 2 and 4 < 3) # False - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž‚αžΊαž˜αž·αž“αž–αž·αž +print(3 > 2 or 4 > 3) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž‚αžΊαž–αž·αž +print(3 > 2 or 4 < 3) # True - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž˜αž½αž™αž‚αžΊαž–αž·αž +print(3 < 2 or 4 < 3) # False - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ αžŸαŸαž…αž€αŸ’αžαžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž‚αžΊαž˜αž·αž“αž–αž·αž +print(not 3 > 2) # False - αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚ 3 > 2 αž‚αžΊαž–αž·αž, αž αžΎαž™ not True αž”αžΆαž“ False +print(not True) # False - αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’, αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· not αž‘αž‘αž½αž›αž”αžΆαž“ true αž‘αŸ… false +print(not False) # True +print(not not True) # True +print(not not False) # False \ No newline at end of file diff --git a/Khmer/04_Day_Strings/04_Day_Strings.md b/Khmer/04_Day_Strings/04_Day_Strings.md new file mode 100644 index 000000000..616ded350 --- /dev/null +++ b/Khmer/04_Day_Strings/04_Day_Strings.md @@ -0,0 +1,509 @@ +
+

30 Days Of Python: Day 4 - Strings

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 3](../03_Day_Operators/03_Day_Operators.md) | [Day 5 >>](../05_Day_Lists/05_lists.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [Day4](#day4) + - [Strings](#strings) + - [Creating a String](#creating-a-string) + - [String Concatenation](#string-concatenation) + - [Escape Sequences in Strings](#escape-sequences-in-strings) +- [String formatting](#string-formatting) + - [Old style string formatting](#old-style-string-formatting) + - [New Style String Formatting (str.format)](#new-style-string-formatting-strformat) + - [String Interpolation / f-Strings (Python 3.6+)](#string-interpolation--f-strings-python-36) + - [Python Strings as Sequences of Characters](#python-strings-as-sequences-of-characters) + - [Unpacking Characters](#unpacking-characters) + - [Accessing Characters in Strings by Index](#accessing-characters-in-strings-by-index) + - [Slicing Python Strings](#slicing-python-strings) + - [Reversing a String](#reversing-a-string) + - [Skipping Characters While Slicing](#skipping-characters-while-slicing) + - [String Methods](#string-methods) + +# Day4 + +## Strings + αž’αžαŸ’αžαž”αž‘αž‡αžΆαž”αŸ’αžšαž—αŸαž‘ αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžš (string) αžšαžΊαž’αžΆαž…αž αŸ…αž”αžΆαž“ ថអ αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ string αŸ• αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž‡αžΆαž’αž€αŸ’αžŸαžšαž‚αžΊ αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžš(string)αŸ• +αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžŸαŸ’αžαž·αžαž€αŸ’αžšαŸ„αž˜αžŸαž‰αŸ’αž‰αžΆαž’αŸ’αž˜αŸαž‰αž€αžŽαŸ’αžŠαž»αžšαžαŸ‚αž˜αž½αž™, αž–αžΈαžš αž¬αž”αžΈαž‡αžΆ αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžš រឺ αžŸαŸ’αžšαŸ’αžαžΈαž„ αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž string αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆ αž“αž·αž„αž˜αž»αžαž„αžΆαžš built-in αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ string αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž‘αŸ†αž αŸ†(αž”αŸ’αžšαžœαŸ‚αž„)αž“αŸƒ string αž”αŸ’αžšαžΎ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš len() αŸ” + +### Creating a String + +```py +letter = 'P' # αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžšαž˜αž½αž™αž’αžΆαž…αž‡αžΆαž’αž€αŸ’αžŸαžšαžαŸ‚αž˜αž½αž™αž¬αžŸαžΆαžšαžαŸ’αž›αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“ +print(letter) # P +print(len(letter)) # 1 +greeting = 'Hello, World!' # String αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžš αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αžΎαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αžŸαž‰αŸ’αž‰αžΆαž’αŸ’αž˜αŸαž‰αž€αžŽαŸ’αžŠαž»αžšαžαŸ‚αž˜αž½αž™αž¬αž–αžΈαžš "Hello, World!" +print(greeting) # Hello, World! +print(len(greeting)) # 13 +sentence = "I hope you are enjoying 30 days of Python Challenge" +print(sentence) +``` +αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžš αž›αž€αŸ’αžαžŽαŸˆαž…αŸ’αžšαžΎαž“αž‡αž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎ triple single (''') ឬ triple double quotes ("""") αŸ” សូម αž˜αžΎαž› αž§αž‘αžΆαž αžšαžŽαŸ αžαžΆαž„ αž€αŸ’αžšαŸ„αž˜αŸ” + +```py +multiline_string = '''I am a teacher and enjoy teaching. +I didn't find anything as rewarding as empowering people. +That is why I created 30 days of python.''' +print(multiline_string) + +# αžœαž·αž’αžΈαž˜αž½αž™αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž‚αŸ’αž“αžΆ +multiline_string = """I am a teacher and enjoy teaching. +I didn't find anything as rewarding as empowering people. +That is why I created 30 days of python.""" +print(multiline_string) +``` + +### String Concatenation + +αž™αžΎαž„αž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžšαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαŸ•αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹ αž¬αž•αŸ’αž€αž»αŸ†αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžšαŸ” αžŸαžΌαž˜αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜: + +```py +first_name = 'Asabeneh' +last_name = 'Yetayeh' +space = ' ' +full_name = first_name + space + last_name +print(full_name) # Asabeneh Yetayeh +# αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αŸ†αž αŸ†αž“αŸƒ stringαž¬αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžš αžŠαŸ„αž™αž”αŸ’αžšαžΎ len() built-in function +print(len(first_name)) # 8 +print(len(last_name)) # 7 +print(len(first_name) > len(last_name)) # True +print(len(full_name)) # 16 +``` + +### Escape Sequences in Strings + +Escape sequences αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžš αž‚αžΊαž‡αžΆαž€αžΆαžšαž…αž˜αŸ’αžšαž»αŸ‡αž’αž€αŸ’αžŸαžšαž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžαŸ†αžŽαžΆαž„αž’αž€αŸ’αžŸαžšαžŠαŸ‚αž›αž–αž·αž”αžΆαž€αž¬αž˜αž·αž“αž’αžΆαž…αž…αžΌαž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„ string literal αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™ backslash \ αžŠαŸ‚αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŠαŸ„αž™αž’αž€αŸ’αžŸαžšαžŽαžΆαž˜αž½αž™αž¬αž›αŸ†αžŠαžΆαž”αŸ‹αž’αž€αŸ’αžŸαžšαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› backslash αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžš, αžœαžΆαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸƒEscape sequencesαŸ”αžŸαžΌαž˜αž˜αžΎαž›αžšαžΌαž”αž—αžΆαž–αžŸαžŸαžšαžŸαŸαž”αž“αŸ’αž‘αžΆαžαŸ‹αžαŸ’αž˜αžΈαžŠαŸ‚αž›αž–αŸαž‰αž“αž·αž™αž˜αž”αŸ†αž•αž»αž: + +- \n: αž”αž“αŸ’αž‘αžΆαžαŸ‹αžαŸ’αž˜αžΈ +- \t: Tab means(αžŠαž€αžƒαŸ’αž›αžΆ ៨ αžŠαž„) +- \\\\: Back slash +- \\': αžŸαž‰αŸ’αž‰αžΆαž’αŸ’αž˜αŸαž‰αž€αžŽαŸ’αžŠαž»αžšαžαŸ‚αž˜αž½αž™ (') +- \\": αžŸαž‰αŸ’αž‰αžΆαž’αŸ’αž˜αŸαž‰αž€αžŽαŸ’αžŠαž»αžšαž–αžΈαžš (") + +αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αžŸαžΌαž˜αž˜αžΎαž›αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸƒEscape sequences αžαžΆαž„αž›αžΎαž‡αžΆαž˜αž½αž™αž§αž‘αžΆαž αžšαžŽαŸαŸ” + +```py +print('I hope everyone is enjoying the Python Challenge.\nAre you ?') # αž…αž»αŸ‡αž”αž“αŸ’αž‘αžΆαžαŸ‹ +print('Days\tTopics\tExercises') # αž”αž“αŸ’αžαŸ‚αž˜αž€αž“αŸ’αž›αŸ‚αž„ tab ឬ αžŠαž€αžƒαŸ’αž›αžΆ +print('Day 1\t3\t5') +print('Day 2\t3\t5') +print('Day 3\t3\t5') +print('Day 4\t3\t5') +print('This is a backslash symbol (\\)') # αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžšαžŸαŸαžš backslash αž˜αž½αž™ +print('In every programming language it starts with \"Hello, World!\"') # αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžšαžŸαŸαžšαžŸαž‰αŸ’αž‰αžΆαž’αŸ’αž˜αŸαž‰αž€αžŽαŸ’αžŠαž»αžšαž–αžΈαžš + +# αž›αž‘αŸ’αž’αž•αž› +I hope every one is enjoying the Python Challenge. +Are you ? +Days Topics Exercises +Day 1 5 5 +Day 2 6 20 +Day 3 5 23 +Day 4 1 35 +This is a backslash symbol (\) +In every programming language it starts with "Hello, World!" +``` +# String formatting + +### Old style string formatting +αž“αŸ…αž€αŸ’αž“αž»αž„Python αž˜αžΆαž“αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž€αžΆαžš Format string αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž™αžΎαž„ αž“αžΉαž„ αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαžœαž·αž’αžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αžŸαž‰αŸ’αž‰αžΆ "%" αž‚αžΊαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ αž€αŸ†αžŽαžαŸ‹ ធថេរ αž”αž·αž‘αž‡αž»αŸ†αžœαž·αž‰αžŠαŸ„αž™ "Tuple" () + +- %s - αžŸαŸ†αž“αž»αŸ†αž’αž€αŸ’αžŸαžš (រឺ object αž’αŸ’αžœαžΈαž˜αž½αž™αž‡αžΆαž˜αž½αž™αžŸαŸ†αž“αž»αŸ†αž’αž€αŸ’αžŸαžšαžαŸ†αžŽαžΆαž„αž˜αž½αž™, αžŠαžΌαž…αž‡αžΆαž›αŸαžαž‡αžΆαžŠαŸαžΈαž˜) +- %d - αž…αŸ†αž“αž½αž“αž‚αžαŸ‹ +- %f - αž…αŸ†αž“αž½αž“αž‘αžŸαž—αžΆαž‚ +- "%.number of digitsf" - αž…αŸ†αž“αž½αž“αž‘αžŸαž—αžΆαž‚ with fixed precision + +```py +# Strings only +first_name = 'Asabeneh' +last_name = 'Yetayeh' +language = 'Python' +formated_string = 'I am %s %s. I teach %s' %(first_name, last_name, language) +print(formated_string) +``` + +#### New Style String Formatting (str.format) +αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„ Python version 3 αŸ” + +```py + +first_name = 'Asabeneh' +last_name = 'Yetayeh' +language = 'Python' +formated_string = 'I am {} {}. I teach {}'.format(first_name, last_name, language) +print(formated_string) +a = 4 +b = 3 + +print('{} + {} = {}'.format(a, b, a + b)) +print('{} - {} = {}'.format(a, b, a - b)) +print('{} * {} = {}'.format(a, b, a * b)) +print('{} / {} = {:.2f}'.format(a, b, a / b)) # αž€αŸ†αžŽαžαŸ‹αžœαžΆαž‘αŸ…αž‡αžΆαž›αŸαžαŸ’αžαŸ’αž‘αž„αŸ‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹ +print('{} % {} = {}'.format(a, b, a % b)) +print('{} // {} = {}'.format(a, b, a // b)) +print('{} ** {} = {}'.format(a, b, a ** b)) + +# output +4 + 3 = 7 +4 - 3 = 1 +4 * 3 = 12 +4 / 3 = 1.33 +4 % 3 = 1 +4 // 3 = 1 +4 ** 3 = 64 + +# αžŸαŸ†αžŽαž»αŸ†αž’αž€αŸ’αžŸαžš αž“αž·αž„ αž›αŸαž +radius = 10 +pi = 3.14 +area = pi * radius ** 2 +formated_string = 'The area of a circle with a radius {} is {:.2f}.'.format(radius, area) # 2 digits after decimal +print(formated_string) +``` + +#### String Interpolation / f-Strings (Python 3.6+) +αž€αžΆαžšαž€αŸ‚αž…αŸ’αž“αŸƒ string αžαŸ’αž˜αžΈαž˜αž½αž™αž‘αŸ€αžαž‚αžΊ string interpolation, f-strings αŸ” string αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™ f αž αžΎαž™αž™αžΎαž„αž’αžΆαž…αž”αž‰αŸ’αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ…αž€αŸ’αž“αž»αž„αžαŸ†αžŽαŸ‚αž„αžŠαŸ‚αž›αžŸαŸ’αž˜αžΎαž‚αŸ’αž“αžΆαŸ” + +```py +a = 4 +b = 3 +print(f'{a} + {b} = {a +b}') +print(f'{a} - {b} = {a - b}') +print(f'{a} * {b} = {a * b}') +print(f'{a} / {b} = {a / b:.2f}') +print(f'{a} % {b} = {a % b}') +print(f'{a} // {b} = {a // b}') +print(f'{a} ** {b} = {a ** b}') +``` +### Python Strings as Sequences of Characters + +Python strings αž‚αžΊαž‡αžΆαž›αŸ†αžŠαžΆαž”αŸ‹αžαž½αžšαž’αž€αŸ’αžŸαžš αž“αž·αž„ αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒαž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž‡αžΆαž˜αž½αž™αž›αŸ†αžŠαžΆαž”αŸ‹Python αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž“αŸƒobject-lists and tuplesαŸ” αžšαž”αŸ€αž”αžŠαŸ‚αž›αž’αž˜αŸ’αž˜αžαžΆαž”αŸ†αž•αž»αžαžŸαŸ†αžšαžΆαž”αŸ‹αž‘αžΆαž‰αž™αž€αžαž½αžšαž’αž€αŸ’αžŸαžšαž˜αž€αž–αžΈstring(αž“αž·αž„αžŸαž˜αžΆαž‡αž·αž€αž˜αŸ’αž“αžΆαž€αŸ‹αŸ— αž–αžΈαž›αŸ†αžŠαžΆαž”αŸ‹αžŽαžΆαž˜αž½αž™)αž‚αžΊαžŸαŸ†αžšαžΆαž”αŸ‹αž›αž»αž”αž–αž½αž€αžœαžΆαž‘αŸ…αž‡αžΆαž’αžαŸαžš are sequences of characters, and share their basic methods of access with other Python ordered sequences of objects – lists and tuples. The simplest way of extracting single characters from strings (and individual members from any sequence) is to unpack them into corresponding variables. + +#### Unpacking Characters + +``` +language = 'Python' +a,b,c,d,e,f = language # unpacking sequence characters into variables +print(a) # P +print(b) # y +print(c) # t +print(d) # h +print(e) # o +print(f) # n +``` + +#### Accessing Characters in Strings by Index +αž€αŸ’αž“αž»αž„programmingαžšαžΆαž”αŸ‹αž›αŸαžαž…αžΆαž”αŸ‹αž–αžΈαž›αŸαžαŸ αŸ”αžαž½αž’αž€αŸ’αžŸαžš +αž‘αžΈαŸ‘ αž€αŸαžšαžΆαž”αŸ‹αž…αžΆαž”αŸ‹αž–αžΈαžαž½αž‘αžΈαŸ  αž“αž·αž„ αž…αŸ†αž“αž½αž“αžαž½αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸƒαžαž½αž’αž€αŸ’αžŸαžšαž“αŸƒαž”αžŽαŸ’αžŠαž»αŸ†αžαž½αžšαž’αž€αŸ’αžŸαžš αžŠαž€ ៑ αž‚αžΊαž‡αžΆαž”αŸ’αžšαžœαŸ‚αž„αžšαž”αžŸαŸ‹string. + +![String index](../images/string_index.png) + +```py +language = 'Python' +first_letter = language[0] +print(first_letter) # P +second_letter = language[1] +print(second_letter) # y +last_index = len(language) - 1 +last_letter = language[last_index] +print(last_letter) # n +``` +αž”αŸ’αžšαžŸαž·αž“ αž”αžΎ αž™αžΎαž„ αž…αž„αŸ‹ αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž–αžΈ αž…αž»αž„ αžαžΆαž„αžŸαŸ’αžαžΆαŸ† αž™αžΎαž„ αž’αžΆαž… αž”αŸ’αžšαžΎ indexing αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“ -1 αž‡αžΆ index αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ” + +```py +language = 'Python' +last_letter = language[-1] +print(last_letter) # n +second_last = language[-2] +print(second_last) # o +``` + +#### Slicing Python Strings + +αž€αŸ’αž“αž»αž„ Python αž™αžΎαž„αž’αžΆαž…αž€αžΆαžαŸ‹ string αž‘αŸ…αž‡αžΆ substring αŸ” + +```py +language = 'Python' +first_three = language[0:3] # starts at zero index and up to 3 but not include 3 +print(first_three) #Pyt +last_three = language[3:6] +print(last_three) # hon +# Another way +last_three = language[-3:] +print(last_three) # hon +last_three = language[3:] +print(last_three) # hon +``` + +#### Reversing a String +αž™αžΎαž„ αž’αžΆαž… αž„αžΆαž™ αžŸαŸ’αžšαž½αž› αžαŸ’αžšαž›αž”αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš stringαž“αŸ… Python αž”αžΆαž“αŸ” +```py +greeting = 'Hello, World!' +print(greeting[::-1]) # !dlroW ,olleH +``` + +#### Skipping Characters While Slicing + +αžœαžΆαž’αžΆαž…αž‡αž½αžŸαž‡αž»αž›αž’αž€αŸ’αžŸαžšαž“αŸ…αž–αŸαž›αž€αžΆαžαŸ‹αžŠαŸ„αž™αž•αŸ’αž‘αŸαžš step argument αž‘αŸ… Slice method αŸ” + +```py +language = 'Python' +pto = language[0:6:2] # +print(pto) # Pto +``` + +### String Methods + +αž˜αžΆαž“αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž string αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž”αž˜αŸ’αž›αŸ‚αž„ strings αŸ” αžŸαžΌαž˜αž˜αžΎαž›αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž string αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜: + +- capitalize(): αž”αž˜αŸ’αž›αŸ‚αž„αž’αž€αŸ’αžŸαžšαžŠαŸ†αž”αžΌαž„αž“αŸƒ string αž‘αŸ…αž‡αžΆ capital letter + +```py +challenge = 'thirty days of python' +print(challenge.capitalize()) # 'Thirty days of python' +``` +- count(): αž”αž‰αŸ’αž‡αžΌαž“αž“αžΌαžœαž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αž“αŸƒ substring αž€αŸ’αž“αž»αž„ string, count(substring, start=.., end=..). αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‚αžΊαž‡αžΆαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž”αž‰αŸ’αž‡αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαžΆαž”αŸ‹ αž“αž·αž„αž”αž‰αŸ’αž…αž”αŸ‹αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž‡αžΈαž…αž»αž„αž€αŸ’αžšαŸ„αž™αžŠαžΎαž˜αŸ’αž”αžΈαžšαžΆαž”αŸ‹αŸ” + +```py +challenge = 'thirty days of python' +print(challenge.count('y')) # 3 +print(challenge.count('y', 7, 14)) # 1, +print(challenge.count('th')) # 2` +``` + +- endswith (): αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαžΆαžαžΎ string αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž€αžΆαžšαž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ + +```py +challenge = 'thirty days of python' +print(challenge.endswith('on')) # True +print(challenge.endswith('tion')) # False +``` + +- expandtabs(): αž‡αŸ†αž“αž½αžŸαžαž½αž’αž€αŸ’αžŸαžš tab αžŠαŸ„αž™αž…αŸ†αžŽαž»αž…αžšαž αŸαžŸ, αž‘αŸ†αž αŸ† tab default αž‚αžΊ 8 αžœαžΆαž™αž€αž‘αŸ†αž αŸ† tab argument + +```py +challenge = 'thirty\tdays\tof\tpython' +print(challenge.expandtabs()) # 'thirty days of python' +print(challenge.expandtabs(10)) # 'thirty days of python' +``` + +- find(): αž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸƒαž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αž›αžΎαž€αžŠαŸ†αž”αžΌαž„αž“αŸƒ substring, αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αžœαž·αž‰ -1 + +```py +challenge = 'thirty days of python' +print(challenge.find('y')) # 16 +print(challenge.find('th')) # 17 +``` + +- rfind(): αž”αž‰αŸ’αž‡αžΌαž“αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸƒ substring, αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αžšαž€αžƒαžΎαž‰αž”αž‰αŸ’αž‡αžΌαž“ -1 + +```py +challenge = 'thirty days of python' +print(challenge.rfind('y')) # 5 +print(challenge.rfind('th')) # 1 +``` + +- format(): format string αž‘αŸ…αž‡αžΆ output αž›αŸ’αž’αž‡αžΆαž„ string formatting check this [link](https://www.programiz.com/python-programming/methods/string/format) + +```py +first_name = 'Asabeneh' +last_name = 'Yetayeh' +age = 250 +job = 'teacher' +country = 'Finland' +sentence = 'I am {} {}. I am a {}. I am {} years old. I live in {}.'.format(first_name, last_name, age, job, country) +print(sentence) # I am Asabeneh Yetayeh. I am 250 years old. I am a teacher. I live in Finland. + +radius = 10 +pi = 3.14 +area = pi * radius ** 2 +result = 'The area of a circle with radius {} is {}'.format(str(radius), str(area)) +print(result) # The area of a circle with radius 10 is 314 +``` + +- index(): αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž”αž‰αŸ’αž‡αžΈαž‘αžΆαž”αž”αŸ†αž•αž»αžαž“αŸƒ substring, αžŸαž‰αŸ’αž‰αžΆαž”αž“αŸ’αžαŸ‚αž˜αž”αž„αŸ’αž αžΆαž‰αž”αž‰αŸ’αž‡αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αž·αž„αž”αž‰αŸ’αž…αž”αŸ‹ (αž€αžΆαžšαž…αž˜αŸ’αž›αž„ 0 αž“αž·αž„αžœαŸ‚αž„αžαŸ’αžŸαŸ‚ - 1) αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎ substring αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αžœαžΆαž›αžΎαž€ valueError αŸ” + +```py +challenge = 'thirty days of python' +sub_string = 'da' +print(challenge.index(sub_string)) # 7 +print(challenge.index(sub_string, 9)) # error +``` + +- rindex(): αž”αž‰αŸ’αž‡αžΌαž“ αž˜αž€αžœαž·αž‰αž“αžΌαžœ index αžαŸ’αž–αžŸαŸ‹αž”αŸ†αž•αž»αžαž“αŸƒ substring, αžŸαŸ†αž“αž½αžšαž”αž“αŸ’αžαŸ‚αž˜αž”αž„αŸ’αž αžΆαž‰ start αž“αž·αž„ end index (αž€αžΆαžšαž…αž˜αŸ’αž›αž„ 0 αž“αž·αž„ length string - 1) + +```py +challenge = 'thirty days of python' +sub_string = 'da' +print(challenge.rindex(sub_string)) # 8 +print(challenge.rindex(sub_string, 9)) # error +``` + +- isalnum(): αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαž½αžšαž’αž€αŸ’αžŸαžšαž“αž·αž„αž›αŸαž + +```py +challenge = 'ThirtyDaysPython' +print(challenge.isalnum()) # True + +challenge = '30DaysPython' +print(challenge.isalnum()) # True + +challenge = 'thirty days of python' +print(challenge.isalnum()) # False, space is not an alphanumeric character + +challenge = 'thirty days of python 2019' +print(challenge.isalnum()) # False +``` + +- isalpha(): αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαž½αžšαž’αž€αŸ’αžŸαžšαž”αŸ’αžšαžŸαž·αž“αž”αžΎ string αž‚αžΊαž‡αžΆαžαž½αžšαž’αž€αŸ’αžŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹(a-z and A-Z) + +```py +challenge = 'thirty days of python' +print(challenge.isalpha()) # False, space is once again excluded +challenge = 'ThirtyDaysPython' +print(challenge.isalpha()) # True +num = '123' +print(num.isalpha()) # False +``` + +- isdecimal(): αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαž½αžšαž’αž€αŸ’αžŸαžšαž”αŸ’αžšαžŸαž·αž“αž”αžΎ string αž‚αžΊαž‡αžΆdecimal (0-9) + +```py +challenge = 'thirty days of python' +print(challenge.isdecimal()) # False +challenge = '123' +print(challenge.isdecimal()) # True +challenge = '\u00B2' +print(challenge.isdigit()) # False +challenge = '12 3' +print(challenge.isdecimal()) # False, space not allowed +``` + +- isdigit(): αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαž½αžšαž’αž€αŸ’αžŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„string αž‚αžΊαž‡αžΆαž›αŸαž(0-9 and some other unicode characters for numbers) + +```py +challenge = 'Thirty' +print(challenge.isdigit()) # False +challenge = '30' +print(challenge.isdigit()) # True +challenge = '\u00B2' +print(challenge.isdigit()) # True +``` + +- isnumeric():αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαžΆαžαžΎαž’αž€αŸ’αžŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‚αžΊαž‡αžΆαž›αŸαžαž¬αž›αŸαžαžŠαŸ‚αž›αžαž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆ (αžŠαžΌαž… isdigit (((), αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‘αž‘αž½αž›αž™αž€αžŸαž‰αŸ’αž‰αžΆαž…αŸ’αžšαžΎαž“αž‡αžΆαž„, αžŠαžΌαž…αž‡αžΆ 1⁄2))) + +```py +num = '10' +print(num.isnumeric()) # True +num = '\u00BD' # Β½ +print(num.isnumeric()) # True +num = '10.5' +print(num.isnumeric()) # False +``` + +- isidentifier(): αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžŠαŸ‚αž›αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ - αžœαžΆαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαžΆαžαžΎ string αž‚αžΊαž‡αžΆvariableαžŠαŸ‚αž›αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ + +```py +challenge = '30DaysOfPython' +print(challenge.isidentifier()) # False, because it starts with a number +challenge = 'thirty_days_of_python' +print(challenge.isidentifier()) # True +``` + +- islower(): αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαž½αžšαž’αž€αŸ’αžŸαžšαž€αŸ’αž“αž»αž„stringαž‚αžΊαž‡αžΆlowercase + +```py +challenge = 'thirty days of python' +print(challenge.islower()) # True +challenge = 'Thirty days of python' +print(challenge.islower()) # False +``` + +- isupper(): αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαž½αžšαž’αž€αŸ’αžŸαžšαž€αŸ’αž“αž»αž„stringαž‚αžΊαž‡αžΆ uppercase + +```py +challenge = 'thirty days of python' +print(challenge.isupper()) # False +challenge = 'THIRTY DAYS OF PYTHON' +print(challenge.isupper()) # True +``` + +- join(): αž”αž‰αŸ’αž‡αžΌαž“ string αžŠαŸ‚αž›αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆ + +```py +web_tech = ['HTML', 'CSS', 'JavaScript', 'React'] +result = ' '.join(web_tech) +print(result) # 'HTML CSS JavaScript React' +``` + +```py +web_tech = ['HTML', 'CSS', 'JavaScript', 'React'] +result = '# '.join(web_tech) +print(result) # 'HTML# CSS# JavaScript# React' +``` + +- strip(): αžŠαž€αžαž½αž’αž€αŸ’αžŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž…αžΆαž”αŸ‹αž–αžΈαžŠαžΎαž˜αž“αž·αž„αž…αž»αž„αž“αŸƒ string + +```py +challenge = 'thirty days of pythoonnn' +print(challenge.strip('noth')) # 'irty days of py' +``` + +- replace(): αž‡αŸ†αž“αž½αžŸ substring αžŠαŸ„αž™ string αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹ + +```py +challenge = 'thirty days of python' +print(challenge.replace('python', 'coding')) # 'thirty days of coding' +``` + +- split(): αž”αŸ†αž”αŸ‚αž€string, αž”αŸ’αžšαžΎstring αž¬αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž‡αžΆαž”αŸ†αž”αŸ‚αž€ + +```py +challenge = 'thirty days of python' +print(challenge.split()) # ['thirty', 'days', 'of', 'python'] +challenge = 'thirty, days, of, python' +print(challenge.split(', ')) # ['thirty', 'days', 'of', 'python'] +``` + +- title(): αž€αŸ‚αž”αŸ’αžšαŸ‚αžαž½αž’αž€αŸ’αžŸαžšαž•αŸ’αžŠαžΎαž˜αž“αŸƒαž–αžΆαž€αŸ’αž™αž‡αžΆuppercaseαž“αž·αž„αž’αž€αŸ’αžŸαžšαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‡αžΆlowercase + +```py +challenge = 'thirty days of python' +print(challenge.title()) # Thirty Days Of Python +``` + +- swapcase(): αž”αž˜αŸ’αž›αŸ‚αž„αž’αž€αŸ’αžŸαžšαž’αŸ†αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ…αž‡αžΆαž’αž€αŸ’αžŸαžšαžαžΌαž… αž“αž·αž„αž’αž€αŸ’αžŸαžšαžαžΌαž…αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ…αž‡αžΆαž’αž€αŸ’αžŸαžšαž’αŸ† + +```py +challenge = 'thirty days of python' +print(challenge.swapcase()) # THIRTY DAYS OF PYTHON +challenge = 'Thirty Days Of Python' +print(challenge.swapcase()) # tHIRTY dAYS oF pYTHON +``` + +- startswith(): αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαžΆ String αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ String αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ + +```py +challenge = 'thirty days of python' +print(challenge.startswith('thirty')) # True + +challenge = '30 days of python' +print(challenge.startswith('thirty')) # False +``` + +πŸŒ• You are an extraordinary person and you have a remarkable potential. You have just completed day 4 challenges and you are four steps a head in to your way to greatness. Now do some exercises for your brain and muscles. + diff --git a/Khmer/05_Day_Lists/05_lists.md b/Khmer/05_Day_Lists/05_lists.md new file mode 100644 index 000000000..a5d05dfbc --- /dev/null +++ b/Khmer/05_Day_Lists/05_lists.md @@ -0,0 +1,526 @@ +
+

30 Days Of Python: Day 5 - Lists

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July - 2021 +
+ +
+ +[<< Day 4](../04_Day_Strings/04_strings.md) | [Day 6 >>](../06_Day_Tuples/06_tuples.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [Day 5](#day-5) + - [Lists](#lists) + - [How to Create a List](#how-to-create-a-list) + - [Accessing List Items Using Positive Indexing](#accessing-list-items-using-positive-indexing) + - [Accessing List Items Using Negative Indexing](#accessing-list-items-using-negative-indexing) + - [Unpacking List Items](#unpacking-list-items) + - [Slicing Items from a List](#slicing-items-from-a-list) + - [Modifying Lists](#modifying-lists) + - [Checking Items in a List](#checking-items-in-a-list) + - [Adding Items to a List](#adding-items-to-a-list) + - [Inserting Items into a List](#inserting-items-into-a-list) + - [Removing Items from a List](#removing-items-from-a-list) + - [Removing Items Using Pop](#removing-items-using-pop) + - [Removing Items Using Del](#removing-items-using-del) + - [Clearing List Items](#clearing-list-items) + - [Copying a List](#copying-a-list) + - [Joining Lists](#joining-lists) + - [Counting Items in a List](#counting-items-in-a-list) + - [Finding Index of an Item](#finding-index-of-an-item) + - [Reversing a List](#reversing-a-list) + - [Sorting List Items](#sorting-list-items) + +# Day 5 + +## Lists + +αž˜αžΆαž“αž‘αž˜αŸ’αžšαž„αŸ‹ ៀ αž”αŸ’αžšαž—αŸαž‘αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„ Python + +- List: αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆ αž“αž·αž„αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αŸ” αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αžŸαž˜αžΆαž‡αž·αž€αžŠαžŠαŸ‚αž› ឬ αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αž‚αŸ’αž“αžΆ +- Tuple: αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆ αž“αž·αž„αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž¬αž˜αž·αž“αž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚ αŸ” αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αžŸαž˜αžΆαž‡αž·αž€αžŠαžŠαŸ‚αž› ឬ αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αž‚αŸ’αž“αžΆ +- Set: αž‚αžΊαž‡αžΆαž”αŸ’αžšαž˜αžΌαž›αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž›αŸ†αžŠαžΆαž”αŸ‹ αž“αž·αž„αž˜αž·αž“αž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αž”αžΆαž“αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αžœαžαŸ’αžαž»αžαŸ’αž˜αžΈαž‘αŸ…αž€αŸ’αž“αž»αž„ set αŸ” αž˜αž·αž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αžŸαž˜αžΆαž‡αž·αž€ ឬ αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αž‚αŸ’αž“αžΆ +- Dictionary: αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαŸ€αž”αž…αŸ†, αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž“αž·αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ” αž˜αž·αž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αžŸαž˜αžΆαž‡αž·αž€ ឬ αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αž‚αŸ’αž“αžΆ + +αž”αž‰αŸ’αž‡αžΈαž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆ αž“αž·αž„αž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αŸ” αž”αž‰αŸ’αž‡αžΈαž˜αž½αž™αž’αžΆαž…αž‚αŸ’αž˜αžΆαž“αž¬αž’αžΆαž…αž˜αžΆαž“αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž•αŸ’αžŸαŸαž„αŸ— + +### How to create a List + +αž€αŸ’αž“αž»αž„ Python αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž‡αžΈαž”αžΆαž“ 2 αžœαž·αž’αžΈ: + +- αž”αŸ’αžšαžΎ list built-in function + +```py +# syntax +lst = list() +``` + +```py +empty_list = list() # αž“αŸαŸ‡αž‡αžΆ list αž‚αŸ’αž˜αžΆαž“αž”αž‰αŸ’αž‡αžΈ ឬ αž‘αž·αž“αŸ’αž“αž“αŸαž™ + +print(len(empty_list)) # 0 +``` + +- αž”αŸ’αžšαžΎ square brackets, [] + +```py +# syntax +lst = [] +``` + +```py +empty_list = [] # αž“αŸαŸ‡αž‡αžΆ list αž‚αŸ’αž˜αžΆαž“αž”αž‰αŸ’αž‡αžΈ ឬ αž‘αž·αž“αŸ’αž“αž“αŸαž™ +print(len(empty_list)) # 0 +``` + +Lists αžŠαŸ‚αž›αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ†αž”αžΌαž„. αž™αžΎαž„αž”αŸ’αžšαžΎ _len()_ αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αž‘αŸ†αž αŸ†αž“αŸƒ list + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] # list of fruits +vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot'] # list of vegetables +animal_products = ['milk', 'meat', 'butter', 'yoghurt'] # list of animal products +web_techs = ['HTML', 'CSS', 'JS', 'React','Redux', 'Node', 'MongDB'] # list of web technologies +countries = ['Finland', 'Estonia', 'Denmark', 'Sweden', 'Norway'] + +# αž”αž„αŸ’αž αžΆαž‰ list αž“αž·αž„αž”αŸ’αžšαžœαŸ‚αž„αžšαž”αžŸαŸ‹αžœαžΆαŸ” +print('Fruits:', fruits) +print('Number of fruits:', len(fruits)) +print('Vegetables:', vegetables) +print('Number of vegetables:', len(vegetables)) +print('Animal products:',animal_products) +print('Number of animal products:', len(animal_products)) +print('Web technologies:', web_techs) +print('Number of web technologies:', len(web_techs)) +print('Countries:', countries) +print('Number of countries:', len(countries)) +``` + +```sh +output +Fruits: ['banana', 'orange', 'mango', 'lemon'] +Number of fruits: 4 +Vegetables: ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] +Number of vegetables: 5 +Animal products: ['milk', 'meat', 'butter', 'yoghurt'] +Number of animal products: 4 +Web technologies: ['HTML', 'CSS', 'JS', 'React', 'Redux', 'Node', 'MongDB'] +Number of web technologies: 7 +Countries: ['Finland', 'Estonia', 'Denmark', 'Sweden', 'Norway'] +Number of countries: 5 +``` + +- Lists αž’αžΆαž…αž˜αžΆαž“αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αžŸαŸαž„αŸ— + +```py + lst = ['Asabeneh', 250, True, {'country':'Finland', 'city':'Helsinki'}] # list αž˜αžΆαž“αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆ +``` + +### Accessing List Items Using Positive Indexing + +αž™αžΎαž„αž’αžΆαž…αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αžΈαž˜αž½αž™αŸ— αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈ αžŠαŸ„αž™αž”αŸ’αžšαžΎ indexαŸ” αž”αž‰αŸ’αž‡αžΈ index αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈ 0αŸ” αžšαžΌαž”αž—αžΆαž–αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž”αž„αŸ’αž αžΆαž‰αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆ តើ index αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸ…αž―αžŽαžΆαŸ” +![List index](../images/list_index.png) + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +first_fruit = fruits[0] # αž™αžΎαž„αž€αŸ†αž–αž»αž„αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžœαžαŸ’αžαž»αž‘αžΈαž˜αž½αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎ index αžšαž”αžŸαŸ‹αžœαžΆ +print(first_fruit) # banana +second_fruit = fruits[1] +print(second_fruit) # orange +last_fruit = fruits[3] +print(last_fruit) # lemon +# index αž…αž»αž„αž€αŸ’αžšαŸ„αž™ +last_index = len(fruits) - 1 +last_fruit = fruits[last_index] +``` + +### Accessing List Items Using Negative Indexing + +Indexing αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“ αž˜αžΆαž“αž“αŸαž™αžαžΆ αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž…αž»αž„, -1 αžŸαŸ†αžŠαŸ…αž‘αŸ…αž›αžΎαž…αŸ†αžŽαž»αž…αž…αž»αž„αž€αŸ’αžšαŸ„αž™, -2 αžŸαŸ†αžŠαŸ…αž‘αŸ…αž›αžΎαž…αŸ†αžŽαž»αž…αž˜αž»αž“αž…αž»αž„αž€αŸ’αžšαŸ„αž™ +αŸ” + +![List negative indexing](../images/list_negative_indexing.png) + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +first_fruit = fruits[-4] +last_fruit = fruits[-1] +second_last = fruits[-2] +print(first_fruit) # banana +print(last_fruit) # lemon +print(second_last) # mango +``` + +### Unpacking List Items + +```py +lst = ['item','item2','item3', 'item4', 'item5'] +first_item, second_item, third_item, *rest = lst +print(first_item) # item1 +print(second_item) # item2 +print(third_item) # item3 +print(rest) # ['item4', 'item5'] + +``` + +```py +# αž§αž‘αžΆαž αžšαžŽαŸαž‘αžΈαž˜αž½αž™ +fruits = ['banana', 'orange', 'mango', 'lemon','lime','apple'] +first_fruit, second_fruit, third_fruit, *rest = lst +print(first_fruit) # banana +print(second_fruit) # orange +print(third_fruit) # mango +print(rest) # ['lemon','lime','apple'] +# αž§αž‘αžΆαž αžšαžŽαŸαž‘αžΈαž–αžΈαžšαž’αŸ†αž–αžΈαž”αž‰αŸ’αž…αŸαž‰ list +first, second, third,*rest, tenth = [1,2,3,4,5,6,7,8,9,10] +print(first) # 1 +print(second) # 2 +print(third) # 3 +print(rest) # [4,5,6,7,8,9] +print(tenth) # 10 +# αž§αž‘αžΆαž αžšαžŽαŸαž‘αžΈαž”αžΈαž’αŸ†αž–αžΈαž”αž‰αŸ’αž…αŸαž‰ list +countries = ['Germany', 'France','Belgium','Sweden','Denmark','Finland','Norway','Iceland','Estonia'] +gr, fr, bg, sw, *scandic, es = countries +print(gr) +print(fr) +print(bg) +print(sw) +print(scandic) +print(es) +``` + +### Slicing Items from a List + +- Positive Indexing: αž™αžΎαž„αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž’αžαž·αž”αžšαž˜αžΆαž“αŸƒαžœαž·αž—αžΆαž‚αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αžŠαŸ„αž™αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜, αž”αž‰αŸ’αž…αž”αŸ‹αž“αž·αž„αž‡αŸ†αž αžΆαž“, αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαž‘αž”αŸ‹αž“αžΉαž„αž‡αžΆ list αžαŸ’αž˜αžΈαŸ” (αžαž˜αŸ’αž›αŸƒαžŠαžΎαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ start = 0, end = len(lst) - 1 (αžœαžαŸ’αžαž»αž…αž»αž„αž€αŸ’αžšαŸ„αž™), step = 1) + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +all_fruits = fruits[0:4] # αžœαžΆαžαŸ’αžšαž›αž”αŸ‹ fruits αž˜αž€αžœαž·αž‰αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ +# αž“αŸαŸ‡αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž›αž‘αŸ’αž’αž•αž›αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αž›αž‘αŸ’αž’αž•αž›αžαžΆαž„αž›αžΎ +all_fruits = fruits[0:] # αž”αžΎαž™αžΎαž„αž˜αž·αž“αž€αŸ†αžŽαžαŸ‹αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžˆαž”αŸ‹ αžœαžΆαž“αžΉαž„αž™αž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ +orange_and_mango = fruits[1:3] # αžœαžΆαž˜αž·αž“αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž› index αž‘αžΈαž˜αž½αž™αž‘αŸ +orange_mango_lemon = fruits[1:] +orange_and_lemon = fruits[::2] # αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎ argument αž‘αžΈαŸ£, αž‡αŸ†αž αžΆαž“. αžœαžΆαž“αžΉαž„αž™αž€αž…αŸ†αžŽαŸ‚αž€αž‘αžΈαž–αžΈαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ - ['banana', 'mango'] +``` + +- Negative Indexing: αž™αžΎαž„αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž’αžαž·αž”αžšαž˜αžΆαž“αŸƒαž€αž˜αŸ’αžšαž·αžαž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αžŠαŸ„αž™αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜, αž”αž‰αŸ’αž…αž”αŸ‹αž“αž·αž„αž‡αŸ†αž αžΆαž“, αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαž‘αž”αŸ‹αž“αžΉαž„αž‡αžΆ list αžαŸ’αž˜αžΈαŸ” + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +all_fruits = fruits[-4:] # αžœαžΆαžαŸ’αžšαž›αž”αŸ‹ fruits αž˜αž€αžœαž·αž‰αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ +orange_and_mango = fruits[-3:-1] # αžœαžΆαž˜αž·αž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› index αž…αž»αž„αž€αŸ’αžšαŸ„αž™, ['orange', 'mango'] +orange_mango_lemon = fruits[-3:] # αž“αŸαŸ‡ αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž…αžΆαž”αŸ‹αž–αžΈ -3 αžŠαž›αŸ‹ αž…αž»αž„,['orange', 'mango', 'lemon'] +reverse_fruits = fruits[::-1] # αž‡αŸ†αž αžΆαž“αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž“αžΉαž„αž™αž€ list αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸ, ['lemon', 'mango', 'orange', 'banana'] +``` + +### Modifying Lists + +List αž‚αžΊαž‡αžΆαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž¬αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž”αž‰αŸ’αž‡αžΈαž“αŸƒαž―αž€αžŸαžΆαžšαŸ” αž™αžΎαž„αžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš fruit listαŸ” + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits[0] = 'avocado' +print(fruits) # ['avocado', 'orange', 'mango', 'lemon'] +fruits[1] = 'apple' +print(fruits) # ['avocado', 'apple', 'mango', 'lemon'] +last_index = len(fruits) - 1 +fruits[last_index] = 'lime' +print(fruits) # ['avocado', 'apple', 'mango', 'lime'] +``` + +### Checking Items in a List + +αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž’αžΆαžαŸ’αžšαžΆαž˜αž½αž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž‡αžΆαžŸαž˜αžΆαž‡αž·αž€αž“αŸƒ list αžŠαŸ„αž™αž”αŸ’αžšαžΎ *in* operator αŸ” αžŸαžΌαž˜αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„ αž€αŸ’αžšαŸ„αž˜αŸ” + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +does_exist = 'banana' in fruits +print(does_exist) # True +does_exist = 'lime' in fruits +print(does_exist) # False +``` + +### Adding Items to a List + +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αžœαžαŸ’αžαž»αž‘αŸ…αž…αž»αž„αž“αŸƒαž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž˜αžΆαž“αž™αžΎαž„αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš *append()*. + +```py +# syntax +lst = list() +lst.append(item) +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.append('apple') +print(fruits) # ['banana', 'orange', 'mango', 'lemon', 'apple'] +fruits.append('lime') # ['banana', 'orange', 'mango', 'lemon', 'apple', 'lime'] +print(fruits) +``` + +### Inserting Items into a List + +αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ *insert()* αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αžΌαž›αžœαžαŸ’αžαž»αžαŸ‚αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ list αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹. αžŸαžΌαž˜αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαžΆ αžœαžαŸ’αžαž» αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αžαžΆαž„αžŸαŸ’αžαžΆαŸ†αŸ” *insert()* αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž™αž€αž–αžΈαžš arguments: index αž“αž·αž„αžœαžαŸ’αžαž»αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αžΌαž›αŸ” + +```py +# syntax +lst = ['item1', 'item2'] +lst.insert(index, item) +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.insert(2, 'apple') # insert apple between orange and mango +print(fruits) # ['banana', 'orange', 'apple', 'mango', 'lemon'] +fruits.insert(3, 'lime') # ['banana', 'orange', 'apple', 'lime', 'mango', 'lemon'] +print(fruits) +``` + +### Removing Items from a List + +αžœαž·αž’αžΈ remove αž›αž»αž”αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž–αžΈαž”αž‰αŸ’αž‡αžΈ + +```py +# syntax +lst = ['item1', 'item2'] +lst.remove(item) +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon', 'banana'] +fruits.remove('banana') +print(fruits) # ['orange', 'mango', 'lemon', 'banana'] - αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸαŸ‡αž›αž»αž”αž…αŸ„αž›αž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αžŠαŸ†αž”αžΌαž„αž“αŸƒαžœαžαŸ’αžαž»αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈ +fruits.remove('lemon') +print(fruits) # ['orange', 'mango', 'banana'] +``` + +### Removing Items Using Pop + +*pop()* αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ (αž¬αž”αž‰αŸ’αž‡αžΈαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αž‰αŸ’αž‡αžΈαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹): + +```py +# syntax +lst = ['item1', 'item2'] +lst.pop() # αžœαžαŸ’αžαž»αž…αž»αž„αž€αŸ’αžšαŸ„αž™ +lst.pop(index) +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.pop() +print(fruits) # ['banana', 'orange', 'mango'] + +fruits.pop(0) +print(fruits) # ['orange', 'mango'] +``` + +### Removing Items Using Del + +*del* keyword αž›αž»αž”αž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ αž αžΎαž™αžœαžΆαž€αŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž›αž»αž”αžœαžαŸ’αžαž»αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžœαŸ‚αž„ index αŸ” αžœαžΆαž€αŸαž’αžΆαž…αž›αž»αž” list αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ + +```py +# syntax +lst = ['item1', 'item2'] +del lst[index] # αžαŸ‚αž˜αž½αž™αž˜αž»αž +del lst # αž›αž»αž” list αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon', 'kiwi', 'lime'] +del fruits[0] +print(fruits) # ['orange', 'mango', 'lemon', 'kiwi', 'lime'] +del fruits[1] +print(fruits) # ['orange', 'lemon', 'kiwi', 'lime'] +del fruits[1:3] # αž“αŸαŸ‡αž›αž»αž”αžšαžœαžΆαž„ index αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹, αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž˜αž·αž“αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹ index 3 αž‘αŸ! +print(fruits) # ['orange', 'lime'] +del fruits +print(fruits) # αž“αŸαŸ‡αž’αžΆαž…αž•αŸ’αžαž›αŸ‹: NameError: name 'fruits' is not defined +``` + +### Clearing List Items + +*clear()* αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž‘αž‘αŸ list: + +```py +# syntax +lst = ['item1', 'item2'] +lst.clear() +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.clear() +print(fruits) # [] +``` + +### Copying a List + +αžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž‡αžΆαž›αž·αžαž·αžαž…αž˜αŸ’αž›αž„ list αžŠαŸ„αž™αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžœαžΆαž‘αŸ…αž›αžΎαž…αž›αž“αžΆαžαŸ’αžšαžΌαžœαžαŸ’αž˜αžΈαžŠαŸ„αž™αžœαž·αž’αžΈαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜: list2 = list1. αž₯ទូវ, list2 αž‚αžΊαž‡αžΆαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž“αŸƒ list1, αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž™αžΎαž„αž’αŸ’αžœαžΎαž“αŸ…αž€αŸ’αž“αž»αž„ list2 αž“αžΉαž„αž€αŸ‚αž”αŸ’αžšαŸ‚ original, list1. αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αž€αžšαžŽαžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž™αžΎαž„αž˜αž·αž“αž…αžΌαž›αž…αž·αžαŸ’αžαž€αŸ‚αž”αŸ’αžšαŸ‚ original αž‘αŸαž™αžΎαž„αž…αžΌαž›αž…αž·αžαŸ’αžαž˜αžΆαž“αž€αŸ†αžŽαŸ‚ αž•αŸ’αžŸαŸαž„αŸ—αŸ” αžœαž·αž’αžΈαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž…αŸ€αžŸαžœαžΆαž„αž”αž‰αŸ’αž αžΆαžαžΆαž„αž›αžΎαž‚αžΊαž”αŸ’αžšαžΎ _copy()_. + +```py +# syntax +lst = ['item1', 'item2'] +lst_copy = lst.copy() +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits_copy = fruits.copy() +print(fruits_copy) # ['banana', 'orange', 'mango', 'lemon'] +``` + +### Joining Lists + +αž˜αžΆαž“αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αžšαž½αž˜ ឬ αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› lists αž–αžΈαžš ឬ αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαž“αŸ…αž€αŸ’αž“αž»αž„ Python αŸ” + +- Plus Operator (+) + +```py +# syntax +list3 = list1 + list2 +``` + +```py +positive_numbers = [1, 2, 3, 4, 5] +zero = [0] +negative_numbers = [-5,-4,-3,-2,-1] +integers = negative_numbers + zero + positive_numbers +print(integers) # [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5] +fruits = ['banana', 'orange', 'mango', 'lemon'] +vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] +fruits_and_vegetables = fruits + vegetables +print(fruits_and_vegetables ) # ['banana', 'orange', 'mango', 'lemon', 'Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] +``` + +- αž”αž„ αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ extend() method + The *extend()* method αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž—αŸ’αž‡αžΆαž”αŸ‹ list αž€αŸ’αž“αž»αž„ listαŸ” αžŸαžΌαž˜αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” + +```py +# syntax +list1 = ['item1', 'item2'] +list2 = ['item3', 'item4', 'item5'] +list1.extend(list2) +``` + +```py +num1 = [0, 1, 2, 3] +num2= [4, 5, 6] +num1.extend(num2) +print('Numbers:', num1) # Numbers: [0, 1, 2, 3, 4, 5, 6] +negative_numbers = [-5,-4,-3,-2,-1] +positive_numbers = [1, 2, 3,4,5] +zero = [0] + +negative_numbers.extend(zero) +negative_numbers.extend(positive_numbers) +print('Integers:', negative_numbers) # Integers: [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5] +fruits = ['banana', 'orange', 'mango', 'lemon'] +vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] +fruits.extend(vegetables) +print('Fruits and vegetables:', fruits ) # Fruits and vegetables: ['banana', 'orange', 'mango', 'lemon', 'Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] +``` + +### Counting Items in a List + +The *count()* method αž±αŸ’αž™αž…αŸ†αž“αž½αž“αžŠαž„αžŠαŸ‚αž›αžœαžαŸ’αžαž»αž˜αž½αž™αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈ: + +```py +# syntax +lst = ['item1', 'item2'] +lst.count(item) +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +print(fruits.count('orange')) # 1 +ages = [22, 19, 24, 25, 26, 24, 25, 24] +print(ages.count(24)) # 3 +``` + +### Finding Index of an Item + +The *index()* method αž±αŸ’αž™ index αž“αŸƒαžœαžαŸ’αžαž»αž€αŸ’αž“αž»αž„ list: + +```py +# syntax +lst = ['item1', 'item2'] +lst.index(item) +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +print(fruits.index('orange')) # 1 +ages = [22, 19, 24, 25, 26, 24, 25, 24] +print(ages.index(24)) # 2, αž€αžšαžŽαžΈαžŠαŸ†αž”αžΌαž„ +``` + +### Reversing a List + +The *reverse()* method αž€αŸ‚αž”αŸ’αžšαŸ‚αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒ listαŸ” + +```py +# syntax +lst = ['item1', 'item2'] +lst.reverse() + +``` + +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.reverse() +print(fruits) # ['lemon', 'mango', 'orange', 'banana'] +ages = [22, 19, 24, 25, 26, 24, 25, 24] +ages.reverse() +print(ages) # [24, 25, 24, 26, 25, 24, 19, 22] +``` + +### Sorting List Items + +αžŠαžΎαž˜αŸ’αž”αžΈαžšαž…αž“αžΆ list αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ _sort()_ method or _sorted()_ built-in functions. The _sort()_ method αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αŸ†αžŠαžΆαž”αŸ‹αžœαžαŸ’αžαž»αž€αŸ’αž“αž»αž„ list αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž‘αžΎαž„ αž“αž·αž„αž€αŸ‚αž”αŸ’αžšαŸ‚ list αžŠαžΎαž˜αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž“αŸƒ _sort()_ method αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸαž‚αžΊαžŸαŸ’αž˜αžΎαž“αžΉαž„αž–αž·αž αžœαžΆαž“αžΉαž„αžšαŸ€αž”αž…αŸ†αž”αž‰αŸ’αž‡αžΈαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž…αž»αŸ‡αŸ” + +- sort(): αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž€αŸ‚αž”αŸ’αžšαŸ‚ list ដើម + + ```py + # syntax + lst = ['item1', 'item2'] + lst.sort() # αž›αŸ†αžŠαžΆαž”αŸ‹αž‘αžΎαž„ + lst.sort(reverse=True) # αž›αŸ†αžŠαžΆαž”αŸ‹αž…αž»αŸ‡ + ``` + + **Example:** + + ```py + fruits = ['banana', 'orange', 'mango', 'lemon'] + fruits.sort() + print(fruits) # αžαž˜αŸ’αžšαŸ€αž”αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž’αž€αŸ’αžαžšαž€αŸ’αžšαž˜, ['banana', 'lemon', 'mango', 'orange'] + fruits.sort(reverse=True) + print(fruits) # ['orange', 'mango', 'lemon', 'banana'] + ages = [22, 19, 24, 25, 26, 24, 25, 24] + ages.sort() + print(ages) # [19, 22, 24, 24, 24, 25, 25, 26] + + ages.sort(reverse=True) + print(ages) # [26, 25, 25, 24, 24, 24, 22, 19] + ``` + + sorted(): αž±αŸ’αž™ list αžŠαžΎαž›αž˜αžΆαž“αž›αŸ†αžŠαžΆαž”αŸ‹αžŠαŸ„αž™αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš list ដើម + **Example:** + + ```py + fruits = ['banana', 'orange', 'mango', 'lemon'] + print(sorted(fruits)) # ['banana', 'lemon', 'mango', 'orange'] + # αž›αŸ†αžŠαžΆαž”αŸ‹αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸ + fruits = ['banana', 'orange', 'mango', 'lemon'] + fruits = sorted(fruits,reverse=True) + print(fruits) # ['orange', 'mango', 'lemon', 'banana'] + ``` + +[<< Day 4](../04_Day_Strings/04_strings.md) | [Day 6 >>](../06_Day_Tuples/06_tuples.md) diff --git a/Khmer/06_Day_Tuples/06_tuples.md b/Khmer/06_Day_Tuples/06_tuples.md new file mode 100644 index 000000000..2be96b608 --- /dev/null +++ b/Khmer/06_Day_Tuples/06_tuples.md @@ -0,0 +1,225 @@ +
+

30 Days Of Python: Day 6 - Tuples

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 5](../05_Day_Lists/05_lists.md) | [Day 7 >>](../07_Day_Sets/07_sets.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [Day 6:](#day-6) + - [Tuples](#tuples) + - [Creating a Tuple](#creating-a-tuple) + - [Tuple length](#tuple-length) + - [Accessing Tuple Items](#accessing-tuple-items) + - [Slicing tuples](#slicing-tuples) + - [Changing Tuples to Lists](#changing-tuples-to-lists) + - [Checking an Item in a Tuple](#checking-an-item-in-a-tuple) + - [Joining Tuples](#joining-tuples) + - [Deleting Tuples](#deleting-tuples) + +# Day 6 + +## Tuples + +Tuple αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαž»αžŸαž‚αŸ’αž“αžΆ αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸ†αžŠαžΆαž”αŸ‹ αž“αž·αž„αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžΆαž”αžΆαž“. αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž Tuples αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž„αŸ‹αž€αŸ’αžšαž…αž€, ()αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› tuple αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αžœαžΆαž”αžΆαž“αž‘αŸαŸ” αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž add, insert, remove αž“αŸ…αž€αŸ’αž“αž»αž„ tuple αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž˜αž·αž“αž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αž”αžΆαž“αŸ” +αžαž»αžŸαž–αžΈαž”αž‰αŸ’αž‡αžΈ list, tuple αž˜αžΆαž“αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„ tuples: + +- tuple(): αž”αž„αŸ’αž€αžΎαž tuple +- count(): αžšαžΆαž”αŸ‹αž…αŸ†αž“αž½αž“αžœαžαŸ’αžαž»αž“αŸ…αž€αŸ’αž“αž»αž„ tuple +- index(): αžšαž€αž›αŸαžαžšαŸ€αž„αž“αŸƒαžœαžαŸ’αžαž»αžŽαžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ tuple +- + operator: αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αžΌαž› tuples αž–αžΈαžšαž¬αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž“αŸαŸ‡αž“αž·αž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž tuple αžαŸ’αž˜αžΈ + +### Creating a Tuple + +- Tuple αž‘αž‘αŸ: αž”αž„αŸ’αž€αžΎαž tuple αž‘αž‘αŸ + + ```py + # syntax + empty_tuple = () + # or using the tuple constructor + empty_tuple = tuple() + ``` + +- Tuple αž˜αžΆαž“αžœαžαŸ’αžαž»αž“αŸ…αž€αŸ’αž“αž»αž„αž–αžΈαžŠαžΎαž˜ + + ```py + # syntax + tpl = ('item1', 'item2','item3') + ``` + + ```py + fruits = ('banana', 'orange', 'mango', 'lemon') + ``` + +### Tuple length + +αž™αžΎαž„αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž _len()_ αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αž…αŸ†αž“αž½αž“αžœαžαŸ’αžαž»αž“αŸ…αž€αŸ’αž“αž»αž„ tupleαŸ” + +```py +# syntax +tpl = ('item1', 'item2', 'item3') +len(tpl) +``` + +### Accessing Tuple Items + +αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžœαžαŸ’αžαž»αžšαž”αžŸαŸ‹ tuple + +- Positive Indexing + αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„ list αž™αžΎαž„αž”αŸ’αžšαžΎ indexing αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“ ឬ αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž…αŸ†αžŽαž»αž…αžŽαžΆαž˜αž½αž™αž“αŸƒ tuple αŸ” + ![Accessing tuple items](../images/tuples_index.png) + + ```py + # Syntax + tpl = ('item1', 'item2', 'item3') + first_item = tpl[0] + second_item = tpl[1] + ``` + + ```py + fruits = ('banana', 'orange', 'mango', 'lemon') + first_fruit = fruits[0] + second_fruit = fruits[1] + last_index =len(fruits) - 1 + last_fruit = fruits[las_index] + ``` + +- Negative indexing + Indexing αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“ αž˜αžΆαž“αž“αŸαž™αžαžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹, -1 αžŸαŸ†αžŠαŸ…αž‘αŸ…αž›αžΎαž…αŸ†αžŽαž»αž…αž…αž»αž„αž€αŸ’αžšαŸ„αž™, -2 αžŸαŸ†αžŠαŸ…αž‘αŸ…αž›αžΎαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž‘αžΈαž–αžΈαžš αž“αž·αž„ αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž“αŸƒαž”αŸ’αžšαžœαŸ‚αž„ list/tuple αžŸαŸ†αžŠαŸ…αž‘αŸ…αž›αžΎαž…αŸ†αžŽαž»αž…αžŠαŸ†αž”αžΌαž„αŸ” + ![Tuple Negative indexing](../images/tuple_negative_indexing.png) + + ```py + # Syntax + tpl = ('item1', 'item2', 'item3','item4') + first_item = tpl[-4] + second_item = tpl[-3] + ``` + + ```py + fruits = ('banana', 'orange', 'mango', 'lemon') + first_fruit = fruits[-4] + second_fruit = fruits[-3] + last_fruit = fruits[-1] + ``` + +### Slicing tuples + +αž™αžΎαž„αž’αžΆαž…αž€αžΆαžαŸ‹ sub-tuple αžŠαŸ„αž™αž€αŸ†αžŽαžαŸ‹αž“αžΌαžœαž’αžαŸ’αžšαžΆαž“αŸƒ index αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž“αž·αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ tuple, αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆ tuple αžαŸ’αž˜αžΈαŸ” + +- αž€αž˜αŸ’αžšαž·αžαž“αŸƒ index αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“ + + ```py + # Syntax + tpl = ('item1', 'item2', 'item3','item4') + all_items = tpl[0:4] # αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ + all_items = tpl[0:] # αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ + middle_two_items = tpl[1:3] # αž˜αž·αž“αž˜αžΆαž“αžœαžαŸ’αžαž»αž“αŸ… index 3 + ``` + + ```py + fruits = ('banana', 'orange', 'mango', 'lemon') + all_fruits = fruits[0:4] # αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ + all_fruits = fruits[0:] # αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ + orange_mango = fruits[1:3] # αž˜αž·αž“αž˜αžΆαž“αžœαžαŸ’αžαž»αž“αŸ… index 3 + orange_to_the_rest = fruits[1:] + ``` + +- αž€αž˜αŸ’αžšαž·αžαž“αŸƒ index αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“ + + ```py + # Syntax + tpl = ('item1', 'item2', 'item3','item4') + all_items = tpl[-4:] # αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ + middle_two_items = tpl[-3:-1] # αž˜αž·αž“αž˜αžΆαž“αžœαžαŸ’αžαž»αž“αŸ… index 3 (-1) + ``` + + ```py + fruits = ('banana', 'orange', 'mango', 'lemon') + all_fruits = fruits[-4:] # αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ + orange_mango = fruits[-3:-1] # dαž˜αž·αž“αž˜αžΆαž“αžœαžαŸ’αžαž»αž“αŸ… index 3 + orange_to_the_rest = fruits[-3:] + ``` + +### Changing Tuples to Lists + +αž™αžΎαž„αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš tuples αž‘αŸ…αž‡αžΆ lists αž“αž·αž„ lists αž‘αŸ…αž‡αžΆ tuplesαŸ” Tuple αž‚αžΊαž˜αž·αž“αž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž› αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž€αŸ‚αž”αŸ’αžšαŸ‚ tuple αž™αžΎαž„αžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžœαžΆαž‘αŸ…αž‡αžΆ listαŸ” + +```py +# Syntax +tpl = ('item1', 'item2', 'item3','item4') +lst = list(tpl) +``` + +```py +fruits = ('banana', 'orange', 'mango', 'lemon') +fruits = list(fruits) +fruits[0] = 'apple' +print(fruits) # ['apple', 'orange', 'mango', 'lemon'] +fruits = tuple(fruits) +print(fruits) # ('apple', 'orange', 'mango', 'lemon') +``` + +### Checking an Item in a Tuple + +αž™αžΎαž„αž’αžΆαž…αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαžΆαžαžΎαžœαžαŸ’αžαž™αž˜αžΆαž“αž¬αž‚αŸ’αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ tuple αžŠαŸ„αž™αž”αŸ’αžšαžΎ _in_ αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž‡αžΆ αž…αŸ†αž“αž½αž“αž”αŸŠαžΌαž›αžΈαž“ boolean αŸ” + +```py +# Syntax +tpl = ('item1', 'item2', 'item3','item4') +'item2' in tpl # True +``` + +```py +fruits = ('banana', 'orange', 'mango', 'lemon') +print('orange' in fruits) # True +print('apple' in fruits) # False +fruits[0] = 'apple' # TypeError: 'tuple' object does not support item assignment +``` + +### Joining Tuples + +αž™αžΎαž„αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆ tuples αž–αžΈαžšαž¬αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš + + +```py +# syntax +tpl1 = ('item1', 'item2', 'item3') +tpl2 = ('item4', 'item5','item6') +tpl3 = tpl1 + tpl2 +``` + +```py +fruits = ('banana', 'orange', 'mango', 'lemon') +vegetables = ('Tomato', 'Potato', 'Cabbage','Onion', 'Carrot') +fruits_and_vegetables = fruits + vegetables +``` + +### Deleting Tuples + +It is not possible to remove a single item in a tuple but it is possible to delete the tuple itself using _del_. +αž˜αž·αž“αž’αžΆαž…αž›αž»αž”αžœαžαŸ’αžαž»αž€αŸ’αž“αž»αž„ tuple αž”αžΆαž“αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž’αžΆαž…αž›αž»αž” tuple αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ‚αž˜αŸ’αžαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎ _del_ αŸ” + +```py +# syntax +tpl1 = ('item1', 'item2', 'item3') +del tpl1 + +``` + +```py +fruits = ('banana', 'orange', 'mango', 'lemon') +del fruits +``` + +[<< Day 5](../05_Day_Lists/05_lists.md) | [Day 7 >>](../07_Day_Sets/07_sets.md) diff --git a/Khmer/07_Day_Sets/07_sets.md b/Khmer/07_Day_Sets/07_sets.md new file mode 100644 index 000000000..c365e5458 --- /dev/null +++ b/Khmer/07_Day_Sets/07_sets.md @@ -0,0 +1,392 @@ +
+

30 Days Of Python: Day 7 - Sets

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 6](../06_Day_Tuples/06_tuples.md) | [Day 8 >>](../08_Day_Dictionaries/08_dictionaries.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 7](#-day-7) + - [Sets](#sets) + - [Creating a Set](#creating-a-set) + - [Getting Set's Length](#getting-sets-length) + - [Accessing Items in a Set](#accessing-items-in-a-set) + - [Checking an Item](#checking-an-item) + - [Adding Items to a Set](#adding-items-to-a-set) + - [Removing Items from a Set](#removing-items-from-a-set) + - [Clearing Items in a Set](#clearing-items-in-a-set) + - [Deleting a Set](#deleting-a-set) + - [Converting List to Set](#converting-list-to-set) + - [Joining Sets](#joining-sets) + - [Finding Intersection Items](#finding-intersection-items) + - [Checking Subset and Super Set](#checking-subset-and-super-set) + - [Checking the Difference Between Two Sets](#checking-the-difference-between-two-sets) + - [Finding Symmetric Difference Between Two Sets](#finding-symmetric-difference-between-two-sets) + - [Joining Sets](#joining-sets) + +# πŸ“˜ Day 7 + +## Sets + +set αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž“αŸƒαžœαžαžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αž›αŸ†αžŠαžΆαž”αŸ‹αž“αž·αž„αž‚αŸ’αž˜αžΆαž“ indexαŸ” αž€αŸ’αž“αž»αž„ Python, set αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž˜αžΆαž“αžαŸ‚αž˜αž½αž™αžšαž”αžŸαŸ‹αžœαžΆ, αž αžΎαž™αžœαžΆαž’αžΆαž…αžšαž€αž”αžΆαž“ _union_, _intersection_, _difference_, _symmetric difference_, _subset_, _super set_ and _disjoint set_ αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜ sets. + +### Creating a Set + +αž™αžΎαž„αž”αŸ’αžšαžΎ {} αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž set ឬ _set()_ built-in function. + +- αž”αž„αŸ’αž€αžΎαž set αž‘αž‘αŸαžš + +```py +# syntax +st = {} +# or +st = set() +``` + +- αž”αž„αŸ’αž€αžΎαž set αž˜αžΆαž“αžœαžαŸ’αžαž»αžŸαŸ’αžšαžΆαž”αŸ‹ + +```py +# syntax +st = {'item1', 'item2', 'item3', 'item4'} +``` + +**Example:** + +```py +# syntax +fruits = {'banana', 'orange', 'mango', 'lemon'} +``` + +### Getting Set's Length + +αž™αžΎαž„αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž **len()** αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αž…αŸ†αž“αž½αž“αžœαžαŸ’αžαž»αž“αŸ…αž€αŸ’αž“αž»αž„ setαŸ” + +```py +# syntax +st = {'item1', 'item2', 'item3', 'item4'} +len(set) +``` + +**Example:** + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +len(fruits) +``` + +### Accessing Items in a Set + +αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžœαžαŸ’αžαž»αžšαž”αžŸαŸ‹ set + +αž™αžΎαž„αž”αŸ’αžšαžΎ loop αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αž”αŸ’αžšαžΎαžœαžαŸ’αžαž»αž“αŸ…αž€αŸ’αž“αž»αž„ setαŸ” + +### Checking an Item + +αž™αžΎαž„αž’αžΆαž…αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαžΆαžαžΎαžœαžαŸ’αžαž™αž˜αžΆαž“αž¬αž‚αŸ’αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ set αžŠαŸ„αž™αž”αŸ’αžšαžΎ _in_ αŸ” + +```py +# syntax +st = {'item1', 'item2', 'item3', 'item4'} +print("Does set st contain item3? ", 'item3' in st) # Does set st contain item3? True +``` + +**Example:** + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +print('mango' in fruits ) # True +``` + +### Adding Items to a Set + +αž”αž“αŸ’αžαŸ‚αž˜αžœαžαŸ’αžαž»αž‘αŸ…αž€αŸ’αž“αž»αž„ set αŸ” +αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› set αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αŸ’αžœαžΈαŸ— αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž’αžΆαž…αžŠαžΆαž€αŸ‹αžœαžαŸ’αžαž»αž…αžΌαž›αž”αž“αŸ’αžαŸ‚αž˜αž”αžΆαž“αŸ” + +- αžŠαžΆαž€αŸ‹αžœαžαŸ’αžαž»αž…αžΌαž›αž”αž“αŸ’αžαŸ‚αž˜αž˜αž½αž™αž”αŸ’αžšαžΎ _add()_ + +```py +# syntax +st = {'item1', 'item2', 'item3', 'item4'} +st.add('item5') +``` + +**Example:** + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +fruits.add('lime') +``` + +- αžŠαžΆαž€αŸ‹αžœαžαŸ’αžαž»αž…αžΌαž›αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αžšαžΎαž“αž”αŸ’αžšαžΎ _update()_ + +```py +# syntax +st = {'item1', 'item2', 'item3', 'item4'} +st.update(['item5','item6','item7']) +``` + +**Example:** + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +vegetables = ('tomato', 'potato', 'cabbage','onion', 'carrot') +fruits.update(vegetables) +``` + +### Removing Items from a Set + +αž™αžΎαž„αž’αžΆαž…αž›αž»αž”αžœαžαŸ’αžαž»αž˜αž½αž™αž…αŸαž‰αž–αžΈαž€αŸ†αžšαž·αžαžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž _remove()_ αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžαŸ’αžαž»αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰ _remove()_ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αžΉαž„αž”αž„αŸ’αž€αžΎαž error, αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž™αžΎαž„αž‚αž½αžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαžœαžαŸ’αžαž»αž“αŸ„αŸ‡αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ set αžŠαŸ‚αž›αž’αžαŸ‹αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™, αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž _discard()_ αž˜αž·αž“αž”αž‰αŸ’αž…αŸαž‰ error αž‘αŸαŸ” + +```py +# syntax +st = {'item1', 'item2', 'item3', 'item4'} +st.remove('item2') +``` + +αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž pop() αž›αž»αž”αžœαžαŸ’αžαž»αžŽαžΆαž˜αž½αž™αžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αž–αžΈ set αž αžΎαž™αžœαžΆαž“αžΉαž„αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž›αž»αž”αž…αŸ„αž›αŸ” + +**Example:** + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +fruits.pop() # removes a random item from the set + +``` + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αžΉαž„αžœαžαŸ’αžαž»αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αŸ” + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +removed_item = fruits.pop() +``` + +### Clearing Items in a Set + +If we want to clear or empty the set we use _clear_ method. +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž”αŸ†αž”αžΆαžαŸ‹αžœαžαŸ’αžαž»αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„ sets αž™αžΎαž„αž”αŸ’αžšαžΎαžœαž·αž’αžΈ _clear_ αŸ” + +```py +# syntax +st = {'item1', 'item2', 'item3', 'item4'} +st.clear() +``` + +**Example:** + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +fruits.clear() +print(fruits) # set() +``` + +### Deleting a Set + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž›αž»αž” set αž™αžΎαž„αž”αŸ’αžšαžΎαžœαž·αž’αžΈ _del_ αŸ” + +```py +# syntax +st = {'item1', 'item2', 'item3', 'item4'} +del st +``` + +**Example:** + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +del fruits +``` + +### Converting List to Set + +αž™αžΎαž„αž’αžΆαž…αž”αž˜αŸ’αž›αŸ‚αž„ list αž‘αŸ…αž‡αžΆ set αž“αž·αž„ set αž‘αŸ…αž‡αžΆ list αŸ” αž€αžΆαžšαž”αž˜αŸ’αž›αŸ‚αž„ list αž‘αŸ…αž‡αžΆ set αž“αžΉαž„αžαŸ’αžšαžΌαžœαž›αž»αž”αž…αŸ„αž›αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž–αžΈαžšαž¬αž…αŸ’αžšαžΎαž“αžŠαž„ αž αžΎαž™αž“αžΉαž„αž˜αžΆαž“αžαŸ‚αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž˜αžΆαž“αžαŸ‚αž˜αž½αž™αŸ” + +```py +# syntax +lst = ['item1', 'item2', 'item3', 'item4', 'item1'] +st = set(lst) # {'item2', 'item4', 'item1', 'item3'} - the order is random, because sets in general are unordered +``` + +**Example:** + +```py +fruits = ['banana', 'orange', 'mango', 'lemon','orange', 'banana'] +fruits = set(fruits) # {'mango', 'lemon', 'banana', 'orange'} +``` + +### Joining Sets + +αž™αžΎαž„αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆ set αž–αžΈαžšαž¬αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈ _union()_ or _update()_ + +- Union + αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸαŸ‡αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αž“αžΌαžœ set αžαŸ’αž˜αžΈ + +```py +# syntax +st1 = {'item1', 'item2', 'item3', 'item4'} +st2 = {'item5', 'item6', 'item7', 'item8'} +st3 = st1.union(st2) +``` + +**Example:** + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'} +print(fruits.union(vegetables)) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage', 'potato', 'onion'} +``` + +- Update + αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸαŸ‡αž”αž‰αŸ’αž…αžΌαž› set αž˜αž½αž™αž€αŸ’αž“αž»αž„ set αž˜αž½αž™αž‘αŸ€αžαŸ” + +```py +# syntax +st1 = {'item1', 'item2', 'item3', 'item4'} +st2 = {'item5', 'item6', 'item7', 'item8'} +st1.update(st2) # st2 contents are added to st1 +``` + +**Example:** + +```py +fruits = {'banana', 'orange', 'mango', 'lemon'} +vegetables = {'tomato', 'potato', 'cabbage','onion', 'carrot'} +fruits.update(vegetables) +print(fruits) # {'lemon', 'carrot', 'tomato', 'banana', 'mango', 'orange', 'cabbage', 'potato', 'onion'} +``` + +### Finding Intersection Items + +αž€αžΆαžšαž”αŸ’αžšαžŸαž–αŸ’αžœ (Intersection) αž“αžΉαž„αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ αž“αžΌαžœαžœαžαŸ’αžαž»αžŠαŸ‚αž›αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ set αž‘αžΆαŸ†αž„αž–αžΈαžšαŸ” αžŸαžΌαž˜αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸ + +```py +# syntax +st1 = {'item1', 'item2', 'item3', 'item4'} +st2 = {'item3', 'item2'} +st1.intersection(st2) # {'item3', 'item2'} +``` + +**Example:** + +```py +whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} +even_numbers = {0, 2, 4, 6, 8, 10} +whole_numbers.intersection(even_numbers) # {0, 2, 4, 6, 8, 10} + +python = {'p', 'y', 't', 'h', 'o','n'} +dragon = {'d', 'r', 'a', 'g', 'o','n'} +python.intersection(dragon) # {'o', 'n'} +``` + +### Checking Subset and Super Set + +set αž’αžΆαž…αž‡αžΆ subset ឬ superset αž“αŸƒ set αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” + +- Subset: _issubset()_ +- Super set: _issuperset_ + +```py +# syntax +st1 = {'item1', 'item2', 'item3', 'item4'} +st2 = {'item2', 'item3'} +st2.issubset(st1) # True +st1.issuperset(st2) # True +``` + +**Example:** + +```py +whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} +even_numbers = {0, 2, 4, 6, 8, 10} +whole_numbers.issubset(even_numbers) # False, αžŠαŸ„αž™αžŸαžΆαžšαžœαžΆαž‡αžΆ super set +whole_numbers.issuperset(even_numbers) # True + +python = {'p', 'y', 't', 'h', 'o','n'} +dragon = {'d', 'r', 'a', 'g', 'o','n'} +python.issubset(dragon) # False +``` + +### Checking the Difference Between Two Sets + +αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αžΌαžœαž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„ set αž–αžΈαžšαŸ” + +```py +# syntax +st1 = {'item1', 'item2', 'item3', 'item4'} +st2 = {'item2', 'item3'} +st2.difference(st1) # set() +st1.difference(st2) # {'item1', 'item4'} => st1\st2 +``` + +**Example:** + +```py +whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} +even_numbers = {0, 2, 4, 6, 8, 10} +whole_numbers.difference(even_numbers) # {1, 3, 5, 7, 9} + +python = {'p', 'y', 't', 'o','n'} +dragon = {'d', 'r', 'a', 'g', 'o','n'} +python.difference(dragon) # {'p', 'y', 't'} - the result is unordered (characteristic of sets) +dragon.difference(python) # {'d', 'r', 'a', 'g'} +``` + +### Finding Symmetric Difference Between Two Sets + +αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžŸαŸŠαžΈαž˜αŸαž‘αŸ’αžšαžΈ (Symmetric Difference) αžšαžœαžΆαž„αž–αžΈαžšsetsαŸ” αžœαžΆαž˜αžΆαž“αž“αŸαž™αžαžΆ αžœαžΆαžœαž·αž›αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αž“αžΌαžœ set αžŠαŸ‚αž›αž˜αžΆαž“αžœαžαŸ’αžαž»αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈ set αž‘αžΆαŸ†αž„αž–αžΈαžš, αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ set αž‘αžΆαŸ†αž„αž–αžΈαžš, αžαžΆαž˜αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ: (A\B) βˆͺ (B\A) + +```py +# syntax +st1 = {'item1', 'item2', 'item3', 'item4'} +st2 = {'item2', 'item3'} +# it means (A\B)βˆͺ(B\A) +st2.symmetric_difference(st1) # {'item1', 'item4'} +``` + +**Example:** + +```py +whole_numbers = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} +some_numbers = {1, 2, 3, 4, 5} +whole_numbers.symmetric_difference(some_numbers) # {0, 6, 7, 8, 9, 10} + +python = {'p', 'y', 't', 'h', 'o','n'} +dragon = {'d', 'r', 'a', 'g', 'o','n'} +python.symmetric_difference(dragon) # {'r', 't', 'p', 'y', 'g', 'a', 'd', 'h'} +``` + +### Joining Sets + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎ set αž–αžΈαžšαž‚αŸ’αž˜αžΆαž“αžœαžαŸ’αžαž»αžšαž½αž˜, αž™αžΎαž„αž αŸ…αžœαžΆαžαžΆ sets αžŠαŸ‚αž›αž˜αž·αž“αžšαž½αž˜αž‚αŸ’αž“αžΆ. αž™αžΎαž„αž’αžΆαž…αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαžΆ តើ set αž–αžΈαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž‚αŸ’αž“αžΆαž¬αž˜αž·αž“αžšαž½αž˜αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš _isdisjoint()_ αŸ” + +```py +# syntax +st1 = {'item1', 'item2', 'item3', 'item4'} +st2 = {'item2', 'item3'} +st2.isdisjoint(st1) # False +``` + +**Example:** + +```py +even_numbers = {0, 2, 4 ,6, 8} +even_numbers = {1, 3, 5, 7, 9} +even_numbers.isdisjoint(odd_numbers) # True, αžŠαŸ„αž™αžŸαžΆαžšαž‚αŸ’αž˜αžΆαž“αžœαžαŸ’αžαž»αžšαž½αž˜αž‚αŸ’αž“αžΆ + +python = {'p', 'y', 't', 'h', 'o','n'} +dragon = {'d', 'r', 'a', 'g', 'o','n'} +python.isdisjoint(dragon) # False, αžŠαŸ„αž™αžŸαžΆαžšαž˜αžΆαž“αžœαžαŸ’αžαž»αžšαž½αž˜αž‚αŸ’αž“αžΆ {'o', 'n'} +``` + +[<< Day 6](../06_Day_Tuples/06_tuples.md) | [Day 8 >>](../08_Day_Dictionaries/08_dictionaries.md) diff --git a/Khmer/08_Day_Dictionaries/08_dictionaries.md b/Khmer/08_Day_Dictionaries/08_dictionaries.md new file mode 100644 index 000000000..d043c4bef --- /dev/null +++ b/Khmer/08_Day_Dictionaries/08_dictionaries.md @@ -0,0 +1,329 @@ +
+

30 Days Of Python: Day 8 - Dictionaries

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 7 ](../07_Day_Sets/07_sets.md) | [Day 9 >>](../09_Day_Conditionals/09_conditionals.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 8](#-day-8) + - [Dictionaries](#dictionaries) + - [Creating a Dictionary](#creating-a-dictionary) + - [Dictionary Length](#dictionary-length) + - [Accessing Dictionary Items](#accessing-dictionary-items) + - [Adding Items to a Dictionary](#adding-items-to-a-dictionary) + - [Modifying Items in a Dictionary](#modifying-items-in-a-dictionary) + - [Checking Keys in a Dictionary](#checking-keys-in-a-dictionary) + - [Removing Key and Value Pairs from a Dictionary](#removing-key-and-value-pairs-from-a-dictionary) + - [Changing Dictionary to a List of Items](#changing-dictionary-to-a-list-of-items) + - [Clearing a Dictionary](#clearing-a-dictionary) + - [Deleting a Dictionary](#deleting-a-dictionary) + - [Copy a Dictionary](#copy-a-dictionary) + - [Getting Dictionary Keys as a List](#getting-dictionary-keys-as-a-list) + - [Getting Dictionary Values as a List](#getting-dictionary-values-as-a-list) + +# πŸ“˜ Day 8 + +## Dictionaries + +A dictionary αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αž›αŸ†αžŠαžΆαž”αŸ‹, αž’αžΆαž…αž€αŸ‚αž€αŸ’αžšαŸ‚αž”αžΆαž“αŸ” αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαžšαžŸαŸαžšαž‡αžΆ (key: value) + +### Creating a Dictionary + +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž dictionary αž™αžΎαž„αž”αŸ’αžšαžΎαžαŸ’αž“αŸ€αž”, {} ឬ αž”αŸ’αžšαžΎαž’αž“αž»αž‚αž˜αž“αŸ *dict()*. + +```py +# syntax +empty_dict = {} +# Dictionary αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +``` + +**Example:** + +```py +person = { + 'first_name':'Asabeneh', + 'last_name':'Yetayeh', + 'age':250, + 'country':'Finland', + 'is_marred':True, + 'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'], + 'address':{ + 'street':'Space street', + 'zipcode':'02210' + } + } +``` + +Dictionary αžαžΆαž„αž›αžΎαž”αž„αŸ’αž αžΆαž‰αžαžΆαžαž˜αŸ’αž›αŸƒαž’αžΆαž…αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŽαžΆαž€αŸαž”αžΆαž“:string, boolean, list, tuple, set ឬ dictionary. + +### Dictionary Length + +αž”αŸ’αžšαžœαŸ‚αž„ Dictionary +αžœαžΆαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž…αŸ†αž“αž½αž“ 'key: value' αž‚αžΌαž€αŸ’αž“αž»αž„ dictionary. + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +print(len(dct)) # 4 +``` + +**Example:** + +```py +person = { + 'first_name':'Asabeneh', + 'last_name':'Yetayeh', + 'age':250, + 'country':'Finland', + 'is_marred':True, + 'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'], + 'address':{ + 'street':'Space street', + 'zipcode':'02210' + } + } +print(len(person)) # 7 + +``` + +### Accessing Dictionary Items + +We can access Dictionary items by referring to its key name. +αž™αžΎαž„αž’αžΆαž…αž‘αŸ…αž™αž€αžœαžαŸ’αžαž»αž€αŸ’αž“αž»αž„ Dictionary αžŠαŸ„αž™αž αŸ…αžˆαŸ’αž˜αŸ„αŸ‡ Key αžšαž”αžŸαŸ‹αžœαžΆαŸ” + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +print(dct['key1']) # value1 +print(dct['key4']) # value4 +``` + +**Example:** + +```py +person = { + 'first_name':'Asabeneh', + 'last_name':'Yetayeh', + 'age':250, + 'country':'Finland', + 'is_marred':True, + 'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'], + 'address':{ + 'street':'Space street', + 'zipcode':'02210' + } + } +print(person['first_name']) # Asabeneh +print(person['country']) # Finland +print(person['skills']) # ['JavaScript', 'React', 'Node', 'MongoDB', 'Python'] +print(person['skills'][0]) # JavaScript +print(person['address']['street']) # Space street +print(person['city']) # Error +``` + +αž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžœαžαŸ’αžαž»αžŠαŸ„αž™αžˆαŸ’αž˜αŸ„αŸ‡ key αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰ error αž”αŸ’αžšαžŸαž·αž“αž”αžΎ key αž“αŸ„αŸ‡αž˜αž·αž“αž˜αžΆαž“αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž…αŸ€αžŸαžœαžΆαž„ error αž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎ key αž˜αžΆαž“αž¬αž’αžαŸ‹ αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž _get_ αŸ” αžœαž·αž’αžΈ get αž’αŸ„αž™αžœαž·αž‰ None αžŠαŸ‚αž›αž‡αžΆ αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ NoneType αž”αŸ’αžšαžŸαž·αž“αž”αžΎ key αž˜αž·αž“αž˜αžΆαž“αŸ” + +```py +person = { + 'first_name':'Asabeneh', + 'last_name':'Yetayeh', + 'age':250, + 'country':'Finland', + 'is_marred':True, + 'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'], + 'address':{ + 'street':'Space street', + 'zipcode':'02210' + } + } +print(person.get('first_name')) # Asabeneh +print(person.get('country')) # Finland +print(person.get('skills')) #['HTML','CSS','JavaScript', 'React', 'Node', 'MongoDB', 'Python'] +print(person.get('city')) # None +``` + +### Adding Items to a Dictionary + +αž™αžΎαž„αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜ key αž“αž·αž„ value pair αžαŸ’αž˜αžΈαž‘αŸ…αž€αŸ’αž“αž»αž„ Dictionary + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +dct['key5'] = 'value5' +``` + +**Example:** + +```py +person = { + 'first_name':'Asabeneh', + 'last_name':'Yetayeh', + 'age':250, + 'country':'Finland', + 'is_marred':True, + 'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'], + 'address':{ + 'street':'Space street', + 'zipcode':'02210' + } +} +person['job_title'] = 'Instructor' +person['skills'].append('HTML') +print(person) +``` + +### Modifying Items in a Dictionary + +αž™αžΎαž„αž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αžœαžαŸ’αžαž»αž“αŸ…αž€αŸ’αž“αž»αž„ dictionary + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +dct['key1'] = 'value-one' +``` + +**Example:** + +```py +person = { + 'first_name':'Asabeneh', + 'last_name':'Yetayeh', + 'age':250, + 'country':'Finland', + 'is_marred':True, + 'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'], + 'address':{ + 'street':'Space street', + 'zipcode':'02210' + } + } +person['first_name'] = 'Eyob' +person['age'] = 252 +``` + +### Checking Keys in a Dictionary + +αž™αžΎαž„αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž _in_ αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎ key αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ dictionary αž¬αž’αžαŸ‹ + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +print('key2' in dct) # True +print('key5' in dct) # False +``` + +### Removing Key and Value Pairs from a Dictionary + +- _pop(key)_: αžŠαž€αžœαžαŸ’αžαž»αž…αŸαž‰αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ key αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹: +- _popitem()_: αž›αž»αž”αžœαžαŸ’αžαž»αž…αž»αž„αž€αŸ’αžšαŸ„αž™ +- _del_: αžŠαž€αžœαžαŸ’αžαž»αž…αŸαž‰αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ key αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹: + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +dct.pop('key1') # removes key1 item +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +dct.popitem() # removes the last item +del dct['key2'] # removes key2 item +``` + +**Example:** + +```py +person = { + 'first_name':'Asabeneh', + 'last_name':'Yetayeh', + 'age':250, + 'country':'Finland', + 'is_marred':True, + 'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'], + 'address':{ + 'street':'Space street', + 'zipcode':'02210' + } + } +person.pop('first_name') # αž›αž»αž” firstname +person.popitem() # αž›αž»αž”αžœαžαŸ’αžαž» +del person['is_married'] # αž›αž»αž” is_married +``` + +### Changing Dictionary to a List of Items + +The _items()_ method changes dictionary to a list of tuples. + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +print(dct.items()) # dict_items([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3'), ('key4', 'value4')]) +``` + +### Clearing a Dictionary + +If we don't want the items in a dictionary we can clear them using _clear()_ method +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž˜αž·αž“αž…αž„αŸ‹αž”αžΆαž“αžœαžαŸ’αžαž»αž“αŸ…αž€αŸ’αž“αž»αž„ dictionary αž™αžΎαž„αž’αžΆαž…αž›αž»αž”αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš _clear()_ + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +print(dct.clear()) # None +``` + +### Deleting a Dictionary + +If we do not use the dictionary we can delete it completely +αž”αžΎαž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαžΎ dictionary αž™αžΎαž„αž’αžΆαž…αž›αž»αž”αžœαžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +del dct +``` + +### Copy a Dictionary + +αž™αžΎαž„αž’αžΆαž…αž…αž˜αŸ’αž›αž„ dictionary αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž _copy()_ αŸ” αž€αžΆαžšαž”αŸ’αžšαžΎ Copy αž™αžΎαž„αž’αžΆαž…αž…αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž“αŸƒ Dictionary αžŠαžΎαž˜αŸ” + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +dct_copy = dct.copy() # {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +``` + +### Getting Dictionary Keys as a List + +The _keys()_ method gives us all the keys of a a dictionary as a list. +αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš _keys()_ αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž“αžΌαžœ key αž‘αŸ…αž‡αžΆ listαŸ” + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +keys = dct.keys() +print(keys) # dict_keys(['key1', 'key2', 'key3', 'key4']) +``` + +### Getting Dictionary Values as a List + +αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš _values_ αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž“αžΌαžœαžαž˜αŸ’αž›αŸƒαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ…αž‡αžΆ listαŸ” + +```py +# syntax +dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'} +values = dct.values() +print(values) # dict_values(['value1', 'value2', 'value3', 'value4']) +``` + +[<< Day 7 ](../07_Day_Sets/07_sets.md) | [Day 9 >>](../09_Day_Conditionals/09_conditionals.md) diff --git a/Khmer/09_Day_Conditionals/09_conditionals.md b/Khmer/09_Day_Conditionals/09_conditionals.md new file mode 100644 index 000000000..fc9ef6bac --- /dev/null +++ b/Khmer/09_Day_Conditionals/09_conditionals.md @@ -0,0 +1,199 @@ +
+

30 Days Of Python: Day 9 - Conditionals

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 8](../08_Day_Dictionaries/08_dictionaries.md) | [Day 10 >>](../10_Day_Loops/10_loops.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 9](#-day-9) + - [Conditionals](#conditionals) + - [If Condition](#if-condition) + - [If Else](#if-else) + - [If Elif Else](#if-elif-else) + - [Short Hand](#short-hand) + - [Nested Conditions](#nested-conditions) + - [If Condition and Logical Operators](#if-condition-and-logical-operators) + - [If and Or Logical Operators](#if-and-or-logical-operators) + +# πŸ“˜ Day 9 + +## Conditionals + +αžŠαŸ„αž™αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜, αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Python script αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž–αŸαž‰αžŠαŸ„αž™αž›αŸ†αžŠαžΆαž”αŸ‹αž–αžΈαž›αžΎαž‘αŸ…αž€αŸ’αžšαŸ„αž˜αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžŠαž·αž€αžΆαžš logical αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡, αž€αžΆαžšαž›αŸ†αž αžΌαžš sequential αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αŸ’αž“αž»αž„αž–αžΈαžšαžœαž·αž’αžΈ: + +- Conditional execution: block αž“αŸƒαž–αžΆαž€αŸ’αž™αž˜αž½αž™αž¬αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αžΆαž€αŸ’αž™αž˜αž½αž™αž‚αžΊαž–αž·αž +- Repetitive execution: block αž“αŸƒαž–αžΆαž€αŸ’αž™αž˜αž½αž™αž¬αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž–αŸαž‰αž‘αžΎαž„αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αžŠαžšαžΆαž”αžŽαžΆαž–αžΆαž€αŸ’αž™αž˜αž½αž™αž‚αžΊαž–αž·αžαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹ _if_, _else_, _elif_ statements. αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αž“αž·αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž™αŸ„αž’αžΆαžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αžšαŸ€αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž˜αž»αž“αž“αžΉαž„αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ” + +### If Condition + +αž“αŸ…αž€αŸ’αž“αž»αž„ Python αž“αž·αž„αž—αžΆαžŸαžΆ programming αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡ _if_ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŽαžΆαž˜αž½αž™αž‚αžΊαž‡αžΆαž€αžΆαžšαž–αž·αž αž“αž·αž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž–αŸαž‰αž›αŸαžαž€αžΌαžŠ block αŸ” αž…αž„αž…αžΆαŸ†αž€αžΆαžšαž”αž„αŸ’αž€αž”αŸ‹αž€αŸ’αžšαŸ„αž™ colon αŸ” + +```py +# syntax +if condition: + this part of code runs for truthy conditions +``` + +**Example: 1** + +```py +a = 3 +if a > 0: + print('A is a positive number') +# A is a positive number +``` + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ 3 αž‚αžΊαž’αŸ†αž‡αžΆαž„ 0αŸ” αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž–αž·αž αž αžΎαž™ code αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‚αžΊαž˜αž·αž“αž–αž·αž αž™αžΎαž„αž˜αž·αž“αžƒαžΎαž‰αž›αž‘αŸ’αž’αž•αž›αž‘αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αž›αž‘αŸ’αž’αž•αž›αž“αŸƒ false condition αž™αžΎαž„αžαŸ’αžšαžΌαžœαž˜αžΆαž“ block αž˜αž½αž™αž‘αŸ€αžαž‚αžΊ _else_. + +### If Else + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‚αžΊαž‡αžΆαž€αžΆαžšαž–αž·αž block αžŠαŸ†αž”αžΌαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž›αž€αŸ’αžαžαžŽαŸ’αžŒ else αž“αžΉαž„αž’αž“αž»αžœαžαŸ’αžαŸ” + +```py +# syntax +if condition: + this part of code runs for truthy conditions +else: + this part of code runs for false conditions +``` + +**Example: ** + +```py +a = 3 +if a < 0: + print('A is a negative number') +else: + print('A is a positive number') +``` + +αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžαžΆαž„αž›αžΎαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαžΆαž˜αž·αž“αž–αž·αž αžŠαžΌαž…αŸ’αž“αŸαŸ‡ block else αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαŸ” αž”αžΎαžŸαž·αž“αž‡αžΆαž›αž€αŸ’αžαžαžŽαŸ’αžŒαžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž–αžΈαžš? αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ _ elif_. + +### If Elif Else + +αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αžΈαžœαž·αžαž”αŸ’αžšαž…αžΆαŸ†αžαŸ’αž„αŸƒαž™αžΎαž„αžαŸ‚αž„αžαŸ‚αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž‡αžΆαžšαŸ€αž„αžšαžΆαž›αŸ‹αžαŸ’αž„αŸƒαŸ” αž™αžΎαž„αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž˜αž·αž“αž˜αŸ‚αž“αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž˜αž½αž™αž¬αž–αžΈαžšαž‘αŸαž”αŸ‰αž»αž“αŸ’αžαŸ‚ αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αžŠαžΌαž…αž‡αžΈαžœαž·αžαžŠαŸ‚αžš αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž€αŸαž–αŸ„αžšαž–αŸαž‰αž‘αŸ…αžŠαŸ„αž™αž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ” αž™αžΎαž„αž”αŸ’αžšαžΎ _elif_ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž˜αžΆαž“αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” + +```py +# syntax +if condition: + code +elif condition: + code +else: + code + +``` + +**Example: ** + +```py +a = 0 +if a > 0: + print('A is a positive number') +elif a < 0: + print('A is a negative number') +else: + print('A is zero') +``` + +### Short Hand + +```py +# syntax +code if condition else code +``` + +**Example: ** + +```py +a = 3 +print('A is positive') if a > 0 else print('A is negative') # first condition met, 'A is positive' will be printed +``` + +### Nested Conditions + +Nested condition : αžŸαŸ†αžŠαŸ…αž‘αŸ…αž›αžΎαž€αžΆαžšαž”αŸ’αžšαžΎ if ឬ else if αž€αŸ’αž“αž»αž„ if ឬ else if αž˜αž½αž™αž‘αŸ€αžαŸ” + +αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž’αžΆαž…αž‡αžΆ nested + +```py +# syntax +if condition: + code + if condition: + code +``` + +**Example: ** + +```py +a = 0 +if a > 0: + if a % 2 == 0: + print('A is a positive and even integer') + else: + print('A is a positive number') +elif a == 0: + print('A is zero') +else: + print('A is a negative number') + +``` + +αž™αžΎαž„αž’αžΆαž…αž…αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‡αžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ logical operator _and_. + +### If Condition and Logical Operators + +```py +# syntax +if condition and condition: + code +``` + +**Example: ** + +```py +a = 0 +if a > 0 and a % 2 == 0: + print('A is an even and positive integer') +elif a > 0 and a % 2 != 0: + print('A is a positive integer') +elif a == 0: + print('A is zero') +else: + print('A is negative') +``` + +### If and Or Logical Operators + +```py +# syntax +if condition or condition: + code +``` + +**Example: ** + +```py +user = 'James' +access_level = 3 +if user == 'admin' or access_level >= 4: + print('Access granted!') +else: + print('Access denied!') +``` + +[<< Day 8](../08_Day_Dictionaries/08_dictionaries.md) | [Day 10 >>](../10_Day_Loops/10_loops.md) diff --git a/Khmer/10_Day_Loops/10_loops.md b/Khmer/10_Day_Loops/10_loops.md new file mode 100644 index 000000000..32df71f5b --- /dev/null +++ b/Khmer/10_Day_Loops/10_loops.md @@ -0,0 +1,377 @@ +
+

30 Days Of Python: Day 10 - Loops

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+
+ +[<< Day 9](../09_Day_Conditionals/09_conditionals.md) | [Day 11 >>](../11_Day_Functions/11_functions.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 10](#-day-10) + - [Loops](#loops) + - [While Loop](#while-loop) + - [Break and Continue - Part 1](#break-and-continue---part-1) + - [For Loop](#for-loop) + - [Break and Continue - Part 2](#break-and-continue---part-2) + - [The Range Function](#the-range-function) + - [Nested For Loop](#nested-for-loop) + - [For Else](#for-else) + - [Pass](#pass) + +# πŸ“˜ Day 10 + +## Loops + +αž€αŸ’αž“αž»αž„ programming αž™αžΎαž„αž’αŸ’αžœαžΎαž€αžΆαžšαž„αžΆαžšαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αžŠαžŠαŸ‚αž›αŸ—αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαžŠαžŠαŸ‚αž›αŸ—αž…αŸ’αžšαžΎαž“β€‹β€‹ αž™αžΎαž„αž”αŸ’αžšαžΎ loop αŸ” Python programming language αž€αŸαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž”αŸ’αžšαž—αŸαž‘ loops​​ αž–αžΈαžš: + +1. while loop +2. for loop + +### While Loop + +αž™αžΎαž„αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™ _while_ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž while loopαŸ”β€‹ αž™αžΎαž„αž”αŸ’αžšαžΎαž…αžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈβ€‹ run code​​ αžŠαžŠαŸ‚αž›αŸ— αžšαž αžΌαžαžŠαž›αŸ‹αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŽαžΆαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž–αŸαž‰αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸαŸ‡αž€αŸ’αž›αžΆαž™αž‡αžΆαž˜αž·αž“αž–αž·αž, code αžŠαŸ‚αž›αž“αŸ…αž€αŸ’αžšαŸ„αž™ loop​​ αž“αžΉαž„αž”αž“αŸ’αžαž’αž“αž»αžœαžαŸ’αžαŸ” + +```py + # syntax +while condition: + code goes here +``` + +**Example:** + +```py +count = 0 +while count < 5: + print(count) + count = count + 1 +#prints from 0 to 4 +``` + +αž“αŸ…αžαžΆαž„αž›αžΎ while loop, αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸαŸ‡αž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž˜αž·αž“αž–αž·αž αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž…αŸ†αž“αž½αž“αž‚αžΊ 5 αž“αŸ„αŸ‡αž‡αžΆαž–αŸαž›αžŠαŸ‚αž› loop αžˆαž”αŸ‹αŸ” +αž”αžΎαž™αžΎαž„αž…αž„αŸ‹β€‹ run code αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœβ€‹ αž™αžΎαž„αž”αŸ’αžšαžΎ _else_β€‹αŸ” + +```py + # syntax +while condition: + code goes here +else: + code goes here +``` + +**Example:** + +```py +count = 0 +while count < 5: + print(count) + count = count + 1 +else: + print(count) +``` + +αž“αŸ…αžαžΆαž„αž›αžΎ αž›αž€αŸ’αžαžαžŽαŸ’αžŒβ€‹ loop αž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž˜αž·αž“αž–αž·αžαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž…αŸ†αž“αž½αž“ αŸ₯ αž“αž·αž„ loop αžˆαž”αŸ‹, αž“αž·αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒ else αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”β€‹ αž™αžΎαž„αž“αžΉαž„αž”αžΆαž“ 5 αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αŸ” + + +### Break and Continue - Part 1 + +- Break: αž™αžΎαž„αž”αŸ’αžšαžΎ break αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž…αŸαž‰ αž¬αžˆαž”αŸ‹ loopαŸ” + +```py +# syntax +while condition: + code goes here + if another_condition: + break +``` + +**Example:** + +```py +count = 0 +while count < 5: + print(count) + count = count + 1 + if count == 3: + break +``` + +αžαžΆαž„αž›αžΎβ€‹ while loop αž”αž‰αŸ’αž…αŸαž‰αžαŸ‚ 0, 1, 2, αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαžˆαžΆαž“αžŠαž›αŸ‹ 3 αžœαžΆαžˆαž”αŸ‹αŸ” + +- Continue: αž‡αžΆαž˜αž½αž™αž“αžΉαž„ continue αž™αžΎαž„αž’αžΆαž…αž…αžΆαž€αž…αŸαž‰αž–αžΈ loop αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž αžΎαž™αž”αž“αŸ’αžαž‘αŸ…αž“αžΉαž„αž€αžΆαžš loop αž“αŸ…αžαžΆαž„αž˜αž»αžαž‘αŸ€αžαŸ” + +```py + # syntax +while condition: + code goes here + if another_condition: + continue +``` + +**Example:** + +```py +count = 0 +while count < 5: + if count == 3: + continue + print(count) + count = count + 1 +``` + +αžαžΆαž„αž›αžΎ while loop αž”αž‰αŸ’αž…αŸαž‰αžαŸ‚ 0, 1, 2 αž“αž·αž„ 4 (αž’αžαŸ‹αž™αž€ 3). + +### For Loop + +αž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡β€‹ _for_ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž for loop, αžŸαŸ’αžšαžŠαŸ€αž„αž‡αžΆαž˜αž½αž™ programming language​ αž•αŸ’αžŸαŸαž„αŸ—, αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„ syntaxαŸ” Loop αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž˜αŸ’αžαž„αŸ—αž‘αŸ…αž›αžΎαž›αŸ†αžŠαžΆαž”αŸ‹αžŽαžΆαž˜αž½αž™ (αžŠαŸ‚αž›αž‡αžΆ list, tuple, dictionary, set, ឬ string). + +- For loop αž‡αžΆαž˜αž½αž™ list + +```py +# syntax +for iterator in lst: + code goes here +``` + +**Example:** + +```py +numbers = [0, 1, 2, 3, 4, 5] +for number in numbers: # number is temporary name to refer to the list's items, valid only inside this loop + print(number) # the numbers will be printed line by line, from 0 to 5 +``` + +- For loop αž‡αžΆαž˜αž½αž™ string + +```py +# syntax +for iterator in string: + code goes here +``` + +**Example:** + +```py +language = 'Python' +for letter in language: + print(letter) + + +for i in range(len(language)): + print(language[i]) +``` + +- For loop with tuple + +```py +# syntax +for iterator in tpl: + code goes here +``` + +**Example:** + +```py +numbers = (0, 1, 2, 3, 4, 5) +for number in numbers: + print(number) +``` + +- For loop αž‡αžΆαž˜αž½αž™ dictionary + Looping αžαžΆαž˜αžšαž™αŸˆ dictionary αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αž’αŸ’αž“αž€ key αž“αŸƒ dictionaryαŸ” + +```py + # syntax +for iterator in dct: + code goes here +``` + +**Example:** + +```py +person = { + 'first_name':'Asabeneh', + 'last_name':'Yetayeh', + 'age':250, + 'country':'Finland', + 'is_marred':True, + 'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'], + 'address':{ + 'street':'Space street', + 'zipcode':'02210' + } +} +for key in person: + print(key) + +for key, value in person.items(): + print(key, value) # this way we get both keys and values printed out +``` + +- Loops αž€αŸ’αž“αž»αž„ set + +```py +# syntax +for iterator in st: + code goes here +``` + +**Example:** + +```py +it_companies = {'Facebook', 'Google', 'Microsoft', 'Apple', 'IBM', 'Oracle', 'Amazon'} +for company in it_companies: + print(company) +``` + +### Break and Continue - Part 2 + +αž€αžΆαžšαžšαŸ†αž›αžΉαž€αžαŸ’αž›αžΈ: +_Break_: αž™αžΎαž„αž”αŸ’αžšαžΎ break αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αž‰αŸ’αžˆαž”αŸ‹ loop αžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αž»αž“αž–αŸαž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αŸ” + +```py +# syntax +for iterator in sequence: + code goes here + if condition: + break +``` + +**Example:** + +```py +numbers = (0,1,2,3,4,5) +for number in numbers: + print(number) + if number == 3: + break +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ, loop αžˆαž”αŸ‹αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαžˆαžΆαž“αžŠαž›αŸ‹ 3 αŸ” + +Continue: αž™αžΎαž„αž”αŸ’αžšαžΎ continue αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž…αžΆαž€αž…αŸαž‰αž–αžΈαž‡αŸ†αž αžΆαž“αž˜αž½αž™αž…αŸ†αž“αž½αž“αž€αŸ’αž“αž»αž„ iteration αž“αŸƒ loop αŸ” + +```py + # syntax +for iterator in sequence: + code goes here + if condition: + continue +``` + +**Example:** + +```py +numbers = (0,1,2,3,4,5) +for number in numbers: + print(number) + if number == 3: + continue + print('Next number should be ', number + 1) if number != 5 else print("loop's end") # for short hand conditions need both if and else statements +print('outside the loop') +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αŸ†αž“αž½αž“αž“αŸαŸ‡αžŸαŸ’αž˜αžΎαž“αžΉαž„ 3, αž‡αŸ†αž αžΆαž“αž€αŸ’αžšαŸ„αž™αž–αžΈαž›αž€αŸ’αžαžαžŽαŸ’αžŒ (αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„ loop) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž€αž…αŸαž‰ αž αžΎαž™αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒ loop αž”αž“αŸ’αž αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“ iterations αž“αŸ…αžŸαž›αŸ‹αŸ” + +### The Range Function + + _range()_ function αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž‡αžΈαž›αŸαžαŸ” _range(start, end, step)_ αž…αžΆαž”αŸ‹αž™αž€ 3 parameters: starting, ending and incrementαŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αžœαžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈ 0 αž“αž·αž„αž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž‚αžΊ 1 αŸ”β€‹ αž€αžΆαžšαžαž˜αŸ’αžšαž„αŸ‹ range αžαŸ’αžšαžΌαžœαž€αžΆαžšαž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹ 1 argument (end). + +αž”αž„αŸ’αž€αžΎαž sequence αžŠαŸ„αž™αž”αŸ’αžšαžΎ range + +```py +lst = list(range(11)) +print(lst) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +st = set(range(1, 11)) # 2 arguments indicate start and end of the sequence, step set to default 1 +print(st) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} + +lst = list(range(0,11,2)) +print(lst) # [0, 2, 4, 6, 8, 10] +st = set(range(0,11,2)) +print(st) # {0, 2, 4, 6, 8, 10} +``` + +```py +# syntax +for iterator in range(start, end, step): +``` + +**Example:** + +```py +for number in range(11): + print(number) # prints 0 to 10, not including 11 +``` + +### Nested For Loop + +αž™αžΎαž„αž’αžΆαž…αžŸαžšαžŸαŸαžš loop αž€αŸ’αž“αž»αž„ loop + +```py +# syntax +for x in y: + for t in x: + print(t) +``` + +**Example:** + +```py +person = { + 'first_name': 'Asabeneh', + 'last_name': 'Yetayeh', + 'age': 250, + 'country': 'Finland', + 'is_marred': True, + 'skills': ['JavaScript', 'React', 'Node', 'MongoDB', 'Python'], + 'address': { + 'street': 'Space street', + 'zipcode': '02210' + } +} +for key in person: + if key == 'skills': + for skill in person['skills']: + print(skill) +``` + +### For Else + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž’αž“αž»αžœαžαŸ’αžαžŸαžΆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› loop αž”αž‰αŸ’αž…αž”αŸ‹αž™αžΎαž„αž”αŸ’αžšαžΎ elseαŸ” + +```py +# syntax +for iterator in range(start, end, step): + do something +else: + print('The loop ended') +``` + +**Example:** + +```py +for number in range(11): + print(number) # prints 0 to 10, not including 11 +else: + print('The loop stops at', number) +``` + +### Pass + +αž€αŸ’αž“αž»αž„ python αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžš statement (αž€αŸ’αžšαŸ„αž™ semicolon), αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž˜αž·αž“αž…αžΌαž›αž…αž·αžαŸ’αžαž”αŸ†αž–αŸαž‰ code αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡, αž™αžΎαž„αž’αžΆαž…αžŸαžšαžŸαŸαžšαž–αžΆαž€αŸ’αž™ _pass_ αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„ errorαŸ” αž™αžΎαž„αž€αŸαž’αžΆαž…αž”αŸ’αžšαžΎαžœαžΆαž‡αžΆαž‘αžΈαžαžΆαŸ†αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαžšαžŸαŸαžš code​​ αž›αžΎαž€αž€αŸ’αžšαŸ„αž™αŸ” + +**Example:** + +```py +for number in range(6): + pass +``` diff --git a/Khmer/11_Day_Functions/11_Day_functions.md b/Khmer/11_Day_Functions/11_Day_functions.md new file mode 100644 index 000000000..6e48a4fe3 --- /dev/null +++ b/Khmer/11_Day_Functions/11_Day_functions.md @@ -0,0 +1,501 @@ +
+

30 Days Of Python: Day 11 - Functions

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 10](../10_Day_Loops/10_loops.md) | [Day 12 >>](../12_Day_Modules/12_modules.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 11](#-day-11) + - [Functions](#functions) + - [Defining a Function](#defining-a-function) + - [Declaring and Calling a Function](#declaring-and-calling-a-function) + - [Function without Parameters](#function-without-parameters) + - [Function Returning a Value - Part 1](#function-returning-a-value---part-1) + - [Function with Parameters](#function-with-parameters) + - [Passing Arguments with Key and Value](#passing-arguments-with-key-and-value) + - [Function Returning a Value - Part 2](#function-returning-a-value---part-2) + - [Function with Default Parameters](#function-with-default-parameters) + - [Arbitrary Number of Arguments](#arbitrary-number-of-arguments) + - [Default and Arbitrary Number of Parameters in Functions](#default-and-arbitrary-number-of-parameters-in-functions) + - [Function as a Parameter of Another Function](#function-as-a-parameter-of-another-function) + +# πŸ“˜ Day 11 + +## Functions + +(αž’αž“αž»αž‚αž˜αž“αŸ) + +αž€αž“αŸ’αž›αž„αž˜αž€αž™αžΎαž„αž”αžΆαž“αžƒαžΎαž‰ αž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„ Python αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαž»αž…αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž•αŸ’αžŠαŸ„αžαž‘αŸ…αž›αžΎαž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž αž“αž·αž„ αž€αŸ‚αž”αŸ’αžšαŸ‚αž”αžΆαž“αŸ” αžαžΎαž’αŸ’αžœαžΈαž‘αŸ…αž‡αžΆαž’αž“αž»αž‚αž˜αž“αŸ? αž˜αž»αž“αž“αžΉαž„αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž”αž„αŸ’αž€αžΎαžαž’αž“αž»αž‚αž˜αž“αŸ αž™αžΎαž„αž“αžΉαž„αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αžαžΆαž’αŸ’αžœαžΈαž‘αŸ…αž‡αžΆαž’αž“αž»αž‚αž˜αž“αŸαž αžΎαž™αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœ +αž€αžΆαžšαžœαžΆαŸ” + +### Defining a Function + +(αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αž“αž»αž‚αž˜αž“αŸ) + +αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αž’αžΆαž…αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž”αžŽαŸ’αžŠαž»αŸ†αž“αŸƒαž€αžΌαžŠαž¬ αž›αŸ’αž”αŸ‡αž€αžΌαžŠ(programming statements) αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αž·αž…αŸ’αž…αž€αžΆαžšαžŠαŸαž‡αžΆαž€αŸ‹ +αž›αžΆαž€αŸ‹αž˜αž½αž™ αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž¬αž”αž„αŸ’αž€αžΎαžαž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™ python αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αžΆαž€αŸ’αž™αž˜αž½αž½αž™ _def_αŸ” αž”αž“αŸ’αžαž‘αŸ…αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΌαžŠαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž½αž™αŸ” αž’αž“αž»αž‚αž˜αž“αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž αŸ…αž’αž“αž»αž‚αž˜αž“αŸαž“αŸ„αŸ‡αž˜αž€αž”αŸ’αžšαžΎαžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αžŠαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸαž‚αŸαž αŸ…αžαžΆ call αž¬αž€αŸ invoke function. + +### Declaring and Calling a Function + +(αž€αžΆαžšαžαžΆαž„ αž“αž·αž„ αž αŸ…αž’αž“αž»αž‚αž˜αž“αŸαž˜αž€αž”αŸ’αžšαŸαžΈ) + +αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™ αž™αžΎαž„αž αŸ…αžœαžΆαžαžΆαž‡αžΆαž€αžΆαžšαžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸ (αž”αž„αŸ’αž€αžΎαžαž’αž“αž»αž‚αž˜αž“αŸαžαŸ‚αž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹)αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž»αž‚αž˜αž“αŸαž“αŸ„αŸ‡αž™αžΎαž„αž αŸ…αžœαžΆαžαžΆ *calling* ឬ *invoking" αž’αž“αž»αž‚αž˜αž“αŸαŸ” αž’αž“αž»αž‚αž˜αž“αŸαž’αžΆαž…αžαžΆαž„αž”αžΆαž“αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ” + +*αž”αž‰αŸ’αž‡αžΆαž€αŸ‹:* αž˜αž»αž“αž–αŸαž›αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αž”αžΆαž“αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αžαžΆαž„αž›αžΎαž‚αžΊαž™αžΎαž„αžαŸ’αžšαžΌαžœ *αžαžΆαž„* αž’αž“αž»αž‚αž˜αž“αŸαž“αŸ„αŸ‡αž‡αžΆαž˜αž»αž“αžŸαž·αž“ αž αžΎαž™ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈ *αžαžΆαž„* αž αžΎαž™αž’αž“αž»αž‚αž˜αž“αŸαž“αŸ„αŸ‡αž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ„αŸ‡αž‘αŸαž›αž»αŸ‡αžαŸ’αžšαžΆαžŽαžΆαžαŸ‚αž™αžΎαž„ αž αŸ…αžœαžΆ "calling" ឬ "involking" αžœαžΆαŸ” + + +```py +# syntax (αž›αŸ†αž“αžΆαŸ†) +# Declaring a function (αž€αžΆαžšαžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸ) +def function_name(): + codes + codes +# αž€αžΆαžšαž αŸ…αž’αž“αž»αž‚αž˜αž“αŸαž˜αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ +function_name() +``` + +### Function without Parameters + +(αž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš) + +αž’αž“αž»αž‚αž˜αž“αŸαž’αžΆαž…αžαžΆαž„αž”αžΆαž“αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž‘αŸαŸ” + + +**αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def generate_full_name (): + first_name = 'Asabeneh' + last_name = 'Yetayeh' + space = ' ' + full_name = first_name + space + last_name + print(full_name) +generate_full_name () # αž€αžΆαžšαž αŸ…αž’αž“αž»αž‚αž˜αž“αŸαž˜αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ + +def add_two_numbers (): + num_one = 2 + num_two = 3 + total = num_one + num_two + print(total) +add_two_numbers() +``` + +### Function Returning a Value - Part 1 + +(αž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž•αŸ’αžŠαž›αŸ‹αž“αŸ…αžαž˜αŸ’αž›αŸƒαž˜αž½αž™αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€) + +αž’αž“αž»αž‚αž˜αž“αŸαž’αžΆαž…αž•αŸ’αžŠαž›αŸ‹αž“αžΌαžœαžαž˜αŸ’αž›αŸƒαž˜αž€αžœαž·αž‰ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž“αž»αž‚αž˜αž“αŸαž‚αŸ’αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ αžαž˜αŸ’αž›αŸƒαž“αŸƒαž’αž“αž»αž‚αž˜αž“αŸαž‚αžΊαž‘αž‘αŸαžšαŸ” αžαŸ„αŸ‡αž™αžΎαž„αžŸαžšαžŸαŸαžšαž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ„αž™αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαž‘αž”αŸ‹αŸ” αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž–αžΈαž’αž“αž»αž‚αž˜αž“αŸαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž αŸ… (call) αž“αž·αž„ (print) αžœαžΆαŸ” + +```py +def generate_full_name (): + first_name = 'Asabeneh' + last_name = 'Yetayeh' + space = ' ' + full_name = first_name + space + last_name + return full_name +print(generate_full_name()) + +def add_two_numbers (): + num_one = 2 + num_two = 3 + total = num_one + num_two + return total +print(add_two_numbers()) +``` + +### Function with Parameters + +(αž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš) + +αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž“αž»αž‚αž˜αž“αŸαž™αžΎαž„αž’αžΆαž…αžŠαžΆαž€αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž‘αž·αž“αŸ’αž“αŸαž™ (number, string, boolean, list, triple, dictionary, ឬ set ) αž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ” + +- Single Paramenter( αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ‚αž˜αž½αž™ ): αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž“αž»αž‚αž˜αž“αŸαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αž½αž™ αž™αžΎαž„αžαŸ’αžšαžΌαžœαžαŸ‚αž αŸ…αž’αž“αž»αž‚αž˜αž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž˜αž½αž™αž“αž·αž„αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž…αŸ†αž“αž½αž“αž˜αž½αž™αŸ” + + +```py + # αž›αŸ†αž“αžΆαŸ† + # αž€αžΆαžšαžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž½αž™ + def function_name(parameter): + codes + codes + # αž€αžΆαžšαž αŸ…αž™αž€αž’αž“αž»αž‚αž˜αž“αŸαž˜αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ + print(function_name(argument)) +``` + +**αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def greetings (name): + message = name + ', welcome to Python for Everyone!' + return message + +print(greetings('Asabeneh')) + +def add_ten(num): + ten = 10 + return num + ten +print(add_ten(90)) + +def square_number(x): + return x * x +print(square_number(2)) + +def area_of_circle (r): + PI = 3.14 + area = PI * r ** 2 + return area +print(area_of_circle(10)) + +def sum_of_numbers(n): + total = 0 + for i in range(n+1): + total+=i + print(total) +print(sum_of_numbers(10)) # 55 +print(sum_of_numbers(100)) # 5050 +``` +- Two Parameter (αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž…αŸ†αž“αž½αž“αž–αžΈαžš): αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αž’αžΆαž… αž˜αžΆαž“ ឬ αž˜αž·αž“αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αž½αž™ ឬ αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž…αŸ’αžšαžΎαž“αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž“αž»αž‚αž˜αž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž™αžΎαž„αž‚αž½αžšαž αŸ…αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αŸ” αžαŸ„αŸ‡αž™αžΎαž„αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž˜αžΆαž“αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž…αŸ†αž“αž½αž“αž–αžΈαžš: + + +```py + # αž›αŸ†αž“αžΆαŸ† + # αž€αžΆαžšαžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸ + def function_name(para1, para2): + codes + codes + # αž€αžΆαžšαž αŸ…αž’αž“αž»αž‚αž˜αž“αŸ + print(function_name(arg1, arg2)) +``` + +**αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def generate_full_name (first_name, last_name): + space = ' ' + full_name = first_name + space + last_name + return full_name +print('Full Name: ', generate_full_name('Asabeneh','Yetayeh')) + +def sum_two_numbers (num_one, num_two): + sum = num_one + num_two + return sum +print('Sum of two numbers: ', sum_two_numbers(1, 9)) + +def calculate_age (current_year, birth_year): + age = current_year - birth_year + return age; + +print('Age: ', calculate_age(2021, 1819)) + +def weight_of_object (mass, gravity): + weight = str(mass * gravity)+ ' N' # αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αž‡αžΆ string αž‡αžΆαž˜αž»αž“αžŸαž·αž“ + return weight +print('Weight of an object in Newtons: ', weight_of_object(100, 9.81)) +``` + +### Passing Arguments with Key and Value + +(αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž‡αžΆαž˜αž½αž™ key αž“αž·αž„ value) + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž”αž‰αŸ’αž…αžΌαž›αž“αžΌαžœαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž‡αžΆαž˜αž½αž™ key αž“αž·αž„ value αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž“αŸƒαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž‚αžΊαž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αž‘αŸαŸ” + + +```py +# αž›αŸ†αž“αžΆαŸ† +# αž€αžΆαžšαžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸ +def function_name(para1, para2): + codes + codes +# αž€αžΆαžšαž αŸ…αž’αž“αž»αž‚αž˜αž“αŸαž˜αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ +print(function_name(para1 = 'John', para2 = 'Doe')) # αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž“αŸƒαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸ„αŸ‡αž‘αŸ αž‚αžΊαž™αžΎαž„αž’αžΆαž…αžŸαžšαžŸαŸαžšαžαžΆ print(function_name(para2= 'John', para1 = 'Doe')) αž€αŸαž”αžΆαž“αžŠαŸ‚αžš +``` + +**αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def print_fullname(firstname, lastname): + space = ' ' + full_name = firstname + space + lastname + print(full_name) +print(print_fullname(firstname = 'Asabeneh', lastname = 'Yetayeh')) + +def add_two_numbers (num1, num2): + total = num1 + num2 + print(total) +print(add_two_numbers(num2 = 3, num1 = 2)) # αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αžŸαžšαžŸαŸαžšαžαžΆαž„αžŠαžΎαž˜αž‚αžΊαž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αž‘αžΎαž™ +``` + +### Function Returning a Value - Part 2 + +(αž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž•αŸ’αžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒ αž˜αž½αž™ αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ - αž•αŸ’αž“αŸ‚αž€ ្) + + αž€αžΆαž›αžŽαžΆαžŠαŸ‚αž›αž™αžΎαž„αž˜αž·αž“αž‘αžΆαž‰αž™αžΎαž„αžαž˜αŸ’αž›αŸƒαžŽαžΆαž˜αž½αž™αž–αžΈ αž’αž“αž»αž‚αž˜αž“αŸαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž‘αŸ αž“αŸ„αŸ‡αž’αž“αž»αž‚αž˜αž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αžΉαž„αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒ αž‘αž‘αŸαžš (_None_) αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŠαžΎαž˜αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž…αž‘αžΆαž‰αž™αž€αžαž˜αŸ’αž›αŸƒαžŽαžΆαž˜αž½αž™αž–αžΈαž’αž“αž»αž‚αž˜αž“αŸαž”αžΆαž“αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎ αž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡ (keyword) _return_ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž‚αžΊαž’αžαŸαžšαžŠαŸ‚αž›αž™αžΎαž„αž‘αžΆαž‰αž™αž€αžαž˜αŸ’αž›αŸƒαž–αžΈαžœαžΆαŸ” αž™αžΎαž„αž’αžΆαž…αž‘αžΆαž‰αž™αž€αžαž˜αŸ’αž›αŸƒ αž˜αž·αž“αžαžΆαžœαžΆαž˜αžΆαž“αž‘αž·αž“αŸ’αž“αŸαž™αž”αŸ’αžšαž—αŸαž‘αž’αŸ’αžœαžΈαž“αŸ„αŸ‡αž‘αŸ αž–αžΈαž’αž“αž»αž‚αž˜αž“αŸαŸ” + + +- Returning a string (αž‘αžΆαž™αž™αž€ string): +**αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def print_name(firstname): + return firstname +print_name('Asabeneh') # Asabeneh + +def print_full_name(firstname, lastname): + space = ' ' + full_name = firstname + space + lastname + return full_name +print_full_name(firstname='Asabeneh', lastname='Yetayeh') +``` + +- Returning a number (αž‘αžΆαž‰αž™αž€αžαž˜αŸ’αž›αŸƒαž‡αžΆ number): + +**αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def add_two_numbers (num1, num2): + total = num1 + num2 + return total +print(add_two_numbers(2, 3)) + +def calculate_age (current_year, birth_year): + age = current_year - birth_year + return age; +print('Age: ', calculate_age(2019, 1819)) +``` + +- Returning a boolean (αž‘αžΆαž‰αž™αž€αžαž˜αŸ’αž›αŸƒαž‡αžΆαž”αŸŠαžΌαž›αžΈαž“): + **αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def is_even (n): + if n % 2 == 0: + print('even') + return True # return αž”αž‰αŸ’αžαž”αŸ‹αž“αžΌαžœαžŠαŸ†αžŽαŸαžΈαžšαž€αžΆαžšαž“αŸƒαž’αž“αž»αž‚αž˜αž“αŸαž”αž“αŸ’αžαž‘αŸ€αžαžŠαŸ‚αž›αžœαžΆαžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„ break αžŠαŸ‚αžš + return False +print(is_even(10)) # True αž–αž·αž +print(is_even(7)) # False αž˜αž·αž“αž–αž·αž +``` + +- Returning a list (αž‘αžΆαž‰αž™αž€αžαž˜αŸ’αž›αŸƒαž‡αžΆ list ): + **αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def find_even_numbers(n): + evens = [] + for i in range(n + 1): + if i % 2 == 0: + evens.append(i) + return evens +print(find_even_numbers(10)) +``` + +### Function with Default Parameters + +(αž’αž“αž»αž‚αž˜αž“αŸαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαžΎαž˜) + +αž–αŸαž›αžαŸ’αž›αŸ‡αž™αžΎαž„αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αžαž˜αŸ’αž›αŸƒαž“αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαžΎαž˜αž¬αž‚αŸ„αž› (αž˜αžΆαž“αž“αŸαž™αžαžΆ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸ…αž–αŸαž›αž αŸ… (call or invoke) αž’αž“αž»αž‚αž˜αž“αŸαž˜αž€αž”αŸ’αžšαžΎαž αžΎαž™αž˜αž·αž“αž”αžΆαž“αžŠαžΆαž€αŸ‹αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž±αŸ’αž™αžœαžΆ αž’αž“αž»αž‚αž˜αž“αŸαž“αžΉαž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαžΎαž˜αž˜αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αžΎαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αž˜αžΈ αž’αž“αž»αž‚αž˜αž“αŸαž“αžΉαž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αž˜αžΈαž‡αŸ†αž“αž½αžŸαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž…αžΆαžŸαŸ‹αžœαž·αž‰)αŸ” + + +```py +# αž›αŸ†αž“αžΆαŸ† +# αž€αžΆαžšαžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸ +def function_name(param = value): + codes + codes +# αž€αžΆαžšαž αŸ…αž’αž“αž»αž‚αž˜αž“αŸαž˜αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ +function_name() +function_name(arg) +``` + +**αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def greetings (name = 'Peter'): + message = name + ', welcome to Python for Everyone!' + return message +print(greetings()) +print(greetings('Asabeneh')) + +def generate_full_name (first_name = 'Asabeneh', last_name = 'Yetayeh'): + space = ' ' + full_name = first_name + space + last_name + return full_name + +print(generate_full_name()) +print(generate_full_name('David','Smith')) + +def calculate_age (birth_year,current_year = 2021): + age = current_year - birth_year + return age; +print('Age: ', calculate_age(1821)) + +def weight_of_object (mass, gravity = 9.81): + weight = str(mass * gravity)+ ' N' # αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΌαžœαž€αŸ‚αž”αŸ’αžšαŸ‚αž‘αŸ…αž‡αžΆ string αž‡αžΆαž˜αž»αž“αžŸαž·αž“ + return weight +print('Weight of an object in Newtons: ', weight_of_object(100)) # 9.81 - αž‘αŸ†αž“αžΆαž‰αž˜αž’αŸ’αž™αž˜αž›αžΎαž•αŸ’αž‘αŸƒαž•αŸ‚αž“αžŠαžΈ +print('Weight of an object in Newtons: ', weight_of_object(100, 1.62)) # αž‘αŸ†αž“αžΆαž‰αž›αžΎαž•αŸ’αž‘αŸƒαž–αŸ’αžšαŸ‡αž…αŸαž“αŸ’αž‘ +``` + +### Arbitrary Number of Arguments + +(αž…αŸ†αž“αž½αž“αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž˜αž·αž“αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹) + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž˜αž·αž“αžŠαžΉαž„αž–αžΈαž…αŸ†αž“αž½αž“αž“αŸƒαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž’αž“αž»αž‚αž˜αž“αŸαžαžΆαž˜αžΆαž“αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž‘αŸ αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž…αŸ†αž“αž½αž“αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜ \* αž˜αž»αž“αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹ αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ” + + +```py +# αž›αŸ†αž“αžΆαŸ† +# αž€αžΆαžšαžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸ +def function_name(*args): + codes + codes +# αž€αžΆαžšαž αŸ…αž’αž“αž»αž‚αž˜αž“αŸαž˜αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ +function_name(param1, param2, param3,..) +``` + +**αž§αž‘αžΆαž αžšαžŽαŸ:** + +```py +def sum_all_nums(*nums): + total = 0 + for num in nums: + total += num # total +=num αž™αžΎαž„αž’αžΆαž…αžŸαžšαžŸαŸαžšαžαžΆ total = total+ num αž€αŸαž”αžΆαž“ + return total +print(sum_all_nums(2, 3, 5)) # 10 +``` + +### Default and Arbitrary Number of Parameters in Functions + +(αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž‚αŸ„αž› ឬ αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αž·αž“αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž“αž»αž‚αž˜αž“αŸ) + +```py +def generate_groups (team,*args): + print(team) + for i in args: + print(i) +print(generate_groups('Team-1','Asabeneh','Brook','David','Eyob')) +``` + +### Function as a Parameter of Another Function + +(αž’αž“αž»αž‚αž˜αž“αŸαž‡αžΆαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αž‘αŸ’αžšαž“αŸƒαž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž) + +```py +#You can pass functions around as parameters αž’αŸ’αž“αž€αž’αžΆαž…αž”αž‰αŸ’αž…αžΌαž›αž’αž“αž»αž‚αž˜αž“αŸαž‡αžΆ αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž€αŸαž”αžΆαž“ +def square_number (n): + return n * n +def do_something(f, x): + return f(x) +print(do_something(square_number, 3)) # 27 +``` + +## πŸ’» Exercises: Day 11 + +### Exercises: Level 1 + +1. αžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ _add_two_numbers_ αžŠαŸ‚αž›αž˜αžΆαž“αž–αžΈαžšαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž αžΎαž™ αž‘αžΆαž‰αžαž˜αŸ’αž›αŸƒαžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αžΌαž€αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸ„αŸ‡αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαŸ” +2. αž•αŸ’αž‘αŸƒαžšαž„αŸ’αžœαž„αŸ‹αž˜αžΆαž“αžšαžΌαž”αž”αž“αŸ’αž: area = Ο€ x r x rαŸ” αž…αžΌαžšαžŸαžšαžŸαŸαžšαž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž‚αžŽαž“αžΆ _area_of_circle_αŸ” +3. αžŸαžšαžŸαŸαžšαž’αž“αž»αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž αŸ…αžαžΆ add_all_nums αžŠαŸ„αž™αž˜αž·αž“αž€αŸ†αžŽαžαŸ‹αž…αŸ†αž“αž½αž“αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹ αž αžΎαž™αž”αžΌαž€αž”αž‰αŸ’αž…αžΌαž›αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαŸ” αž–αž·αž“αž·αžαŸ’αžšαž˜αžΎαž›αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαž‡αžΆαž›αŸαž αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž›αŸαžαž‘αŸ αžαŸ’αžšαžΌαžœαž•αŸ’αžŠαž›αŸ‹αž…αž˜αŸ’αž›αžΎαž™αž˜αž½αž™αžŠαŸ‚αž›αžŸαž˜αžšαž˜αŸ’αž™αŸ” + + +4. αžŸαžΈαžαž»αžŽαŸ’αž αž—αžΆαž–αž‡αžΆ Β°C αž’αžΆαž…αž”αŸ†αž˜αŸ’αž›αŸ‚αž„αžœαžΆαž‘αŸ…αž‡αžΆ Β°F αžŠαŸ„αž™αž”αŸ’αžšαžΎαžšαžΌαž”αž˜αž“αŸ’αž: Β°F = (Β°C x 9/5) + 32αŸ” αžŸαžšαžŸαŸαžšαž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž”αŸ†αž˜αŸ’αž›αŸ‚αž„αž–αžΈ Β°C αž‘αŸ… Β°F _convert_celsius_to-fahrenheit_αŸ” + +5. αžŸαžšαžŸαŸαžšαž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž’αžΆαž… αž†αŸ‚αž€ αžšαžŠαžΌαžœαž€αžΆαž›αŸ” αž™αžΎαž„αž™αž€ αžαŸ‚ αž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸƒαž’αž“αž»αž‚αž˜αž“αŸ αž αžΎαž™αž‘αžΆαž‰αžαž˜αŸ’αž›αŸƒαž…αŸαž‰αž–αžΈαž’αž“αž»αž‚αž˜αž“αŸαžœαž·αž‰αž‡αžΆαžšαžŠαžΌαžœαž€αžΆαž›αžšαž½αž˜αž˜αžΆαž“αŸ– αžŸαžšαž‘αžšαžŠαžΌαžœ αžšαžŠαžΌαžœαžšαž„αžΆ αž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœ αž¬αžšαžŠαžΌαžœαž€αŸ’αžαŸ…αŸ” + +6. αžŸαžšαžŸαŸαžšαž’αž“αž»αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž αŸ…αžαžΆ calculate_slope αžŠαŸ‚αž›αž‘αžΆαž‰αžαž˜αŸ’αž›αŸƒαž‡αž˜αŸ’αžšαžΆαž›αž“αŸƒαžŸαž˜αžΈαž€αžΆαžšαž“αžΈαž›αŸαž’αŸŠαŸ‚αžšαž…αŸαž‰αž–αžΈαž’αž“αž»αž‚αž˜αž“αŸαž“αŸ„αŸ‡αžœαž·αž‰αŸ” + +7. αžŸαž˜αžΈαž€αžΆαžšβ€‹αž€αžΆαžšαŸ‰αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžŽαž“αžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαžšαžΌαž”αž˜αž“αŸ’αž: axΒ² + bx + c = 0. αž…αžΌαžšαžŸαžšαžŸαŸαžšαž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž‚αžŽαž“αžΆαž…αž˜αŸ’αž›αžΎαž™αž“αŸƒαžŸαž˜αžΈαž€αžΆαžšαž€αžΆαžšαŸ‰αŸαŸ” solve_quadratic_eqn_αŸ” +8. αžαžΆαž„αžŸαž˜αžΈαž€αžΆαžšαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ print_list. αžœαžΆαž™αž€ list αž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž αžΎαž™ αžœαžΆαž”αž„αŸ’αž αžΆαž‰αž˜αž€αžœαž·αž‰αž“αžΌαžœαžαž˜αŸ’αž›αŸƒαž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ listαŸ” +9. αžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ reverse_list . αžœαžΆαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ array αž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž αžΎαž™αžœαžΆαž•αŸ’αžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαž‘αž”αŸ‹αžœαžΈαž‰αž‡αžΆ array αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸ (αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ loop αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž›αŸ†αž αžΆαžαŸ‹αž“αŸαŸ‡)αŸ” + + +```py +print(reverse_list([1, 2, 3, 4, 5])) +# [5, 4, 3, 2, 1] +print(reverse_list1(["A", "B", "C"])) +# ["C", "B", "A"] +``` +10. αžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ capitalize_list_items. αžœαžΆαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ list αž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž αžΎαž™αž•αŸ’αžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒαž˜αž€αžœαž·αž‰αž‡αžΆ αž’αž€αŸ’αžŸαžšαž’αŸ† αž“αŸƒαž’αžΆαžαž»αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž»αž„ listαŸ” + +11. αžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž»αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ add_item. αžœαžΆαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ list αž“αž·αž„ αž’αžΆαžαž» (αžαž˜αŸ’αž›αŸƒ) αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αž½αž™αŸ” αž αžΎαž™αž’αž“αž»αž‚αž˜αž“αŸαž“αŸ„αŸ‡αž•αŸ’αžŠαž›αŸ‹αžαŸ’αžšαž‘αž”αŸ‹αžœαž·αž‰αž“αžΌαžœ list αž‡αžΆαž˜αž½αž™αž“αžΉαž„ αž’αžΆαžαž»αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž€αŸ’αž“αž»αž„ listαŸ” + + +```py +food_staff = ['Potato', 'Tomato', 'Mango', 'Milk']; +print(add_item(food_staff, 'Meat')) # ['Potato', 'Tomato', 'Mango', 'Milk','Meat']; +numbers = [2, 3, 7, 9]; +print(add_item(numbers, 5)) [2, 3, 7, 9, 5] +``` + +12. αžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž»αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ remove_item. αžœαžΆαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ list αž“αž·αž„ αž’αžΆαžαž» (αžαž˜αŸ’αž›αŸƒ) αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αž½αž™αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαž˜αŸ’αž›αŸƒαž’αžΆαžαž» αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ list αžŸαŸ’αžšαžΆαž”αŸ‹ αž’αž“αž»αž‚αž˜αž“αŸαžαŸ’αžšαžΌαžœαž•αŸ’αžŠαž›αŸ‹αžαŸ’αžšαž‘αž”αŸ‹αžœαž·αž‰αž“αžΌαžœ list αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž” αž’αžΆαžαž» (αž’αžΆαžαž»αžŠαŸ‚αž›αž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš) αž…αŸαž‰αž–αžΈαžœαžΆαŸ” + + +```py +food_staff = ['Potato', 'Tomato', 'Mango', 'Milk']; +print(remove_item(food_staff, 'Mango')) # ['Potato', 'Tomato', 'Milk']; +numbers = [2, 3, 7, 9]; +print(remove_item(numbers, 3)) # [2, 7, 9] +``` +13. αžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ sum_of_numbers. αžœαžΆαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž›αŸαžαž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž αžΎαž™ αž’αŸ’αžœαžΎαž•αž›αž”αžΌαž€αž“αŸƒαž›αŸαžαžŠαŸ‚αž›αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž“αŸƒαž›αŸαžαž“αŸ„αŸ‡αŸ” + + +```py +print(sum_of_numbers(5)) # 15 = 1+2+3+4+5 + +print(sum_all_numbers(10)) # 55 = 1+2+4+5+ ...+10 +print(sum_all_numbers(100)) # 5050 +``` + +14. αžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆsum_of_odds. αžœαžΆαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž›αŸαžαž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž αžΎαž™ αž’αŸ’αžœαžΎαž•αž›αž”αžΌαž€αž“αŸƒαž›αŸαžαžŠαŸ‚αž›αžŸαŸαžŸαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž“αŸƒαž›αŸαžαž“αŸ„αŸ‡αŸ” + +15. αžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆsum_of_odds. αžœαžΆαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž›αŸαžαž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž αžΎαž™ αž’αŸ’αžœαžΎαž•αž›αž”αžΌαž€αž“αŸƒαž›αŸαžαžŠαŸ‚αž›αž‚αžΌαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž“αŸƒαž›αŸαžαž“αŸ„αŸ‡αŸ” + + +### Exercises: Level 2 + +1. αžαžΆαž„αž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ evens_and_odds . αžœαžΆαž™αž€αž…αŸ†αž“αž½αž“αž‚αžαŸ‹αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž‡αžΆαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž αžΎαž™αžœαžΆαžšαžΆαž”αŸ‹αž…αŸ†αž“αž½αž“αž‚αžΌ αž“αž·αž„αžŸαŸαžŸαž€αŸ’αž“αž»αž„αž…αŸ†αž“αž½αž“αž“αŸ„αŸ‡αŸ” + +```py + print(evens_and_odds(100)) + # The number of odds are 50. + # The number of evens are 51. +``` + +2. αž αŸ…αž’αž“αž»αž‚αž˜αž“αŸ αž αŸ’αžœαžΆαž€αŸ‹αžαžΌαžšαžΈαž™αŸ’αž™αŸ‚αž› αžŠαŸ‚αž›αžœαžΆαž™αž€αž›αŸαžαž‘αžΆαŸ†αž„αž˜αžΌαž›αž‡αžΆαžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž αžΎαž™ αž•αŸ’αžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒ αž αŸ’αžœαžΆαž€αŸ‹αžαžΌαžšαžΈαž™αŸ’αž™αŸ‚αž› αž“αŸƒαž›αŸαžαž“αŸ„αŸ‡αŸ” + +3. αž αŸ…αž’αž“αž»αž‚αž˜αž“αŸ _is_empty_, αž αžΎαž™αžœαžΆαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž αžΎαž™αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžœαžΆαž‘αž‘αŸαžšαž¬αž’αžαŸ‹αŸ” +4. αžŸαžšαžŸαŸαžšαž’αž“αž»αž‚αž˜αž“αŸαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ lists. αžœαžΆαž‚αž½αžšαžαŸ‚ calculate_mean, calculate_median, calculate_mode, calculate_range, calculate_variance, calculate_std (standard deviation). + +### Exercises: Level 3 + +1. αžŸαžšαžŸαŸαžšαž’αž“αž»αž‚αž˜αž“αŸαžŠαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ is_prime αžŠαŸ‚αž›αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαž›αŸαžαž“αŸ„αŸ‡αž‡αžΆ αž›αŸαžαž”αž‹αž˜ αžŠαŸ‚αžšαž¬αž’αžαŸ‹αŸ” + + +1. αžŸαžšαžŸαŸαžšαž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαž‚αŸ’αžšαž”αŸ‹αž’αžΆαžαž»αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž»αž„ list αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸ‡αžαž»αžŸαŸ—αž‚αŸ’αž“αžΆαŸ” + +1.αžŸαžšαžŸαŸαžšαž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαž‚αŸ’αžšαž”αŸ‹αž’αžΆαžαž»αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž»αž„ list αž˜αžΆαž“αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αž‚αŸ’αž“αžΆ (αž§αž‘αžΆαž αžšαžŽαŸαžαžΆ αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸƒαž‚αŸ’αžšαž”αŸ‹αž’αžΆαžαž»αžŠαŸ‚αž›αž“αŸ…αž€αŸ’αž“αž»αž„ list αž˜αžΆαž“ data type αž‡αžΆ int )αŸ” + +1. αžŸαžšαžŸαŸαžšαž’αž“αž»αž‚αž˜αž“αŸαžŠαŸ‚αž›αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆ variable( αž’αž‰αŸ’αž‰αžαŸ’αžαž· ) αžŠαŸ‚αž›αž”αžΆαž“αžαžΆαž„αž‡αžΆαž’αž‰αŸ’αž‰αžαŸ’αžαž·αžŠαŸ‚αž›αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž€αŸ’αž“αž»αž„αž—αžΆαžŸαžΆ pythonαŸ” + +1. αž…αžΌαž›αž€αŸ’αž“αž»αž„ data folder αž αžΎαž™αžŸαŸ’αžœαŸ‚αž„αžšαž€ file αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ countries-data.pyαŸ” + - αž”αž„αŸ’αž€αžΎαžαž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž αŸ…αžαžΆ most_spoken_languages αž“αŸ…αž›αžΎαž–αž·αž—αž–αž›αŸ„αž€αŸ” αžœαžΆαž‚αž½αžšαžαŸ‚αž•αŸ’αžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαž‘αž”αŸ‹αžœαž·αž‰ 10 ឬ 20 αž—αžΆαžŸαžΆαžŠαŸ‚αž›αž˜αž“αž»αžŸαŸ’αžŸαž›αžΎαž–αž·αž—αž–αž›αŸ„αž€αž“αž·αž™αžΆαž™αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž‚αŸαžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž–αžΈαž’αŸ†αž‘αŸ…αžαžΌαž…αŸ” + - αž”αž„αŸ’αž€αžΎαžαž’αž“αž»αž‚αž˜αž“αŸαž˜αž½αž™αžŠαŸ‚αž›αž αŸ…αžαžΆ most_populated_countries αžŠαŸ‚αž›αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž’αž“αž»αž‚αž˜αž“αŸαž“αŸ„αŸ‡αž•αŸ’αžŠαž›αŸ‹αžαž˜αŸ’αž›αŸƒ 10 ឬ 20 αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αžΌαžœαž”αŸ’αžšαž‘αŸαžŸαžŠαŸ‚αž›αž›αŸ’αž”αžΈαž‡αžΆαž„αž‚αŸαž›αžΎαž–αž·αž—αž–αž›αŸ„αž€αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹ + αž›αŸ†αžŠαŸ„αž™αžŠαŸ„αž™αž”αŸ’αžšαž‘αŸαžŸαžŠαŸ‚αž›αž›αŸ’αž”αžΈαž‡αžΆαž„αž‚αŸαž“αŸ…αžαžΆαž„αž›αžΎαŸ” + + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 10](../10_Day_Loops/10_loops.md) | [Day 12 >>](../12_Day_Modules/12_modules.md) diff --git a/Khmer/12_Day_Modules/12_modules.md b/Khmer/12_Day_Modules/12_modules.md new file mode 100644 index 000000000..1b225b9bb --- /dev/null +++ b/Khmer/12_Day_Modules/12_modules.md @@ -0,0 +1,240 @@ +
+

30 Days Of Python: Day 12 - Modules

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ + +[<< Day 11](../11_Day_Functions/11_functions.md) | [Day 13>>](../13_Day_List_comprehension/13_list_comprehension.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 12](#-day-12) + - [Modules](#modules) + - [What is a Module](#what-is-a-module) + - [Creating a Module](#creating-a-module) + - [Importing a Module](#importing-a-module) + - [Import Functions from a Module](#import-functions-from-a-module) + - [Import Functions from a Module and Renaming](#import-functions-from-a-module-and-renaming) + - [Import Built-in Modules](#import-built-in-modules) + - [OS Module](#os-module) + - [Sys Module](#sys-module) + - [Statistics Module](#statistics-module) + - [Math Module](#math-module) + - [String Module](#string-module) + - [Random Module](#random-module) + +# πŸ“˜ Day 12 + +## Modules + +### What is a Module +Module αž‚αžΊαž‡αžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΌαžŠ αž¬αž˜αž»αžαž„αžΆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž’αžΆαž…αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” Module αž’αžΆαž…αž‡αžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž…αž˜αŸ’αžšαž»αŸ‡αžαŸ‚αž˜αž½αž™, function αž¬αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž€αžΌαžŠαž’αŸ†αŸ” +### Creating a Module + +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž module αž™αžΎαž„αžŸαžšαžŸαŸαžšαž€αžΌαžŠαžšαž”αžŸαŸ‹αž™αžΎαž„αž€αŸ’αž“αž»αž„ Python script αž αžΎαž™αž™αžΎαž„αž‘αž»αž€αžœαžΆαž‡αžΆ.py file αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ mymodule.py αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžŸαžΌαž˜αž™αžΎαž„αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž“αŸαŸ‡ + +```py +# mymodule.py file +def generate_full_name(firstname, lastname): + return firstname + ' ' + lastname +``` + +αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš main.py αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αž“αžΆαŸ†αž…αžΌαž›αž―αž€αžŸαžΆαžš mymodule.py αŸ” + +### Importing a Module + +αžŠαžΎαž˜αŸ’αž”αžΈαž“αžΆαŸ†αž…αžΌαž›αž―αž€αžŸαžΆαžšαž™αžΎαž„αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡ _import_ αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αž―αž€αžŸαžΆαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” + +```py +# main.py file +import mymodule +print(mymodule.generate_full_name('Asabeneh', 'Yetayeh')) # Asabeneh Yetayeh +``` + +### Import Functions from a Module +αž™αžΎαž„ αž’αžΆαž… αž˜αžΆαž“ αž˜αž»αžαž„αžΆαžš αž‡αžΆαž…αŸ’αžšαžΎαž“ αž€αŸ’αž“αž»αž„ αž―αž€αžŸαžΆαžš αž αžΎαž™ αž™αžΎαž„ αž’αžΆαž… αž“αžΆαŸ†αž…αžΌαž› αž˜αž»αžαž„αžΆαžš αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž•αŸ’αžŸαŸαž„αŸ— + +```py +# main.py file +from mymodule import generate_full_name, sum_two_nums, person, gravity +print(generate_full_name('Asabneh','Yetayeh')) +print(sum_two_nums(1,9)) +mass = 100; +weight = mass * gravity +print(weight) +print(person['firstname']) +``` + +### Import Functions from a Module and Renaming + +αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αžΆαŸ†αž…αžΌαž›αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž˜αŸ‰αžΌαžŒαž»αž›αŸ” +```py +# main.py file +from mymodule import generate_full_name as fullname, sum_two_nums as total, person as p, gravity as g +print(fullname('Asabneh','Yetayeh')) +print(total(1, 9)) +mass = 100; +weight = mass * g +print(weight) +print(p) +print(p['firstname']) +``` + +## Import Built-in Modules + +αžŠαžΌαž…αž—αžΆαžŸαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž™αžΎαž„αž€αŸαž’αžΆαž…αž“αžΆαŸ†αž…αžΌαž›αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ„αž™αž“αžΆαŸ†αž…αžΌαž›αž―αž€αžŸαžΆαžš / αž˜αž»αžαž„αžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡ _import_ αŸ” សូម αž“αžΆαŸ†αž…αžΌαž› αž˜αŸ‰αžΌαžŒαž»αž› រួម αž™αžΎαž„ αž“αžΉαž„ αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž—αžΆαž‚αž…αŸ’αžšαžΎαž“ αž“αŸƒ αž–αŸαž›αžœαŸαž›αžΆ αŸ” αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒαž˜αŸ‰αžΌαžŒαž»αž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžšαž½αž˜αž‚αŸ’αž“αžΆ: _math_, _datetime_, _os_,_sys_, _random_, _statistics_, _collections_, _json_,_re_ +### OS Module + +αžŠαŸ„αž™αž”αŸ’αžšαžΎ python _os_ module αžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž„αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž˜αŸ‰αžΌαžŒαž»αž› OS αž“αŸ…αž€αŸ’αž“αž»αž„ Python αž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαž, αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš directory αž€αžΆαžšαž„αžΆαžšαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“, αž“αž·αž„αž€αžΆαžšαž›αž»αž” directory (folder) αž˜αž½αž™, αž‘αžΆαž‰αž™αž€αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžšαž”αžŸαŸ‹αžœαžΆ, αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αž·αž„αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽ directory αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ” + +```py +# import the module +import os +# Creating a directory +os.mkdir('directory_name') +# Changing the current directory +os.chdir('path') +# Getting current working directory +os.getcwd() +# Removing directory +os.rmdir() +``` + +### Sys Module + +αž˜αŸ‰αžΌαžŒαž»αž› sys αž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžš αž“αž·αž„αž…αž˜αŸ’αžšαž»αŸ‡αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž”αŸ’αžšαŸ‚αž•αŸ’αž“αŸ‚αž€αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž“αŸƒPython runtime environment αŸ” Function sys.argv αžœαž·αž›αžαŸ’αžšαž‘αž”αŸ‹αž”αž‰αŸ’αž‡αžΈαž”αž‰αŸ’αž‡αžΆ line arguments αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαž‘αŸ… Python script αŸ” αž…αŸ†αžŽαž»αž…αž“αŸ… index 0 αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž“αŸαŸ‡αž‚αžΊαž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹ script αž“αŸ… index 1 αž‚αžΊαž‡αžΆαž–αžΆαž€αŸ’αž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαž…αŸαž‰αž–αžΈ command line αŸ” + +Example of a script.py file: + +```py +import sys +#print(sys.argv[0], argv[1],sys.argv[2]) # this line would print out: filename argument1 argument2 +print('Welcome {}. Enjoy {} challenge!'.format(sys.argv[1], sys.argv[2])) +``` + +αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆ តើ script αž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αž˜αŸ‰αŸαž… αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαžšαžŸαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„ command line: +```sh +python script.py Asabeneh 30DaysOfPython +``` + +The result: + +```sh +Welcome Asabeneh. Enjoy 30DayOfPython challenge! +``` + +Some useful sys commands: + +```py +# to exit sys +sys.exit() +# To know the largest integer variable it takes +sys.maxsize +# To know environment path +sys.path +# To know the version of python you are using +sys.version +``` + +### Statistics Module + +αž˜αŸ‰αžΌαžŒαž»αž›αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αŸαžαŸ” αžαž½αž“αžΆαž‘αžΈαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŠαŸ‚αž›αž–αŸαž‰αž“αž·αž™αž˜αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸαŸ‡: _mean_, _median_, _mode_, _stdev_ αž‡αžΆαžŠαžΎαž˜ + +```py +from statistics import * # importing all the statistics modules +ages = [20, 20, 4, 24, 25, 22, 26, 20, 23, 22, 26] +print(mean(ages)) # ~22.9 +print(median(ages)) # 23 +print(mode(ages)) # 20 +print(stdev(ages)) # ~2.3 +``` + +### Math Module + +αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αž“αž·αž„αž€αž˜αŸ’αžšαž·αžαŸ” + +```py +import math +print(math.pi) # 3.141592653589793, pi constant +print(math.sqrt(2)) # 1.4142135623730951, square root +print(math.pow(2, 3)) # 8.0, exponential function +print(math.floor(9.81)) # 9, rounding to the lowest +print(math.ceil(9.81)) # 10, rounding to the highest +print(math.log10(100)) # 2, logarithm with 10 as base +``` + +αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž“αžΆαŸ†αž…αžΌαž›αž˜αŸ‰αžΌαžŒαž»αž› _math_ αžŠαŸ‚αž›αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž’αžΆαž…αž‡αž½αž™αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆ αžαžΎαž˜αŸ‰αžΌαžŒαž»αž›αž“αŸαŸ‡αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡ αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ _help (math)_ ឬ _dir (math)_ αŸ” αž“αŸαŸ‡αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž“αžΆαŸ†αž…αžΌαž›αž˜αž»αžαž„αžΆαžšαžŽαžΆαž˜αž½αž™αž–αžΈαž˜αŸ‰αžΌαžŒαž»αž›αž™αžΎαž„αž“αžΆαŸ†αž…αžΌαž›αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜: + +```py +from math import pi +print(pi) +``` + +αžœαžΆαž€αŸαž’αžΆαž…αž“αžΆαŸ†αž…αžΌαž›αž˜αž»αžαž„αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™ +```py + +from math import pi, sqrt, pow, floor, ceil, log10 +print(pi) # 3.141592653589793 +print(sqrt(2)) # 1.4142135623730951 +print(pow(2, 3)) # 8.0 +print(floor(9.81)) # 9 +print(ceil(9.81)) # 10 +print(math.log10(100)) # 2 + +``` + +αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž“αžΆαŸ†αž…αžΌαž›αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ \* αŸ” +```py +from math import * +print(pi) # 3.141592653589793, pi constant +print(sqrt(2)) # 1.4142135623730951, square root +print(pow(2, 3)) # 8.0, exponential +print(floor(9.81)) # 9, rounding to the lowest +print(ceil(9.81)) # 10, rounding to the highest +print(math.log10(100)) # 2 +``` + +αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž“αžΆαŸ†αž…αžΌαž›αž™αžΎαž„αž€αŸαž’αžΆαž…αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡ function αž•αž„αžŠαŸ‚αžšαŸ” +```py +from math import pi as PI +print(PI) # 3.141592653589793 +``` + +### String Module + +αž˜αŸ‰αžΌαžŒαž»αž› string αž‚αžΊαž‡αžΆαž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αž”αŸ†αžŽαž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αž“αžΌαžœαž€αžΆαžšαž”αŸ’αžšαžΎαž˜αŸ‰αžΌαžŒαž»αž› string αŸ” +```py +import string +print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +print(string.digits) # 0123456789 +print(string.punctuation) # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ +``` + +### Random Module + +αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž”αžΆαž“αžŸαŸ’αž‚αžΆαž›αŸ‹αž’αŸ†αž–αžΈαž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž›αž˜αŸ‰αžΌαžŒαž»αž›αŸ” αžŸαžΌαž˜αž™αžΎαž„αž’αŸ’αžœαžΎαž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž›αž˜αž½αž™αž‘αŸ€αž αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αŸ” αžŸαžΌαž˜αž™αžΎαž„αž“αžΆαŸ†αž…αžΌαž› _random_ module αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž‡αžΆαž…αŸ†αž“αž½αž“αžšαž›αžΌαž“αžšαžœαžΆαž„ 0 αž“αž·αž„ 0.9999.... _random_ module αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ _random_ αž“αž·αž„ _randint_ αžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ + +```py +from random import random, randint +print(random()) # it doesn't take any arguments; it returns a value between 0 and 0.9999 +print(randint(5, 20)) # it returns a random integer number between [5, 20] inclusive +``` + + + + + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 11](../11_Day_Functions/11_functions.md) | [Day 13>>](../13_Day_List_comprehension/13_list_comprehension.md) diff --git a/Khmer/12_Day_Modules/main.py b/Khmer/12_Day_Modules/main.py new file mode 100644 index 000000000..2c11370d9 --- /dev/null +++ b/Khmer/12_Day_Modules/main.py @@ -0,0 +1,9 @@ + +from mymodule import generate_full_name as fullname, sum_two_nums as total, person as p, gravity as g +print(fullname('Asabneh','Yetayeh')) +print(total(1, 9)) +mass = 100; +weight = mass * g +print(weight) +print(p) +print(p['firstname']) \ No newline at end of file diff --git a/Khmer/12_Day_Modules/mymodule.py b/Khmer/12_Day_Modules/mymodule.py new file mode 100644 index 000000000..127ab21f1 --- /dev/null +++ b/Khmer/12_Day_Modules/mymodule.py @@ -0,0 +1,16 @@ +def generate_full_name(firstname, lastname): + space = ' ' + fullname = firstname + space + lastname + return fullname + +def sum_two_nums (num1, num2): + return num1 + num2 +gravity = 9.81 +person = { + "firstname": "Asabeneh", + "age": 250, + "country": "Finland", + "city":'Helsinki' +} + + diff --git a/Khmer/13_Day_List_comprehension/13_list_comprehension.md b/Khmer/13_Day_List_comprehension/13_list_comprehension.md new file mode 100644 index 000000000..2d9f3b1f8 --- /dev/null +++ b/Khmer/13_Day_List_comprehension/13_list_comprehension.md @@ -0,0 +1,152 @@ +
+

30 Days Of Python: Day 13 - List Comprehension

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ + +[<< Day 12](../12_Day_Modules/12_modules.md) | [Day 14>>](../14_Day_Higher_order_functions/14_higher_order_functions.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 13](#-day-13) + - [List Comprehension](#list-comprehension) + - [Lambda Function](#lambda-function) + - [Creating a Lambda Function](#creating-a-lambda-function) + - [Lambda Function Inside Another Function](#lambda-function-inside-another-function) + +# πŸ“˜ Day 13 + +## List Comprehension +αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž–αžΈαž”αž‰αŸ’αž‡αžΈαž€αŸ’αž“αž»αž„ Python αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž‡αžΈαž˜αž½αž™αž–αžΈαž›αŸ†αžŠαžΆαž”αŸ‹αŸ” αžœαžΆαž‡αžΆαžœαž·αž’αžΈαžαŸ’αž›αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž‡αžΈαžαŸ’αž˜αžΈαŸ” αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž”αž‰αŸ’αž‡αžΈαž‚αžΊαž›αžΏαž“αž‡αžΆαž„αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αž‰αŸ’αž‡αžΈαžŠαŸ„αž™αž”αŸ’αžšαžΎ _for_ loop αŸ” + +```py +# syntax +[i for i in iterable if expression] +``` + +**Example:1** + +αž§αž‘αžΆαž αžšαžŽαŸ αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš string αž‘αŸ…αž‡αžΆαž”αž‰αŸ’αž‡αžΈαž’αž€αŸ’αžŸαžšαŸ” αž’αŸ’αž“αž€ αž’αžΆαž… αž”αŸ’αžšαžΎ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš αž–αžΈαžš αž”αžΈαŸ” សូម αž˜αžΎαž› αž˜αž½αž™ αž…αŸ†αž“αž½αž“ αŸ– + +```py +# One way +language = 'Python' +lst = list(language) # changing the string to list +print(type(lst)) # list +print(lst) # ['P', 'y', 't', 'h', 'o', 'n'] + +# Second way: list comprehension +lst = [i for i in language] +print(type(lst)) # list +print(lst) # ['P', 'y', 't', 'h', 'o', 'n'] + +``` + +**Example:2** + +αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž”αž„αŸ’αž€αžΎαžαž”αž‰αŸ’αž‡αžΈαž›αŸαž +```py +# Generating numbers +numbers = [i for i in range(11)] # to generate numbers from 0 to 10 +print(numbers) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + +# It is possible to do mathematical operations during iteration +squares = [i * i for i in range(11)] +print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] + +# It is also possible to make a list of tuples +numbers = [(i, i * i) for i in range(11)] +print(numbers) # [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)] + +``` + +**Example:2** + +αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž”αž‰αŸ’αž‡αžΈαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ if expression + +```py +# Generating even numbers +even_numbers = [i for i in range(21) if i % 2 == 0] # to generate even numbers list in range 0 to 21 +print(even_numbers) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] + +# Generating odd numbers +odd_numbers = [i for i in range(21) if i % 2 != 0] # to generate odd numbers in range 0 to 21 +print(odd_numbers) # [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] +# Filter numbers: let's filter out positive even numbers from the list below +numbers = [-8, -7, -3, -1, 0, 1, 3, 4, 5, 7, 6, 8, 10] +positive_even_numbers = [i for i in range(21) if i % 2 == 0 and i > 0] +print(positive_even_numbers) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] + +# Flattening a three dimensional array +list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] +flattened_list = [ number for row in list_of_lists for number in row] +print(flattened_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9] +``` + +## Lambda Function + +Lambda function αž‚αžΊαž‡αžΆ function αžαžΌαž…αž˜αž½αž™αžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αŸ” αžœαžΆαž’αžΆαž…αž™αž€αž›αŸαžαž’αž’αž·αž”αŸ’αž”αžΆαž™αž‡αžΆαž…αŸ’αžšαžΎαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αžΆαž…αž˜αžΆαž“αžαŸ‚αž–αžΆαž€αŸ’αž™αž˜αž½αž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžαž½αž“αžΆαž‘αžΈ Lambda αž˜αžΆαž“ αž›αž€αŸ’αžαžŽαŸˆ αžŸαŸ’αžšαžŠαŸ€αž„ αž‚αŸ’αž“αžΆ αž“αžΉαž„ αžαž½αž“αžΆαž‘αžΈ αž’αž“αžΆαž˜αž·αž€ αž€αŸ’αž“αž»αž„ JavaScript αŸ” αž™αžΎαž„ αžαŸ’αžšαžΌαžœαž€αžΆαžš វអ αž“αŸ…αž–αŸαž› αžŠαŸ‚αž› αž™αžΎαž„ αž…αž„αŸ‹ សរសេរ αžαž½αž“αžΆαž‘αžΈ αž’αž“αžΆαž˜αž·αž€ αž“αŸ… αž€αŸ’αž“αž»αž„ αžαž½αž“αžΆαž‘αžΈ αž•αŸ’αžŸαŸαž„αŸ” + +### Creating a Lambda Function + +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž a lambda function αž™αžΎαž„αž”αŸ’αžšαžΎ _lambda_ keyword αžŠαŸ‚αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŠαŸ„αž™ parameter (s) αžŠαŸ‚αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžŠαŸ„αž™ expression αŸ” αžŸαžΌαž˜αž˜αžΎαž› syntax αž“αž·αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” αžαž½αž“αžΆαž‘αžΈ Lambda αž˜αž·αž“αž”αŸ’αžšαžΎ return αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž”αžΆαž“αž”αŸ’αžŠαžΌαžš expression αžŠαŸ„αž™αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αŸ” + +```py +# syntax +x = lambda param1, param2, param3: param1 + param2 + param2 +print(x(arg1, arg2, arg3)) +``` + +**Example:** + +```py +# Named function +def add_two_nums(a, b): + return a + b + +print(add_two_nums(2, 3)) # 5 +# Lets change the above function to a lambda function +add_two_nums = lambda a, b: a + b +print(add_two_nums(2,3)) # 5 + +# Self invoking lambda function +(lambda a, b: a + b)(2,3) # 5 - need to encapsulate it in print() to see the result in the console + +square = lambda x : x ** 2 +print(square(3)) # 9 +cube = lambda x : x ** 3 +print(cube(3)) # 27 + +# Multiple variables +multiple_variable = lambda a, b, c: a ** 2 - 3 * b + 4 * c +print(multiple_variable(5, 5, 3)) # 22 +``` + +### Lambda Function Inside Another Function + +αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž›αŸ†αž αžΆαžαŸ‹ lambda αž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸ†αž αžΆαžαŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” +```py +def power(x): + return lambda n : x ** n + +cube = power(2)(3) # function power now need 2 arguments to run, in separate rounded brackets +print(cube) # 8 +two_power_of_five = power(2)(5) +print(two_power_of_five) # 32 +``` + + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 12](../12_Day_Modules/12_modules.md) | [Day 14>>](../14_Day_Higher_order_functions/14_higher_order_functions.md) diff --git a/Khmer/14_Day_Higher_order_functions/14_higher_order_functions.md b/Khmer/14_Day_Higher_order_functions/14_higher_order_functions.md new file mode 100644 index 000000000..5f27e13f6 --- /dev/null +++ b/Khmer/14_Day_Higher_order_functions/14_higher_order_functions.md @@ -0,0 +1,329 @@ +
+

30 Days Of Python: Day 14 - Higher Order Functions

+ + + + + Twitter Follow + + + Author: + Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+
+ + +[<< Day 13](../13_Day_List_comprehension/13_list_comprehension.md) | [Day 15>>](../15_Day_Python_type_errors/15_python_type_errors.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) +- [πŸ“˜ Day 14](#-day-14) + - [Higher Order Functions](#higher-order-functions) + - [Function as a Parameter](#function-as-a-parameter) + - [Function as a Return Value](#function-as-a-return-value) + - [Python Closures](#python-closures) + - [Python Decorators](#python-decorators) + - [Creating Decorators](#creating-decorators) + - [Applying Multiple Decorators to a Single Function](#applying-multiple-decorators-to-a-single-function) + - [Accepting Parameters in Decorator Functions](#accepting-parameters-in-decorator-functions) + - [Built-in Higher Order Functions](#built-in-higher-order-functions) + - [Python - Map Function](#python---map-function) + - [Python - Filter Function](#python---filter-function) + - [Python - Reduce Function](#python---reduce-function) + +# πŸ“˜ Day 14 + +## Higher Order Functions + +αž€αŸ’αž“αž»αž„ Python function αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαž‡αžΆαž–αž›αžšαžŠαŸ’αž‹αž‡αžΆαž“αŸ‹αžαŸ’αž–αžŸαŸ‹, αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž“αŸ…αž›αžΎ function: + +- function αž’αžΆαž…αž™αž€αž˜αž½αž™αž¬αž…αŸ’αžšαžΎαž“ function αž‡αžΆ parameters +- function αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒ function +- function αž’αžΆαž…αž“αžΉαž„ modified +- function αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž±αŸ’αž™ variable + +αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈ: + +1. αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ functions αž‡αžΆ parameters +2. αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ functions αž‡αžΆαžαž˜αŸ’αž›αŸƒαž˜αž€αž–αžΈ functions β€‹αž˜αž½αž™αž‘αŸ€αž +3. αž”αŸ’αžšαžΎ Python closures αž“αž·αž„ decorators + +### Function as a Parameter + +```py +def sum_numbers(nums): # normal function + return sum(nums) # a sad function abusing the built-in sum function :< + +def higher_order_function(f, lst): # function as a parameter + summation = f(lst) + return summation +result = higher_order_function(sum_numbers, [1, 2, 3, 4, 5]) +print(result) # 15 +``` + +### Function as a Return Value + +```py +def square(x): # a square function + return x ** 2 + +def cube(x): # a cube function + return x ** 3 + +def absolute(x): # an absolute value function + if x >= 0: + return x + else: + return -(x) + +def higher_order_function(type): # a higher order function returning a function + if type == 'square': + return square + elif type == 'cube': + return cube + elif type == 'absolute': + return absolute + +result = higher_order_function('square') +print(result(3)) # 9 +result = higher_order_function('cube') +print(result(3)) # 27 +result = higher_order_function('absolute') +print(result(-3)) # 3 +``` + +αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎαž“αŸαŸ‡αžαžΆ higher order function αž€αŸ†αž–αž»αž„αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ function​ αžαž»αžŸαŸ—β€‹αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αŸ…αž›αžΎ parameterαŸ” + +## Python Closures + +ython αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž’αŸ„αž™ function​ αž€αŸ’αž“αž»αž„ function​ αž˜αž½αž™αž‘αŸ€αž αž’αžΆαž…αž”αŸ’αžšαžΎαž’αŸ’αžœαžΈαŸ—αžšαž”αžŸαŸ‹ function​ αž“αŸ…αžαžΆαž„αž›αžΎαŸ” αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αžαžΆαž‡αžΆ ClosureαŸ” αžŸαžΌαž˜αž™αžΎαž„αž˜αžΎαž›αžαžΆ closures αž”αŸ’αžšαžΎαž˜αŸ’αžαŸαžαž€αŸ’αž“αž»αž„ PythonαŸ” αž€αŸ’αž“αž»αž„ Python, closure αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αžŠαžΆαž€αŸ‹ function​​ αž€αŸ’αž“αž»αž„ function​ αž˜αž½αž™αž‘αŸ€αžαž αžΎαž™αžαŸ’αžšαž‘αŸ’αž”αž”αŸ‹αž˜αž€αžœαž·αž‰β€‹ function αžαžΆαž„αž€αŸ’αž“αž»αž„αŸ” αžŸαžΌαž˜αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” + +**Example:** + +```py +def add_ten(): + ten = 10 + def add(num): + return num + ten + return add + +closure_result = add_ten() +print(closure_result(5)) # 15 +print(closure_result(10)) # 20 +``` + +## Python Decorators + +Decorator αž‚αžΊαž‡αžΆ design pattern αž€αŸ’αž“αž»αž„ Python​ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈ αž‘αŸ…αž“αžΉαž„ object αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž€αŸ‚αž”αŸ’αžšαŸ‚αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹αžœαžΆαž‘αŸαŸ” Decorators αž‡αžΆαž‘αžΌαž‘αŸ…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αŸ…αž˜αž»αž“αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž“αŸƒ function​​ αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹ decorate αŸ” + +### Creating Decorators + +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž decorator function,αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš function αžαžΆαž„αž€αŸ’αžšαŸ… αž‡αžΆαž˜αž½αž™αž“αžΉαž„ wrapper function αžαžΆαž„αž€αŸ’αž“αž»αž„αŸ” +**Example:** + +```py +# Normal function +def greeting(): + return 'Welcome to Python' +def uppercase_decorator(function): + def wrapper(): + func = function() + make_uppercase = func.upper() + return make_uppercase + return wrapper +g = uppercase_decorator(greeting) +print(g()) # WELCOME TO PYTHON + +## Let us implement the example above with a decorator + +'''This decorator function is a higher order function +that takes a function as a parameter''' +def uppercase_decorator(function): + def wrapper(): + func = function() + make_uppercase = func.upper() + return make_uppercase + return wrapper +@uppercase_decorator +def greeting(): + return 'Welcome to Python' +print(greeting()) # WELCOME TO PYTHON + +``` + +### Applying Multiple Decorators to a Single Function + +```py + +'''This decorator function is a higher order function +that takes a function as a parameter''' + +# First Decorator +def uppercase_decorator(function): + def wrapper(): + func = function() + make_uppercase = func.upper() + return make_uppercase + return wrapper + +# Second decorator +def split_string_decorator(function): + def wrapper(): + func = function() + splitted_string = func.split() + return splitted_string + + return wrapper + +@split_string_decorator +@uppercase_decorator # order with decorators is important in this case - .upper() function does not work with lists +def greeting(): + return 'Welcome to Python' +print(greeting()) # WELCOME TO PYTHON +``` + +### Accepting Parameters in Decorator Functions + +αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž–αŸαž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš functions αž™αž€ parameters, αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž’αžΆαž…αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹ decorator αžŠαŸ‚αž›αž‘αž‘αž½αž›αž™αž€ parametersαŸ” + +```py +def decorator_with_parameters(function): + def wrapper_accepting_parameters(para1, para2, para3): + function(para1, para2, para3) + print("I live in {}".format(para3)) + return wrapper_accepting_parameters + +@decorator_with_parameters +def print_full_name(first_name, last_name, country): + print("I am {} {}. I love to teach.".format( + first_name, last_name, country)) + +print_full_name("Asabeneh", "Yetayeh",'Finland') +``` + +## Built-in Higher Order Functions + +αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒ built-in higher order functions αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž‚αžΊ _map()_, _filter_, and _reduce_β€‹αŸ” +Lambda function αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž‡αžΆ parameter αž“αž·αž„αž€αžšαžŽαžΈαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž›αŸ’αž’αž”αŸ†αž•αž»αžαž“αŸƒ lambda functions αž‚αžΊαž€αŸ’αž“αž»αž„ functions αžŠαžΌαž…αž‡αžΆ map, filter αž“αž·αž„ reduceαŸ” + +### Python - Map Function + +map() function αž‚αžΊαž‡αžΆ built-in function αžŠαŸ‚αž›αž™αž€ function αž“αž·αž„ iterable αž‡αžΆ parameters. + +```py + # syntax + map(function, iterable) +``` + +**Example:1** + +```py +numbers = [1, 2, 3, 4, 5] # iterable +def square(x): + return x ** 2 +numbers_squared = map(square, numbers) +print(list(numbers_squared)) # [1, 4, 9, 16, 25] +# Lets apply it with a lambda function +numbers_squared = map(lambda x : x ** 2, numbers) +print(list(numbers_squared)) # [1, 4, 9, 16, 25] +``` + +**Example:2** + +```py +numbers_str = ['1', '2', '3', '4', '5'] # iterable +numbers_int = map(int, numbers_str) +print(list(numbers_int)) # [1, 2, 3, 4, 5] +``` + +**Example:3** + +```py +names = ['Asabeneh', 'Lidiya', 'Ermias', 'Abraham'] # iterable + +def change_to_upper(name): + return name.upper() + +names_upper_cased = map(change_to_upper, names) +print(list(names_upper_cased)) # ['ASABENEH', 'LIDIYA', 'ERMIAS', 'ABRAHAM'] + +# Let us apply it with a lambda function +names_upper_cased = map(lambda name: name.upper(), names) +print(list(names_upper_cased)) # ['ASABENEH', 'LIDIYA', 'ERMIAS', 'ABRAHAM'] +``` + +αž’αŸ’αžœαžΈαžŠαŸ‚αž› Map αž’αŸ’αžœαžΎαž‚αžΊαž’αŸ’αžœαžΎ iteration αž›αžΎ list αž˜αž½αž™αŸ” αž§αž‘αžΆαž αžšαžŽαŸαžœαžΆαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž‘αŸ…αž‡αžΆαž’αž€αŸ’αžŸαžšαž’αŸ† αž“αž·αž„αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€ list αžαŸ’αž˜αžΈαŸ” + +### Python - Filter Function + +filter() function αž αŸ… function αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹β€‹ αžŠαŸ‚αž›αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ boolean αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ item αž“αŸƒβ€‹ iterable (list)αŸ” αžœαžΆαž™αž€αž…αŸαž‰ item​​​ αžŠαŸ‚αž›αž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ” +```py + # syntax + filter(function, iterable) +``` + +**Example:1** + +```py +# Lets filter only even nubers +numbers = [1, 2, 3, 4, 5] # iterable + +def is_even(num): + if num % 2 == 0: + return True + return False + +even_numbers = filter(is_even, numbers) +print(list(even_numbers)) # [2, 4] +``` + +**Example:2** + +```py +numbers = [1, 2, 3, 4, 5] # iterable + +def is_odd(num): + if num % 2 != 0: + return True + return False + +odd_numbers = filter(is_odd, numbers) +print(list(odd_numbers)) # [1, 3, 5] +``` + +```py +# Filter long name +names = ['Asabeneh', 'Lidiya', 'Ermias', 'Abraham'] # iterable +def is_name_long(name): + if len(name) > 7: + return True + return False + +long_names = filter(is_name_long, names) +print(list(long_names)) # ['Asabeneh'] +``` + +### Python - Reduce Function + +_reduce()_ function αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Functools Module αž αžΎαž™αž™αžΎαž„αžαŸ’αžšαžΌαžœ import αž–αžΊ module αž“αŸαŸ‡αŸ” αžŠαžΌαž… map αž“αž·αž„ filter +αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αžΈαžš parameters,​ function αž˜αž½αž™ αž“αž·αž„ iterable​ αž˜αž½αž™αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ iterable​ αž˜αž½αž™αž‘αŸ€αž, αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžαž˜αŸ’αž›αŸƒαžαŸ‚αž˜αž½αž™αŸ” +**Example:1** + +```py +numbers_str = ['1', '2', '3', '4', '5'] # iterable +def add_two_nums(x, y): + return int(x) + int(y) + +total = reduce(add_two_nums, numbers_str) +print(total) # 15 +``` + +## πŸ’» Exercises: Day 14 + +```py +countries = ['Estonia', 'Finland', 'Sweden', 'Denmark', 'Norway', 'Iceland'] +names = ['Asabeneh', 'Lidiya', 'Ermias', 'Abraham'] +numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +``` + +[<< Day 13](../13_Day_List_comprehension/13_list_comprehension.md) | [Day 15>>](../15_Day_Python_type_errors/15_python_type_errors.md) \ No newline at end of file diff --git a/Khmer/15_Day_Python_type_errors/15_python_type_errors.md b/Khmer/15_Day_Python_type_errors/15_python_type_errors.md new file mode 100644 index 000000000..d54ac131f --- /dev/null +++ b/Khmer/15_Day_Python_type_errors/15_python_type_errors.md @@ -0,0 +1,361 @@ +
+

30 Days Of Python: Day 15 - Python Type Errors

+ + + + + Twitter Follow + + + Author: + Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+
+ + +[<< Day 14](../14_Day_Higher_order_functions/14_higher_order_functions.md) | [Day 16 >>](../16_Day_Python_date_time/16_python_datetime.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) +- [πŸ“˜ Day 15](#-day-15) + - [Python Error Types](#python-error-types) + - [SyntaxError](#syntaxerror) + - [NameError](#nameerror) + - [IndexError](#indexerror) + - [ModuleNotFoundError](#modulenotfounderror) + - [AttributeError](#attributeerror) + - [KeyError](#keyerror) + - [TypeError](#typeerror) + - [ImportError](#importerror) + - [ValueError](#valueerror) + - [ZeroDivisionError](#zerodivisionerror) + - [πŸ’» Exercises: Day 15](#-exercises-day-15) + +# πŸ“˜ Day 15 + +## Python Error Types + +αž“αŸ…αž–αŸαž›αž™αžΎαž„αžŸαžšαžŸαŸαžšαž€αžΌαžŠαžœαžΆαž‡αžΆαžšαžΏαž„αž’αž˜αŸ’αž˜αžαžΆαžŠαŸ‚αž›αž™αžΎαž„αžŸαžšαžŸαŸαžšαž–αžΆαž€αŸ’αž™αžαž»αžŸαž¬αž€αŸ†αž αž»αžŸαž•αŸ’αžŸαŸαž„αŸ— αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΌαžŠαžšαž”αžŸαŸ‹αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“β€‹β€‹β€‹ Python αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αžŸαžΆαžš αžŠαŸ‚αž›αž†αŸ’αž›αžΎαž™αžαž”αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž€αžΎαžαž‘αžΎαž„ αž“αž·αž„αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αŸ†αž αž»αžŸαŸ” αžœαžΆαž€αŸαž’αžΆαž…αž•αŸ’αžαž›αŸ‹αž™αŸ„αž”αž›αŸ‹αžŠαž›αŸ‹αž™αžΎαž„αž’αŸ†αž–αžΈαž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αžŠαŸ‚αžšαŸ” αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž–αžΈαž€αŸ†αž αž»αžŸαž•αŸ’αžŸαŸαž„αŸ—αž€αŸ’αž“αž»αž„αž—αžΆαžŸαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αžΉαž„αž‡αž½αž™αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžš debug αž€αžΌαžŠαžšαž”αžŸαŸ‹αž™αžΎαž„αž²αŸ’αž™αž”αžΆαž“αž†αžΆαž”αŸ‹αžšαž αŸαžŸαž αžΎαž™αžœαžΆαž€αŸαž’αŸ’αžœαžΎαž’αŸ„αž™αž™αžΎαž„αž›αŸ’αž’αž‡αžΆαž„αž‚αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž’αŸ’αžœαžΎαŸ” + +αžŸαžΌαž˜αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž‘αžΌαž‘αŸ…αž”αŸ†αž•αž»αžαž˜αž½αž™αŸ—αŸ” αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΎαž€ shell Python αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšβ€‹ Terminal αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αžŸαžšαžŸαŸαžšαžαžΆ "python" αž€αž‰αŸ’αž…αž”αŸ‹ Python αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΎαž€αŸ” + +### SyntaxError + +**Example 1: SyntaxError** + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> print 'hello world' + File "", line 1 + print 'hello world' + ^ +SyntaxError: αžαŸ’αžœαŸ‡αžαžΆαžαžœαž„αŸ‹αž€αŸ’αžšαž…αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž αŸ…αž‘αŸ… 'print'. αžαžΎαž’αŸ’αž“αž€αž˜αžΆαž“αž“αŸαž™αžαžΆ print('hello world')? +>>> +``` + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž”αžΆαž“αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαž€αŸ†αž αž»αžŸ syntax αž–αŸ’αžšαŸ„αŸ‡αž™αžΎαž„αž”αžΆαž“αž—αŸ’αž›αŸαž…αž”αž·αž‘ string αž‡αžΆαž˜αž½αž™ αžœαž„αŸ‹αž€αŸ’αžšαž… αž αžΎαž™ Python αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžšαž½αž…αž αžΎαž™ αžŸαžΌαž˜αž±αŸ’αž™αž™αžΎαž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžœαžΆαŸ” + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> print 'hello world' + File "", line 1 + print 'hello world' + ^ +SyntaxError: αžαŸ’αžœαŸ‡αžαžΆαžαžœαž„αŸ‹αž€αŸ’αžšαž…αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž αŸ…αž‘αŸ… 'print'. αžαžΎαž’αŸ’αž“αž€αž˜αžΆαž“αž“αŸαž™αžαžΆ print('hello world')? +>>> print('hello world') +hello world +>>> +``` + +αž€αŸ†αž αž»αžŸαž‚αžΊ _SyntaxError_ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž›αŸαžαž€αžΌαžŠαžšαž”αžŸαŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαŸ” αžŸαžΌαž˜αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘ Error αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž + +### NameError + +**Example 1: NameError** + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> print(age) +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +NameError: αžˆαŸ’αž˜αŸ„αŸ‡ 'age' αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ +>>> +``` + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž–αžΈαžŸαžΆαžšαžαžΆαž„αž›αžΎ αžˆαŸ’αž˜αŸ„αŸ‡αž’αžΆαž™αž»αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ” αž–αž·αžαžŽαžΆαžŸαŸ‹ αž™αžΎαž„αž˜αž·αž“αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹β€‹β€‹ age variable​ β€‹αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž€αŸ†αž–αž»αž„αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž…αŸαž‰αžŠαžΌαž…αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸαžœαžΆαŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡, αž™αžΎαž„αžαŸ’αžšαžΌαžœαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαž€αžΆαžŸαžœαžΆ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžαž˜αŸ’αž›αŸƒαŸ” + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> print(age) +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +NameError: αžˆαŸ’αž˜αŸ„αŸ‡ 'age' αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ +>>> age = 25 +>>> print(age) +25 +>>> +``` + +αž”αŸ’αžšαž—αŸαž‘αž€αŸ†αž αž»αžŸαž‚αžΊ _NameError_ αŸ” αž™αžΎαž„αž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ†αž αž»αžŸαžŠαŸ„αž™αž€αŸ†αžŽαžαŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹ variable αŸ” + +### IndexError + +**Example 1: IndexError** + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> numbers = [1, 2, 3, 4, 5] +>>> numbers[5] +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +IndexError: αž›αžΎαžŸαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž”αž‰αŸ’αž‡αžΈβ€‹ +>>> +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎαž“αŸαŸ‡ Python αž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αžαžΆ _IndexError_ αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž”αž‰αŸ’αž‡αžΈαž˜αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž€αž˜αŸ’αžšαž·αžαž–αžΈ 0 αžŠαž›αŸ‹ 4 αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž“αŸ…αž€αŸ’αžšαŸ…αž€αž˜αŸ’αžšαž·αžαŸ” + +### ModuleNotFoundError + +**Example 1: ModuleNotFoundError** + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> import maths +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +ModuleNotFoundError: αž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ 'maths' +>>> +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎαž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ s αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž›αžΎαž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαžŠαŸ„αž™αž…αŸαžαž“αžΆαž αžΎαž™ _ModuleNotFoundError_ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αŸ” αžŸαžΌαž˜αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžœαžΆαžŠαŸ„αž™αž›αž»αž” s αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> import maths +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +ModuleNotFoundError: αž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ 'maths' +>>> import math +>>> +``` + +αž™αžΎαž„αž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžœαžΆαžšαž½αž…αž αžΎαž™ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžšαžαŸ’αž›αŸ‡αž–αžΈαž˜αŸ‰αžΌαžŒαž»αž›αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ + +### AttributeError + +**Example 1: AttributeError** + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> import maths +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +ModuleNotFoundError: αž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ 'maths' +>>> import math +>>> math.PI +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +AttributeError: αž˜αŸ‰αžΌαžŒαž»αž› 'math' αž‚αŸ’αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž· 'PI' +>>> +``` + +αžŠαžΌαž… αžŠαŸ‚αž› αž’αŸ’αž“αž€ αž’αžΆαž… αž˜αžΎαž› αž”αžΆαž“ αžαŸ’αž‰αž»αŸ† αž”αžΆαž“ αž’αŸ’αžœαžΎ αž€αŸ†αž αž»αžŸ αž˜αŸ’αžαž„ αž‘αŸ€αž! αž‡αŸ†αž“αž½αžŸαž–αžΈ pi αžαŸ’αž‰αž»αŸ†αž–αŸ’αž™αžΆαž™αžΆαž˜αž αŸ… function PI αž–αžΈαž˜αŸ‰αžΌαžŒαž»αž›αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ αžœαžΆαž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αž–αžΈαž€αŸ†αž αž»αžŸαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž· αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆ αžαž½αž“αžΆαž‘αžΈαž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αŸ” αž™αžΎαž„αž€αŸ‚αžœαžΆαžŠαŸ„αž™αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž–αžΈ PI αž‘αŸ… pi + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> import maths +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +ModuleNotFoundError: αž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ 'maths' +>>> import math +>>> math.PI +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +AttributeError: αž˜αŸ‰αžΌαžŒαž»αž› 'math' αž‚αŸ’αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž· 'PI' +>>> math.pi +3.141592653589793 +>>> +``` + +αž₯αž‘αžΌαžœαž“αŸαŸ‡, αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž αŸ… pi αž–αžΈαž˜αŸ‰αžΌαžŒαž»αž›αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž›αž‘αŸ’αž’αž•αž›αŸ” + +### KeyError + +**Example 1: KeyError** + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> users = {'name':'Asab', 'age':250, 'country':'Finland'} +>>> users['name'] +'Asab' +>>> users['county'] +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +KeyError: 'county' +>>> +``` + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αžƒαžΎαž‰ αž‚αžΊαž˜αžΆαž“αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„ Key αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αžαž˜αŸ’αž›αŸƒαž“αŸƒ Dictionary αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž‡αžΆ Key Error αž αžΎαž™αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αžŸαžΌαž˜αž’αŸ’αžœαžΎαžœαžΆ! + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> user = {'name':'Asab', 'age':250, 'country':'Finland'} +>>> user['name'] +'Asab' +>>> user['county'] +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +KeyError: 'county' +>>> user['country'] +'Finland' +>>> +``` + +αž™αžΎαž„αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αž€αŸ†αž αž»αžŸ, αž€αžΌαžŠαžšαž”αžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžαž˜αŸ’αž›αŸƒαŸ” + +### TypeError + +**Example 1: TypeError** + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> 4 + '3' +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +TypeError: operand αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžš type(s) for +: 'int' and 'str' +>>> +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ, TypeError αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αžΎαž€αž‘αžΎαž„αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αž›αŸαžαž‘αŸ…αž›αžΎ string αŸ” αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ†αž”αžΌαž„αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž”αž˜αŸ’αž›αŸ‚αž„ string αž‘αŸ… int ឬ float αŸ” αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αž½αž™αž‘αŸ€αžαž‚αžΊαž€αžΆαžšαž”αž˜αŸ’αž›αŸ‚αž„αž…αŸ†αž“αž½αž“αž‘αŸ…αž‡αžΆαžαŸ’αžŸαŸ‚ (αž›αž‘αŸ’αž’αž•αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž‚αžΊ '43') αŸ” αžŸαžΌαž˜αž™αžΎαž„αžαžΆαž˜αžŠαžΆαž“αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αžŠαŸ†αž”αžΌαž„αŸ” + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> 4 + '3' +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +TypeError: operand αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžš type(s) for +: 'int' and 'str' +>>> 4 + int('3') +7 +>>> 4 + float('3') +7.0 +>>> +``` + +αž€αŸ†αž αž»αžŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž αžΎαž™αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž™αžΎαž„αžšαŸ†αž–αžΉαž„αž‘αž»αž€αŸ” + +### ImportError + +**Example 1: TypeError** + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> from math import power +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +ImportError: αž˜αž·αž“αž’αžΆαž…αž“αžΆαŸ†αž…αžΌαž›αžˆαŸ’αž˜αŸ„αŸ‡ 'power' from 'math' +>>> +``` + +αž˜αž·αž“αž˜αžΆαž“αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ power αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαž‘αŸ αžœαžΆαž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž‚αžΊ _pow_ αŸ” αžŸαžΌαž˜αž‡αž˜αŸ’αžšαžΆαž”αžαžΆ αŸ– + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> from math import power +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +ImportError: αž˜αž·αž“αž’αžΆαž…αž“αžΆαŸ†αž…αžΌαž›αžˆαŸ’αž˜αŸ„αŸ‡ 'power' from 'math' +>>> from math import pow +>>> pow(2,3) +8.0 +>>> +``` + +### ValueError + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> int('12a') +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +ValueError: αž’αž€αŸ’αžŸαžšαž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ int() with base 10: '12a' +>>> +``` + +αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžŠαžΌαžš string αž‘αŸ…αž‡αžΆαž›αŸαžαž”αžΆαž“αž‘αŸ αž–αŸ’αžšαŸ„αŸ‡αž˜αžΆαž“αž’αž€αŸ’αžŸαžš 'a' αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆ + +### ZeroDivisionError + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +សរសេរ "help", "copyright", "credits" or "license" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ” +>>> 1/0 +αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ (αž€αžΆαžšαž αŸ…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αž): + File "", line 1, in +ZeroDivisionError: αž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžŠαŸ„αž™αžŸαžΌαž“αŸ’αž™ +>>> +``` + +αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž”αŸ‚αž„αž…αŸ‚αž€αž›αŸαžαžŠαŸ„αž™αžŸαžΌαž“αŸ’αž™αž”αžΆαž“αž‘αŸαŸ” + +αž™αžΎαž„αž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘αž€αŸ†αž αž»αžŸ Python αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž–αž·αž“αž·αžαŸ’αž™αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžœαžΆ αžŸαžΌαž˜αž˜αžΎαž›αž―αž€αžŸαžΆαžš Python αž’αŸ†αž–αžΈαž”αŸ’αžšαž—αŸαž‘αž€αŸ†αž αž»αžŸ Python αŸ” +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αŸαŸ‡αž’αžΆαž“αž”αŸ’αžšαž—αŸαž‘αž€αŸ†αž αž»αžŸαž“αŸ„αŸ‡ αž’αŸ’αž“αž€αž“αžΉαž„αž’αžΆαž…αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ†αž αž»αžŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αžΆαž“αž›αžΏαž“αž αžΎαž™ αž’αŸ’αž“αž€αž€αŸαž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž’αŸ’αž“αž€ αžšαŸ€αž”αž…αŸ† αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž›αŸ’αž’αž‡αžΆαž„ αŸ” + +πŸŒ• αž’αŸ’αž“αž€αž–αž·αžαž‡αžΆαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŽαžΆαžŸαŸ‹ αž’αŸ’αž“αž€αž”αžΆαž“αž’αŸ’αžœαžΎαžœαžΆαžŠαž›αŸ‹αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αž“αŸƒαž•αŸ’αž›αžΌαžœαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ…αžšαž€αž—αžΆαž–αž’αŸ†αž’αŸαž„αŸ” αž₯αž‘αžΌαžœαž’αŸ’αžœαžΎ αž›αŸ† αž αžΆαžαŸ‹αž”αŸ’αžšαžΆαžŽ αžαŸ’αž›αŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαž½αžšαž€αŸ’αž”αžΆαž›αž“αž·αž„αžŸαžΆαž…αŸ‹αžŠαž»αŸ†αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αŸ” + +## πŸ’» Exercises: Day 15 + +1. αž”αžΎαž€ Python Interactive Shell αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αžŸαžΆαž€αž›αŸ’αž”αž„αž§αž‘αžΆαž αžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αžΉαž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αŸ” + +πŸŽ‰ αžŸαžΌαž˜αž’αž”αž’αžšαžŸαžΆαž‘αžš ! πŸŽ‰ + +[<< Day 14](../14_Day_Higher_order_functions/14_higher_order_functions.md) | [Day 16 >>](../16_Day_Python_date_time/16_python_datetime.md) diff --git a/Khmer/16_Day_Python_date_time/16_python_datetime.md b/Khmer/16_Day_Python_date_time/16_python_datetime.md new file mode 100644 index 000000000..a79c5d141 --- /dev/null +++ b/Khmer/16_Day_Python_date_time/16_python_datetime.md @@ -0,0 +1,197 @@ +
+

30 Days Of Python: Day 16 - Python Date time

+ + + + + Twitter Follow + + + Author: + Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 15](../15_Day_Python_type_errors/15_python_type_errors.md) | [Day 17 >>](../17_Day_Exception_handling/17_exception_handling.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 16](#-day-16) + - [Python *datetime*](#python-datetime) + - [Getting *datetime* Information](#getting-datetime-information) + - [Formatting Date Output Using *strftime*](#formatting-date-output-using-strftime) + - [String to Time Using *strptime*](#string-to-time-using-strptime) + - [Using *date* from *datetime*](#using-date-from-datetime) + - [Time Objects αžαŸ†αžŽαžΆαž„ αž²αŸ’αž™ αž–αŸαž› αžœαŸαž›αžΆ](#time-objects--αžαŸ†αžŽαžΆαž„-αž²αŸ’αž™-αž–αŸαž›-αžœαŸαž›αžΆ) + - [αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž…αŸ†αžŽαž»αž…αž–αžΈαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αž”αŸ’αžšαžΎ](#αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž…αŸ†αžŽαž»αž…αž–αžΈαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αž”αŸ’αžšαžΎ) + - [αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž…αŸ†αžŽαž»αž…αž–αžΈαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αž”αŸ’αžšαžΎ *timedelata*](#αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž…αŸ†αžŽαž»αž…αž–αžΈαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αž”αŸ’αžšαžΎ-timedelata) + +# πŸ“˜ Day 16 + +## Python *datetime* + +Python αž˜αžΆαž“_datetime_ αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžαŸ’αž„αŸƒ αž“αž·αž„αž˜αŸ‰αŸ„αž„αŸ” + +```py +import datetime +print(dir(datetime)) +['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo'] +``` + +αž‡αžΆαž˜αž½αž™ dir ឬ help αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžœαžΆαž’αžΆαž…αžŠαžΉαž„αžαžΆαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αž˜αž½αž™αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž› datetime αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αž•αŸ’αžαŸ„αžαž›αžΎ *date*, *datetime*, *time* αž“αž·αž„ *timedelta* + +### Getting *datetime* Information + +```py +from datetime import datetime +now = datetime.now() +print(now) # 2021-07-08 07:34:46.549883 +day = now.day # 8 +month = now.month # 7 +year = now.year # 2021 +hour = now.hour # 7 +minute = now.minute # 38 +second = now.second +timestamp = now.timestamp() +print(day, month, year, hour, minute) +print('timestamp', timestamp) +print(f'{day}/{month}/{year}, {hour}:{minute}') # 8/7/2021, 7:38 +``` + +Timestamp ឬ Unix timestamp αž‚αžΊαž‡αžΆαž…αŸ†αž“αž½αž“αžœαž·αž“αžΆαž‘αžΈαžŠαŸ‚αž›αž”αžΆαž“αž αž½αžŸαž–αžΈαžαŸ’αž„αŸƒαž‘αžΈ 1 αžαŸ‚αž˜αž€αžšαžΆαž†αŸ’αž“αžΆαŸ† 1970 UTC αŸ” + +### Formatting Date Output Using *strftime* + +```py +from datetime import datetime +new_year = datetime(2020, 1, 1) +print(new_year) # 2020-01-01 00:00:00 +day = new_year.day +month = new_year.month +year = new_year.year +hour = new_year.hour +minute = new_year.minute +second = new_year.second +print(day, month, year, hour, minute) #1 1 2020 0 0 +print(f'{day}/{month}/{year}, {hour}:{minute}') # 1/1/2020, 0:0 + +``` + +αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αž–αŸαž›αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš *strftime* αž“αž·αž„αž―αž€αžŸαžΆαžšαž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž‘αžΈαž“αŸαŸ‡ () αŸ” + +```py +from datetime import datetime +# current date and time +now = datetime.now() +t = now.strftime("%H:%M:%S") +print("time:", t) +time_one = now.strftime("%m/%d/%Y, %H:%M:%S") +# mm/dd/YY H:M:S format +print("time one:", time_one) +time_two = now.strftime("%d/%m/%Y, %H:%M:%S") +# dd/mm/YY H:M:S format +print("time two:", time_two) +``` + +```sh +time: 01:05:01 +time one: 12/05/2019, 01:05:01 +time two: 05/12/2019, 01:05:01 +``` + +αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αž–αŸαž›αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš *strftime* αž“αž·αž„αž―αž€αžŸαžΆαžšαž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž‘αžΈαž“αŸαŸ‡ () αŸ” +![strftime](../images/strftime.png) + +### String to Time Using *strptime* + +Here is a [documentation](https://www.programiz.com/python-programming/datetime/strptimet) hat helps to understand the format. + +```py +from datetime import datetime +date_string = "5 December, 2019" +print("date_string =", date_string) +date_object = datetime.strptime(date_string, "%d %B, %Y") +print("date_object =", date_object) +``` + +```sh +date_string = 5 December, 2019 +date_object = 2019-12-05 00:00:00 +``` + +### Using *date* from *datetime* + +```py +from datetime import date +d = date(2020, 1, 1) +print(d) +print('Current date:', d.today()) # 2019-12-05 +# date object of today's date +today = date.today() +print("Current year:", today.year) # 2019 +print("Current month:", today.month) # 12 +print("Current day:", today.day) # 5 +``` + +### Time Objects αžαŸ†αžŽαžΆαž„ αž²αŸ’αž™ αž–αŸαž› αžœαŸαž›αžΆ + +```py +from datetime import time +# time(hour = 0, minute = 0, second = 0) +a = time() +print("a =", a) +# time(hour, minute and second) +b = time(10, 30, 50) +print("b =", b) +# time(hour, minute and second) +c = time(hour=10, minute=30, second=50) +print("c =", c) +# time(hour, minute, second, microsecond) +d = time(10, 30, 50, 200555) +print("d =", d) +``` + +output +a = 00:00:00 +b = 10:30:50 +c = 10:30:50 +d = 10:30:50.200555 + +### αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž…αŸ†αžŽαž»αž…αž–αžΈαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αž”αŸ’αžšαžΎ + +```py +today = date(year=2019, month=12, day=5) +new_year = date(year=2020, month=1, day=1) +time_left_for_newyear = new_year - today +# Time left for new year: 27 days, 0:00:00 +print('Time left for new year: ', time_left_for_newyear) + +t1 = datetime(year = 2019, month = 12, day = 5, hour = 0, minute = 59, second = 0) +t2 = datetime(year = 2020, month = 1, day = 1, hour = 0, minute = 0, second = 0) +diff = t2 - t1 +print('Time left for new year:', diff) # Time left for new year: 26 days, 23: 01: 00 +``` + +### αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž…αŸ†αžŽαž»αž…αž–αžΈαžšαž€αŸ’αž“αž»αž„αž–αŸαž›αž”αŸ’αžšαžΎ *timedelata* + +```py +from datetime import timedelta +t1 = timedelta(weeks=12, days=10, hours=4, seconds=20) +t2 = timedelta(days=7, hours=5, minutes=3, seconds=30) +t3 = t1 - t2 +print("t3 =", t3) +``` + +```sh + date_string = 5 December, 2019 + date_object = 2019-12-05 00:00:00 + t3 = 86 days, 22:56:50 +``` + + + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 15](../15_Day_Python_type_errors/15_python_type_errors.md) | [Day 17 >>](../17_Day_Exception_handling/17_exception_handling.md) diff --git a/Khmer/17_Day_Exception_handling/17_exception_handling.md b/Khmer/17_Day_Exception_handling/17_exception_handling.md new file mode 100644 index 000000000..cc7b9b296 --- /dev/null +++ b/Khmer/17_Day_Exception_handling/17_exception_handling.md @@ -0,0 +1,297 @@ +
+

30 Days Of Python: Day 17 - Exception Handling

+ + + + + Twitter Follow + + + Author: + Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+
+ +[<< Day 16](../16_Day_Python_date_time/16_python_datetime.md) | [Day 18 >>](../18_Day_Regular_expressions/18_regular_expressions.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) +- [πŸ“˜ Day 17](#-day-17) + - [Exception Handling](#exception-handling) + - [Packing and Unpacking Arguments in Python](#packing-and-unpacking-arguments-in-python) + - [Unpacking](#unpacking) + - [Unpacking Lists](#unpacking-lists) + - [Unpacking Dictionaries](#unpacking-dictionaries) + - [Packing](#packing) + - [Packing Lists](#packing-lists) + - [Packing Dictionaries](#packing-dictionaries) + - [Spreading in Python](#spreading-in-python) + - [Enumerate](#enumerate) + - [Zip](#zip) + +# πŸ“˜ Day 17 + +## Exception Handling + +Python αž”αŸ’αžšαžΎ _try_ αž“αž·αž„ _except_ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ†αž αž»αžŸαžŠαŸ„αž™αž˜αžΆαž“αžŸαž»αž—αžΆαž–αŸ” αž€αžΆαžšαž…αžΆαž€αž…αŸαž‰αž–αžΈαž€αŸ†αž αž»αžŸ (errors) αžŠαŸ„αž™αž”αŸ’αžšαžŽαž·αž αž‚αžΊαž‡αžΆ programming αžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜ - programs αžšαž€αžƒαžΎαž‰αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž€αŸ†αž αž»αžŸαž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžš αž αžΎαž™ "αž…αŸαž‰αžŠαŸ„αž™αžŸαž»αž—αžΆαž–", αžαžΆαž˜αžšαž”αŸ€αž”αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αŸ” αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ program prints αžŸαžΆαžšαž€αŸ†αž αž»αžŸαžšαŸ€αž”αžšαžΆαž”αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹ terminal ឬ log αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž€αžΆαžšαž…αŸαž‰αžŠαŸ„αž™αžšαž›αžΌαž“ αž’αŸ’αžœαžΎαž²αŸ’αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž€αžΆαž“αŸ‹αžαŸ‚αžšαžΉαž„αž˜αžΆαŸ†αŸ” +αž˜αžΌαž›αž αŸαžαž»αž“αŸƒαž€αžΆαžšαž›αžΎαž€αž›αŸ‚αž„αž“αŸαŸ‡αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž‚αžΊαž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ… program αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž›αžΎαž€αž›αŸ‚αž„αž’αžΆαž…αž‡αžΆαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ, αžˆαŸ’αž˜αŸ„αŸ‡αž―αž€αžŸαžΆαžšαž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ, αž˜αž·αž“αž’αžΆαž…αžšαž€αž―αž€αžŸαžΆαžš, αž§αž”αž€αžšαžŽαŸ IO αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αŸ” αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αŸ†αž αž»αžŸαžŠαŸ„αž™αžŸαž»αž—αžΆαž–αž“αžΉαž„αž€αžΆαžšαž–αžΆαžš program αžšαž”αžŸαŸ‹αž™αžΎαž„αž–αžΈαž€αžΆαžšαž‚αžΆαŸ†αž„αŸ” +αž™αžΎαž„αž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘ Python _error_ αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž˜αž»αž“αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž”αŸ’αžšαžΎ _try_ αž“αž·αž„ _except_ αž“αŸ…αž€αŸ’αž“αž»αž„ program αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ„αŸ‡ αžœαžΆαž“αžΉαž„αž˜αž·αž“αž›αžΎαž€αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„ blocks αž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αž‘αŸαŸ” + +![Try and Except](../images/try_except.png) + +```py +try: + code in this block if things go well +except: + code in this block run if things go wrong +``` + +**Example:** + +```py +try: + print(10 + '5') +except: + print('Something went wrong') +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ operand αž‘αžΈαž–αžΈαžšαž‚αžΊ stringαŸ” αž™αžΎαž„αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžœαžΆαž‘αŸ…αž‡αžΆ float ឬ int αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αžœαžΆαž‡αžΆαž˜αž½αž™αž›αŸαžαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž’αŸ’αžœαžΈαž‘αŸ block αž‘αžΈαŸ’ _except_, αž“αžΉαž„αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαŸαžΈαž€αžΆαžšαŸ” + +**Example:** + +```py +try: + name = input('Enter your name:') + year_born = input('Year you were born:') + age = 2019 - year_born + print(f'You are {name}. And your age is {age}.') +except: + print('Something went wrong') +``` + +```sh +Something went wrong +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎαž“αŸαŸ‡ exception block αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž αžΎαž™αž™αžΎαž„αž˜αž·αž“αžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ†αž–αžΈαž”αž‰αŸ’αž αžΆαž‘αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžœαž·αž—αžΆαž‚αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαž”αŸ’αžšαž—αŸαž‘ Error αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ except αŸ” + +αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡ αžœαžΆαž“αžΉαž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αŸ†αž αž»αžŸαž“αž·αž„αž€αŸαž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž’αŸ†αž–αžΈαž”αŸ’αžšαž—αŸαž‘αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž›αžΎαž€αž‘αžΎαž„αŸ” + +```py +try: + name = input('Enter your name:') + year_born = input('Year you were born:') + age = 2019 - year_born + print(f'You are {name}. And your age is {age}.') +except TypeError: + print('Type error occured') +except ValueError: + print('Value error occured') +except ZeroDivisionError: + print('zero division error occured') +``` + +```sh +Enter your name:Asabeneh +Year you born:1920 +Type error occured +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαžαžΆαž„αž›αžΎ output αž“αžΉαž„αž˜αžΆαž“ _TypeError_. +αž₯αž‘αžΌαžœαž“αŸαŸ‡, αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜ block αž”αž“αŸ’αžαŸ‚αž˜: + +```py +try: + name = input('Enter your name:') + year_born = input('Year you born:') + age = 2019 - int(year_born) + print('You are {name}. And your age is {age}.') +except TypeError: + print('Type error occur') +except ValueError: + print('Value error occur') +except ZeroDivisionError: + print('zero division error occur') +else: + print('I usually run with the try block') +finally: + print('I alway run.') +``` + +```sh +Enter your name:Asabeneh +Year you born:1920 +You are Asabeneh. And your age is 99. +I usually run with the try block +I alway run. +``` + +αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™ code αžαžΆαž„αž›αžΎαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜: +```py +try: + name = input('Enter your name:') + year_born = input('Year you born:') + age = 2019 - int(year_born) + print('You are {name}. And your age is {age}.') +except Exception as e: + print(e) + +``` + +## Packing and Unpacking Arguments in Python + +αž™αžΎαž„αž”αŸ’αžšαžΎ operator αž–αžΈαžš: + +- \* for tuples +- \*\* for dictionaries + +αžŸαžΌαž˜αž™αž€αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αŸ” αžœαžΆαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž€αžΆαžš arguments αž‚αŸ’αž“αžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž˜αžΆαž“ list. αž™αžΎαž„αž’αžΆαž…αž”αžΎαž€ list αž“αž·αž„αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌ arguments. + +### Unpacking + +#### Unpacking Lists + +```py +def sum_of_five_nums(a, b, c, d, e): + return a + b + c + d + e + +lst = [1, 2, 3, 4, 5] +print(sum_of_five_nums(lst)) # TypeError: sum_of_five_nums() missing 4 required positional arguments: 'b', 'c', 'd', and 'e' +``` + +αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš code αž“αŸαŸ‡αžœαžΆαž“αžΉαž„αž”αž„αŸ’αž€αžΎαžαž“αžΌαžœαž€αŸ†αž αž»αžŸαž˜αž½αž™ αž–αŸ’αžšαŸ„αŸ‡αžαžΆαž›αž€αŸ’αžαžŽαŸˆαž“αŸαŸ‡αž™αž€αž›αŸαž (αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆ list) αž‡αžΆαž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ” αžŸαžΌαž˜αž²αŸ’αž™αž™αžΎαž„αž”αžΎαž€ / αž”αŸ†αž•αŸ’αž›αžΆαž‰ list αž“αŸαŸ‡αŸ” + +```py +def sum_of_five_nums(a, b, c, d, e): + return a + b + c + d + e + +lst = [1, 2, 3, 4, 5] +print(sum_of_five_nums(*lst)) # 15 +``` + +αž™αžΎαž„αž€αŸαž’αžΆαž…αž”αŸ’αžšαžΎ unpacking αž“αŸ…αž€αŸ’αž“αž»αž„ range built-in function αžŠαŸ‚αž›αžšαŸ†αž–αžΉαž„αž‘αž»αž€αž“αžΌαžœαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž“αž·αž„αž€αžΆαžšαž”αž‰αŸ’αž…αž”αŸ‹αŸ” + +```py +numbers = range(2, 7) # normal call with separate arguments +print(list(numbers)) # [2, 3, 4, 5, 6] +args = [2, 7] +numbers = range(*args) # call with arguments unpacked from a list +print(numbers) # [2, 3, 4, 5,6] + +``` + +list ឬ tuple αž€αŸαž’αžΆαž…αž”αŸ†αž”αŸ‚αž€αž”αžΆαž“αžŠαžΌαž…αž“αŸαŸ‡αžŠαŸ‚αžš: + +```py +countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland'] +fin, sw, nor, *rest = countries +print(fin, sw, nor, rest) # Finland Sweden Norway ['Denmark', 'Iceland'] +numbers = [1, 2, 3, 4, 5, 6, 7] +one, *middle, last = numbers +print(one, middle, last) # 1 [2, 3, 4, 5, 6] 7 +``` + +#### Unpacking Dictionaries + +```py +def unpacking_person_info(name, country, city, age): + return f'{name} lives in {country}, {city}. He is {age} year old.' +dct = {'name':'Asabeneh', 'country':'Finland', 'city':'Helsinki', 'age':250} +print(unpacking_person_info(**dct)) # Asabeneh lives in Finland, Helsinki. He is 250 years old. +``` + +### Packing + +αž‡αž½αž“αž€αžΆαž›αž™αžΎαž„αž˜αž·αž“αžŠαŸ‚αž›αžŠαžΉαž„αžαžΆ αžαžΎαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžš arguments αž…αŸ†αž“αž½αž“αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“ αž‘αŸ…αž€αžΆαž“αŸ‹αž›αž€αŸ’αžαžαžŽαŸ’αžŒ Python αž“αŸ„αŸ‡αž‘αŸαŸ” αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžœαž·αž’αžΈ packaging αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžšαž”αžŸαŸ‹αž™αžΎαž„αž™αž€αž›αŸαžαž˜αž·αž“αž€αŸ†αžŽαžαŸ‹ αž¬αž›αŸαž arbitrary αž“αŸƒ arguments. + +### Packing Lists + +```py +def sum_all(*args): + s = 0 + for i in args: + s += i + return s +print(sum_all(1, 2, 3)) # 6 +print(sum_all(1, 2, 3, 4, 5, 6, 7)) # 28 +``` + +#### Packing Dictionaries + +```py +def packing_person_info(**kwargs): + # check the type of kwargs and it is a dict type + # print(type(kwargs)) + # Printing dictionary items + for key in kwargs: + print("{key} = {kwargs[key]}") + return kwargs + +print(packing_person_info(name="Asabeneh", + country="Finland", city="Helsinki", age=250)) +``` + +```sh +name = Asabeneh +country = Finland +city = Helsinki +age = 250 +{'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250} +``` + +## Spreading in Python + +αžŠαžΌαž… JavaScript αžŠαŸ‚αžš αž€αžΆαžšαž”αž˜αŸ’αž›αŸ‚αž„αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ Python αžŸαžΌαž˜αž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜: + +```py +lst_one = [1, 2, 3] +lst_two = [4, 5, 6, 7] +lst = [0, *list_one, *list_two] +print(lst) # [0, 1, 2, 3, 4, 5, 6, 7] +country_lst_one = ['Finland', 'Sweden', 'Norway'] +country_lst_two = ['Denmark', 'Iceland'] +nordic_countries = [*country_lst_one, *country_lst_two] +print(nordic_countries) # ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland'] +``` + +## Enumerate + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎ index αž“αŸƒ list αž˜αž½αž™αž™αžΎαž„αž”αŸ’αžšαžΎ *enumerate* built-in function αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“ index αž“αŸƒαžœαžαŸ’αžαž»αž“αžΈαž˜αž½αž™αŸ— + +```py +for index, item in enumerate([20, 30, 40]): + print(index, item) +``` + +```py +for index, i in enumerate(countries): + print('hi') + if i == 'Finland': + print('The country {i} has been found at index {index}') +``` + +```sh +The country Finland has been found at index 1. +``` + +## Zip + +αž‡αž½αž“αž€αžΆαž›αž™αžΎαž„αž…αž„αŸ‹αž—αŸ’αž‡αžΆαž”αŸ‹ list αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„ loop list αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ„αŸ‡αŸ” αžŸαžΌαž˜αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜: + +```py +fruits = ['banana', 'orange', 'mango', 'lemon', 'lime'] +vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot'] +fruits_and_veges = [] +for f, v in zip(fruits, vegetables): + fruits_and_veges.append({'fruit':f, 'veg':v}) + +print(fruits_and_veges) +``` + +```sh +[{'fruit': 'banana', 'veg': 'Tomato'}, {'fruit': 'orange', 'veg': 'Potato'}, {'fruit': 'mango', 'veg': 'Cabbage'}, {'fruit': 'lemon', 'veg': 'Onion'}, {'fruit': 'lime', 'veg': 'Carrot'}] +``` + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 16](../16_Day_Python_date_time/16_python_datetime.md) | [Day 18 >>](../18_Day_Regular_expressions/18_regular_expressions.md) \ No newline at end of file diff --git a/Khmer/18_Day_Regular_expressions/18_regular_expressions.md b/Khmer/18_Day_Regular_expressions/18_regular_expressions.md new file mode 100644 index 000000000..3885dc335 --- /dev/null +++ b/Khmer/18_Day_Regular_expressions/18_regular_expressions.md @@ -0,0 +1,385 @@ +
+

30 Days Of Python: Day 18 - Regular Expressions

+ + + + + Twitter Follow + + + Author: + Asabeneh Yetayeh
+ First Edition: Nov 22 - Dec 22, 2019 +
+
+ + +[<< Day 17](../17_Day_Exception_handling/17_exception_handling.md) | [Day 19>>](../19_Day_File_handling/19_file_handling.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 18](#-day-18) + - [Regular Expressions](#regular-expressions) + - [The *re* Module](#the-re-module) + - [Methods in *re* Module](#methods-in-re-module) + - [Match](#match) + - [Search](#search) + - [Searching for All Matches Using *findall*](#searching-for-all-matches-using-findall) + - [Replacing a Substring](#replacing-a-substring) + - [Splitting Text Using RegEx Split](#splitting-text-using-regex-split) + - [Writing RegEx Patterns](#writing-regex-patterns) + - [Square Bracket](#square-bracket) + - [Escape character(\\) in RegEx](#escape-character-in-regex) + - [One or more times(+)](#one-or-more-times) + - [Period(.)](#period) + - [Zero or more times(\*)](#zero-or-more-times) + - [Zero or one time(?)](#zero-or-one-time) + - [Quantifier in RegEx](#quantifier-in-regex) + - [Cart ^](#cart-) + +# πŸ“˜ Day 18 + +## Regular Expressions + +Regular expression ឬ RegEx αž‡αžΆαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαž–αž·αžŸαŸαžŸαžŠαŸ‚αž›αž‡αž½αž™αžšαž€αž‚αŸ†αžšαžΌαž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” RegEx αž’αžΆαž…αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαž˜αžΆαž“αž‚αŸ†αžšαžΌαžŽαžΆαž˜αž½αž™αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αžŸαŸαž„αŸ—αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎ RegEx αž€αŸ’αž“αž»αž„ Python αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αžαŸ’αžšαžΌαžœαž“αžΆαŸ†αž…αžΌαž› Module RegEx αžŠαŸ‚αž›αž αŸ…αžαžΆ *re*αŸ” +Pattern = αž‚αŸ†αžšαžΌ + +### The *re* Module + +αž€αŸ’αžšαŸ„αž™αž–αžΈαž“αžΆαŸ†αž…αžΌαž› Module αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎαžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αž‚αŸ†αžšαžΌαŸ” + +```py +import re +``` + +### Methods in *re* Module + +αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αž‚αŸ†αžšαžΌαž™αžΎαž„αž”αŸ’αžšαžΎ set *re* αž•αŸ’αžŸαŸαž„αŸ— αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžŸαŸ’αžœαŸ‚αž„αžšαž€αž—αžΆαž–αžŠαžΌαž…αž‚αŸ’αž“αžΆαž€αŸ’αž“αž»αž„ StringαŸ” + +* *re.match()*: αžŸαŸ’αžœαŸ‚αž„αžšαž€αžαŸ‚αž“αŸ…αžŠαžΎαž˜αž“αŸƒ string αž“αž·αž„ αž”αž‰αŸ’αž‡αžΌαž“αž˜αž€αžœαžΈαž‰αžœαžαŸ’αžαž»αžŠαŸ‚αž›αžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸ’αžšαžŸαž·αž“αžšαž€αžƒαžΎαž‰ αž”αžΎαž˜αž·αž“αžšαž€αžƒαžΎαž‰αž“αŸ„αŸ‡αž”αž‰αŸ’αž‡αžΌαž“αž˜αž€αžœαž·αž‰ None αŸ” +* *re.search*: αž”αž‰αŸ’αž‡αžΌαž“αž˜αž€αžœαž·αž‰αžœαžαŸ’αžαžŠαŸ‚αž›αžŠαžΌαž…αž‚αŸ’αž“αžΆαž» αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αžΆαž“αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ string αžšαž½αž˜αž‘αžΆαŸ†αž„ string αžŠαŸ‚αž›αž˜αžΆαž“αž…αŸ’αžšαžΎαž“αž‡αž½αžšαŸ” +* *re.findall*: αž”αž‰αŸ’αž‡αžΌαž“ list αžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” +* *re.split*: αž™αž€ string, αž”αŸ†αž”αŸ‚αž€αžœαžΆαž“αŸ…αž…αŸ†αžŽαž»αž…αžŠαžΌαž…αž‚αŸ’αž“αžΆ, αžœαž·αž›αžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ… listαŸ” +* *re.sub*: αž‡αŸ†αž“αž½αžŸαž€αžΆαžšαžŠαžΌαž»αž…αž‚αŸ’αž“αžΆαž˜αž½αž™αž¬αž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„ stringαŸ” + +#### Match + +```py +# syntac +re.match(substring, string, re.I) +# substring αž‚αžΊαž‡αžΆ string αž¬αž‚αŸ†αžšαžΌ, string αž‚αžΊαž’αž€αŸ’αžŸαžšαžŠαŸ‚αž›αž™αžΎαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž‡αžΆαž‚αŸ†αžšαžΌ , re.I αž‚αžΊαž€αžšαžŽαžΈαžŠαŸ‚αž›αž™αžΎαž„αž˜αž·αž“αžαŸ’αžœαž›αŸ‹ +``` + +```py +import re + +txt = 'I love to teach python and javaScript' +# αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αžΌαžœ object αž‡αžΆαž˜αž½αž™ span αž“αž·αž„ match +match = re.match('I love to teach', txt, re.I) +print(match) # +# αž™αžΎαž„αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžαŸ†αžŽαžΆαž„αžŠαžΎαž˜ αž“αž·αž„αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒ match αž‡αžΆ tuple αžŠαŸ„αž™αž”αŸ’αžšαžΎ span +span = match.span() +print(span) # (0, 15) +# αžšαž€αž‘αžΈαžαžΆαŸ†αž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž“αž·αž„αžˆαž”αŸ‹ αž–αžΈαžαžΆαž˜ span +start, end = span +print(start, end) # 0, 15 +substring = txt[start:end] +print(substring) # αž‘αž‘αž½αž›αž”αžΆαž“ 'I love to teach' +``` + +αžŠαžΌαž…αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ αž‚αŸ†αžšαžΌαžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž‚αžΊ *I love to teach* αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž Match αž”αžΆαž“αž˜αž€αžœαž·αž‰αž“αžΌαžœ object αž”αžΎαžŸαž·αž“αž’αž€αŸ’αžŸαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž‚αŸ†αžšαžΌαž½αŸ” + +```py +import re + +txt = 'I love to teach python and javaScript' +match = re.match('I like to teach', txt, re.I) +print(match) # None +``` + +String αž˜αž·αž“αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™ *I like to teach*, αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžŠαžΌαž…αž‚αŸ’αž“αžΆ αž αžΎαž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž Match αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αžαžΆ None αŸ” + +#### Search + +```py +# syntax +re.match(substring, string, re.I) +# substring αž‚αžΊαž‡αžΆ string αž¬αž‚αŸ†αžšαžΌ, string αž‚αžΊαž’αž€αŸ’αžŸαžšαžŠαŸ‚αž›αž™αžΎαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž‡αžΆαž‚αŸ†αžšαžΌ , re.I αž‚αžΊαž€αžšαžŽαžΈαžŠαŸ‚αž›αž™αžΎαž„αž˜αž·αž“αžαŸ’αžœαž›αŸ‹ +``` + +```py +import re + +txt = '''Python is the most beautiful language that a human being has ever created. +I recommend python for a first programming language''' + +# αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ object αž‡αžΆαž˜αž½αž™ span αž“αž·αž„ match +match = re.search('first', txt, re.I) +print(match) # +# αž™αžΎαž„αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžαŸ†αžŽαžΆαž„αžŠαžΎαž˜ αž“αž·αž„αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒ match αž‡αžΆ tuple αžŠαŸ„αž™αž”αŸ’αžšαžΎ span +span = match.span() +print(span) # (100, 105) +# αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αžΌαžœ object αž‡αžΆαž˜αž½αž™ span αž“αž·αž„ match +start, end = span +print(start, end) # 100 105 +substring = txt[start:end] +print(substring) # αž”αžΆαž“ first +``` + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž”αžΆαž“ search αž‚αžΊαž›αŸ’αž’αž‡αžΆαž„ match αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αž‚αŸ†αžšαžΌαž“αŸ…αž‘αžΌαž‘αžΆαŸ†αž„αž’αžαŸ’αžαž”αž‘αŸ” Search αž•αŸ’αžαž›αŸ‹ object match αž‡αžΆαž˜αž½αž™αž“αžΉαž„ match αžŠαŸ†αž”αžΌαž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰ αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž‘αŸαžœαžΆαž“αžΉαž„αž•αŸ’αžŠαž›αŸ‹ _None_ αŸ” function *re* αž›αŸ’αž’αž‡αžΆαž„αž‚αžΊ *findall*αŸ” function αž“αŸαŸ‡αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ†αžšαžΌαž€αŸ’αž“αž»αž„ string αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αž·αž„αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€ match αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‡αžΆ listαŸ” + +#### Searching for All Matches Using *findall* + +*findall()* αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€ match αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‡αžΆ list + +```py +txt = '''Python is the most beautiful language that a human being has ever created. +I recommend python for a first programming language''' + +# It return a list +matches = re.findall('language', txt, re.I) +print(matches) # ['language', 'language'] +``` + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž”αžΆαž“ αž–αžΆαž€αŸ’αž™ "language" αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž–αžΈαžšαžŠαž„αž“αŸ…αž€αŸ’αž“αž»αž„ string αŸ” +αž₯αž‘αžΌαžœαž™αžΎαž„αž“αžΉαž„αžšαž€αž–αžΆαž€αŸ’αž™ Python αž“αž·αž„ python αž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„ string: + +```py +txt = '''Python is the most beautiful language that a human being has ever created. +I recommend python for a first programming language''' + +# It returns list +matches = re.findall('python', txt, re.I) +print(matches) # ['Python', 'python'] + +``` + +αžŠαŸ„αž™αžŸαžΆαžšαž™αžΎαž„αž”αŸ’αžšαžΎ *re.I* αž‘αžΆαŸ†αž„αž’αž€αŸ’αžŸαžšαžαžΌαž… αž“αž·αž„αž’αž€αŸ’αžŸαžšαž’αŸ† αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αŸ” αž”αžΎαžŸαž·αž“αž‡αžΆαž™αžΎαž„αž‚αŸ’αž˜αžΆαž“ re,I, αž“αŸ„αŸ‡αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž‚αŸ†αžšαžΌαžšαž”αžŸαŸ‹αž™αžΎαž„αžαž»αžŸαž–αžΈαž˜αž»αž“αŸ” αžŸαžΌαž˜αž™αžΎαž„αž˜αžΎαž›: + +```py +txt = '''Python is the most beautiful language that a human being has ever created. +I recommend python for a first programming language''' + +matches = re.findall('Python|python', txt) +print(matches) # ['Python', 'python'] + +# +matches = re.findall('[Pp]ython', txt) +print(matches) # ['Python', 'python'] + +``` + +#### Replacing a Substring + +```py +txt = '''Python is the most beautiful language that a human being has ever created. +I recommend python for a first programming language''' + +match_replaced = re.sub('Python|python', 'JavaScript', txt, re.I) +print(match_replaced) # JavaScript is the most beautiful language that a human being has ever created. +# OR +match_replaced = re.sub('[Pp]ython', 'JavaScript', txt, re.I) +print(match_replaced) # JavaScript is the most beautiful language that a human being has ever created. +``` + +αžŸαžΌαž˜αž™αžΎαž„αž”αž“αŸ’αžαŸ‚αž˜αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž‘αŸ€αžαŸ” String αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž–αž·αžαž‡αžΆαž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αžΆαž“αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αž™αžΎαž„αž›αž»αž”αžŸαž‰αŸ’αž‰αžΆ % αž…αŸαž‰αŸ” + +```py + +txt = '''%I a%m te%%a%%che%r% a%n%d %% I l%o%ve te%ach%ing. +T%he%re i%s n%o%th%ing as r%ewarding a%s e%duc%at%i%ng a%n%d e%m%p%ow%er%ing p%e%o%ple. +I fo%und te%a%ching m%ore i%n%t%er%%es%ting t%h%an any other %jobs. +D%o%es thi%s m%ot%iv%a%te %y%o%u to b%e a t%e%a%cher?''' + +matches = re.sub('%', '', txt) +print(matches) +``` + +```sh +I am teacher and I love teaching. +There is nothing as rewarding as educating and empowering people. +I found teaching more interesting than any other jobs. Does this motivate you to be a teacher? +``` + +## Splitting Text Using RegEx Split + +```py +txt = '''I am teacher and I love teaching. +There is nothing as rewarding as educating and empowering people. +I found teaching more interesting than any other jobs. +Does this motivate you to be a teacher?''' +print(re.split('\n', txt)) # αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€ αžŠαŸ„αž™αž”αŸ’αžšαžΎ \n - end of line symbol +``` + +```sh +['I am teacher and I love teaching.', 'There is nothing as rewarding as educating and empowering people.', 'I found teaching more interesting than any other jobs.', 'Does this motivate you to be a teacher?'] +``` + +## Writing RegEx Patterns + +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž string variable, αž™αžΎαž„αž”αŸ’αžšαžΎ single ឬ double quoteαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž RegEx variable *r''*αŸ” αž‚αŸ†αžšαžΌαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αžαžΆ Apple αž˜αžΆαž“αž’αž€αŸ’αžŸαžšαžαžΌαž…αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž˜αž·αž“αžαŸ’αžœαž›αŸ‹αž’αž€αŸ’αžŸαžšαžαžΌαž…αž¬αž’αŸ† αž™αžΎαž„αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž‚αŸ†αžšαžΌαžαŸ’αž˜αžΈ αž¬αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜ flagαŸ” + +```py +import re + +regex_pattern = r'apple' +txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. ' +matches = re.findall(regex_pattern, txt) +print(matches) # ['apple'] + +# To make case insensitive adding flag ' +matches = re.findall(regex_pattern, txt, re.I) +print(matches) # ['Apple', 'apple'] +# or we can use a set of characters method +regex_pattern = r'[Aa]pple' # this mean the first letter could be Apple or apple +matches = re.findall(regex_pattern, txt) +print(matches) # ['Apple', 'apple'] + +``` + +- []: set αž“αŸƒαž’αž€αŸ’αžŸαžš + * [a-c] αž˜αžΆαž“αž“αŸαž™, a ឬ b ឬ c + * [a-z] αž˜αžΆαž“αž“αŸαž™, αž’αž€αŸ’αžŸαžšαžŽαžΆαž˜αž½αž™αž–αžΈ a αž‘αŸ… z + * [A-Z] αž˜αžΆαž“αž“αŸαž™, αž’αž€αŸ’αžŸαžšαžŽαžΆαž˜αž½αž™αž–αžΈ A αž‘αŸ… Z + * [0-3] αž˜αžΆαž“αž“αŸαž™, 0 ឬ 1 ឬ 2 ឬ 3 + * [0-9] αž˜αžΆαž“αž“αŸαž™ αž›αŸαžαžŽαžΆαž˜αž½αž™αž–αžΈ 0 αž‘αŸ… 9 + * [A-Za-z0-9] αž’αž€αŸ’αžŸαžšαžαŸ‚αž˜αž½αž™αžαž„αŸ‹, αž“αŸαŸ‡αž‚αžΊ a αž‘αŸ… z, A αž‘αŸ… Z ឬ 0 αž‘αŸ… 9 +* \\: αž”αŸ’αžšαžΎαž‘αŸ… escape special characters + * \d αž˜αžΆαž“αž“αŸαž™: match αžŠαŸ‚αž› string αž˜αžΆαž“αž›αŸαž (αž›αŸαžαž–αžΈ 0-9) + * \D αž˜αžΆαž“αž“αŸαž™: match αžŠαŸ‚αž› string αž˜αž·αž“αž˜αžΆαž“αž›αŸαž +* . : αž’αž€αŸ’αžŸαžšαžŽαžΆαž˜αž½αž™ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚ new line character(\n) +* ^: αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™ + * r'^substring' eg r'^love', αž”αŸ’αžšαž™αŸ„αž‚αžŠαŸ‚αž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž–αžΆαž€αŸ’αž™αžαžΆ "love" + * r'[^abc] αž˜αžΆαž“αž“αŸαž™ αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆ a, αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆ b, αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆ c. +* $: αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™ + * r'substring$' eg r'love$', αž”αŸ’αžšαž™αŸ„αž‚αžŠαŸ‚αž›αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž–αžΆαž€αŸ’αž™αžαžΆ "love" +* *: αžŸαžΌαž“αŸ’αž™ ឬ αž…αŸ’αžšαžΎαž“αžŠαž„αž‘αŸ€αž + * r'[a]*' αž˜αžΆαž“αž“αŸαž™ αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸ ឬ αžœαžΆαž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αž…αŸ’αžšαžΎαž“αžŠαž„ +* +: αž˜αž½αž™ ឬ αž…αŸ’αžšαžΎαž“αžŠαž„αž‘αŸ€αž + * r'[a]+' αž˜αžΆαž“αž“αŸαž™ αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž˜αŸ’αžαž„ (ឬ αž…αŸ’αžšαžΎαž“αž‘αŸ€αž) +* ?: αžŸαžΌαž“αŸ’αž™ ឬ αž˜αž½αž™αžŠαž„ + * r'[a]?' αž˜αžΆαž“αž“αŸαž™ αžŸαžΌαž“αŸ’αž™αžŠαž„ ឬ αž˜αŸ’αžαž„ +* {3}: 3 αžαž½αž’αž€αŸ’αžŸαžš +* {3,}: αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹ 3 αžαž½αž’αž€αŸ’αžŸαžš +* {3,8}: αž–αžΈ 3 αž‘αŸ… 8 αžαž½αž’αž€αŸ’αžŸαžš +* |: αž¬αž€αŸ + * r'apple|banana' αž˜αžΆαž“αž“αŸαž™αžαžΆ apple ឬ banana +* (): αž…αžΆαž”αŸ‹αž™αž€αž“αž·αž„αžŠαžΆαž€αŸ‹αž€αŸ’αžšαž»αž˜ + +![Regular Expression cheat sheet](../images/regex.png) + +αžŸαžΌαž˜αž™αžΎαž„αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹ meta characters αžαžΆαž„αž›αžΎ + +### Square Bracket + +αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαžαž„αŸ’αž€αŸ€αž”αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αžΌαž›αž’αž€αŸ’αžŸαžšαžαžΌαž… αž“αž·αž„αž’αŸ† + +```py +regex_pattern = r'[Aa]pple' # αžαž„αŸ’αž€αŸ€αž”αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ A ឬ a +txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away.' +matches = re.findall(regex_pattern, txt) +print(matches) # ['Apple', 'apple'] +``` + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αžŸαŸ’αžœαŸ‚αž„αžšαž€ banana αž™αžΎαž„αžŸαžšαžŸαŸαžšαž‚αŸ†αžšαžΌαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜: + +```py +regex_pattern = r'[Aa]pple|[Bb]anana' # αžαž„αŸ’αž€αŸ€αž”αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ A ឬ a +txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away.' +matches = re.findall(regex_pattern, txt) +print(matches) # ['Apple', 'banana', 'apple', 'banana'] +``` + +Using the square bracket and or operator , we manage to extract Apple, apple, Banana and banana. + +### Escape character(\\) in RegEx + +```py +regex_pattern = r'\d' # d αž‚αžΊαž‡αžΆαžαž½αžšαž’αž€αŸ’αžŸαžšαž–αž·αžŸαŸαžŸ αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž›αŸαž +txt = 'This regular expression example was made on December 6, 2019 and revised on July 8, 2021' +matches = re.findall(regex_pattern, txt) +print(matches) # ['6', '2', '0', '1', '9', '8', '2', '0', '2', '1'], this is not what we want +``` + +### One or more times(+) + +```py +regex_pattern = r'\d+' # d αž‚αžΊαž‡αžΆαžαž½αžšαž’αž€αŸ’αžŸαžšαž–αž·αžŸαŸαžŸ αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž›αŸαž, + αž˜αžΆαž“αž“αŸαž™αžαžΆαž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αžŠαž„ +txt = 'This regular expression example was made on December 6, 2019 and revised on July 8, 2021' +matches = re.findall(regex_pattern, txt) +print(matches) # ['6', '2019', '8', '2021'] - αž₯αž‘αžΌαžœαž“αŸαŸ‡αžœαžΆαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„! +``` + +### Period(.) + +```py +regex_pattern = r'[a].' # αžαž„αŸ’αž€αŸ€αž”αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ a αž“αž·αž„ . αž˜αžΆαž“αž“αŸαž™αžαžΆαžαž½αž’αž€αŸ’αžŸαžšαžŽαžΆαž˜αž½αž™ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αž”αž“αŸ’αž‘αžΆαžαŸ‹αžαŸ’αž˜αžΈαŸ” +txt = '''Apple and banana are fruits''' +matches = re.findall(regex_pattern, txt) +print(matches) # ['an', 'an', 'an', 'a ', 'ar'] + +regex_pattern = r'[a].+' # . αžαž½αž’αž€αŸ’αžŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹, + αžαž½αž’αž€αŸ’αžŸαžšαžŽαžΆαž˜αž½αž™αž˜αŸ’αžαž„ αž¬αž…αŸ’αžšαžΎαž“αžŠαž„ +matches = re.findall(regex_pattern, txt) +print(matches) # ['and banana are fruits'] +``` + +### Zero or more times(\*) + +Zero or many times. αž’αžΆαž…αž“αžΉαž„αž˜αž·αž“αž€αžΎαžαž‘αžΎαž„ αž¬αžœαžΆαž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αž…αŸ’αžšαžΎαž“αžŠαž„αŸ” + +```py +regex_pattern = r'[a].*' # . any character, * any character zero or more times +txt = '''Apple and banana are fruits''' +matches = re.findall(regex_pattern, txt) +print(matches) # ['and banana are fruits'] +``` + +### Zero or one time(?) + +Zero or one time. αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž€αžΎαžαž‘αžΎαž„ αž¬αžœαžΆαž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αžαŸ‚αž˜αŸ’αžαž„αŸ” + +```py +txt = '''I am not sure if there is a convention how to write the word e-mail. +Some people write it as email others may write it as Email or E-mail.''' +regex_pattern = r'[Ee]-?mail' # ? αž˜αžΆαž“αž“αŸαž™αžαžΆαž“αŸ…αž‘αžΈαž“αŸαŸ‡ '-' αž‚αžΊαž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹ +matches = re.findall(regex_pattern, txt) +print(matches) # ['e-mail', 'email', 'Email', 'E-mail'] +``` + +### Quantifier in RegEx + +We can specify the length of the substring we are looking for in a text, using a curly bracket. Let us imagine, we are interested in a substring with a length of 4 characters: + +```py +txt = 'This regular expression example was made on December 6, 2019 and revised on July 8, 2021' +regex_pattern = r'\d{4}' # αŸ€αžŠαž„ +matches = re.findall(regex_pattern, txt) +print(matches) # ['2019', '2021'] + +txt = 'This regular expression example was made on December 6, 2019 and revised on July 8, 2021' +regex_pattern = r'\d{1, 4}' # 1 αž‘αŸ… 4 +matches = re.findall(regex_pattern, txt) +print(matches) # ['6', '2019', '8', '2021'] +``` + +### Cart ^ + +* αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™ + +```py +txt = 'This regular expression example was made on December 6, 2019 and revised on July 8, 2021' +regex_pattern = r'^This' # ^ αž˜αžΆαž“αž“αŸαž™αžαžΆ αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™ +matches = re.findall(regex_pattern, txt) +print(matches) # ['This'] +``` + +* Negation + +```py +txt = 'This regular expression example was made on December 6, 2019 and revised on July 8, 2021' +regex_pattern = r'[^A-Za-z ]+' # ^ αž€αŸ’αž“αž»αž„ set character αž˜αžΆαž“αž“αŸαž™αžαžΆ negation, αž˜αž·αž“αž˜αŸ‚αž“ A αž‘αŸ… Z, αž˜αž·αž“αž˜αŸ‚αž“ a αž‘αŸ… z, αž‚αŸ’αž˜αžΆαž“αžŠαž€αž‚αŸ’αž›αžΆ +matches = re.findall(regex_pattern, txt) +print(matches) # ['6,', '2019', '8', '2021'] +``` + +[<< Day 17](../17_Day_Exception_handling/17_exception_handling.md) | [Day 19>>](../19_Day_File_handling/19_file_handling.md) \ No newline at end of file diff --git a/Khmer/19_Day_File_handling/19_file_handling.md b/Khmer/19_Day_File_handling/19_file_handling.md new file mode 100644 index 000000000..f41f6caa9 --- /dev/null +++ b/Khmer/19_Day_File_handling/19_file_handling.md @@ -0,0 +1,405 @@ +
+

30 Days Of Python: Day 19 - File Handling

+ + + + + Twitter Follow + +Author: +Asabeneh Yetayeh
+Second Edition: July, 2021 +
+
+ +[<< Day 18](../18_Day_Regular_expressions/18_regular_expressions.md) | [Day 20 >>](../20_Day_Python_package_manager/20_python_package_manager.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 19](#-day-19) + - [File Handling](#file-handling) + - [Opening Files for Reading](#opening-files-for-reading) + - [Opening Files for Writing and Updating](#opening-files-for-writing-and-updating) + - [Deleting Files](#deleting-files) + - [File Types](#file-types) + - [File with txt Extension](#file-with-txt-extension) + - [File with json Extension](#file-with-json-extension) + - [Changing JSON to Dictionary](#changing-json-to-dictionary) + - [Changing Dictionary to JSON](#changing-dictionary-to-json) + - [Saving as JSON File](#saving-as-json-file) + - [File with csv Extension](#file-with-csv-extension) + - [File with xlsx Extension](#file-with-xlsx-extension) + - [File with xml Extension](#file-with-xml-extension) + - [πŸ’» Exercises: Day 19](#-exercises-day-19) + - [Exercises: Level 1](#exercises-level-1) + - [Exercises: Level 2](#exercises-level-2) + - [Exercises: Level 3](#exercises-level-3) + +# πŸ“˜ Day 19 + +## File Handling + +file = αž―αž€αžŸαžΆαžš + +αžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αž–αŸαž›αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αžƒαžΎαž‰αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ Python αž•αŸ’αžŸαŸαž„αŸ—αž…αŸ’αžšαžΎαž“αŸ” αž™αžΎαž„αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžšαž€αŸ’αžŸαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™ file αž•αŸ’αžŸαŸαž„αŸ—αŸ” αž€αŸ’αžšαŸ…αž–αžΈαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ file, αž™αžΎαž„αž€αŸαž“αžΉαž„αžƒαžΎαž‰αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™ file αž•αŸ’αžŸαŸαž„αŸ— (.txt, .json, .xml, .csv, .tsv, .excel) αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αŸ” αžŠαŸ†αž”αžΌαž„αž™αžΎαž„αžαŸ’αžšαžΌαžœαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ file αžŠαŸ‚αž›αž‚αŸαž”αŸ’αžšαžΎαž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž‚αŸ αžŠαŸ‚αž›αž˜αžΆαž“αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž‡αžΆ (.txt). + +αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ file αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž“αŸƒ programming αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž, αž’αžΆαž“, αž€αŸ‚, αž“αž·αž„αž›αž»αž” fileαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ Python αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž™αžΎαž„αž”αŸ’αžšαžΎ _open()_ built-in function αŸ” + +```py +# Syntax +open('filename', mode) # mode(r, a, w, x, t, b) αž’αžΆαž…αž‡αžΆ αž’αžΆαž“, សរសេរ, αž“αž·αž„ αž€αŸ‚ +``` + +- "r" - Read αž’αžΆαž“ - αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ” αž”αžΎαž€ file αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“, αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€ error αž”αŸ’αžšαžŸαž·αž“αž”αžΎ file αž˜αž·αž“αž˜αžΆαž“αŸ” +- "a" - Append αž”αž“αŸ’αžαŸ‚αž˜ - αž”αžΎαž€ file αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜, αž”αž„αŸ’αž€αžΎαž file αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αž·αž“αž˜αžΆαž“αŸ” +- "w" - Write សរសេរ - αž”αžΎαž€ file αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžšαžŸαŸαžš, αž”αž„αŸ’αž€αžΎαž file αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αž·αž“αž˜αžΆαž“αŸ” +- "x" - create αž”αž„αŸ’αž€αžΎαž - αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš αžœαž·αž›αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€ error αž”αŸ’αžšαžŸαž·αž“αž”αžΎ file αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž αžΎαž™αŸ” +- "t" - Text αž’αžαŸ’αžαž”αž‘ - αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ” αžšαž”αŸ€αž”αž’αžαŸ’αžαž”αž‘αŸ” +- "b" - Binary αž‚αŸ„αž›αž–αžΈαžš - αžšαž”αŸ€αž”αž‚αŸ„αž›αž–αžΈαžš (e.g. images) + +### Opening Files for Reading + +αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž“αŸƒ _open_ αž‚αžΊαž€αžΆαžšαž’αžΆαž“, αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ 'r' ឬ 'rt'. αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αž·αž„αž”αž“αŸ’αžŸαŸ† file αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ reading_file_example.txt αž“αŸ…αž€αŸ’αž“αž»αž„ files directoryαŸ” αžŸαžΌαž˜αž˜αžΎαž›αžαžΆ αžαžΎαž’αŸ’αžœαžΎαž™αŸ‰αžΆαž„αžŠαžΌαž…αž˜αŸ’αžαŸαž…αŸ– + +```py +f = open('./files/reading_file_example.txt') +print(f) # <_io.TextIOWrapper name='./files/reading_file_example.txt' mode='r' encoding='UTF-8'> +``` + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αžΎαž€ file αž αžΎαž™αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžαŸ’αž›αŸ‡αž’αŸ†αž–αžΈαžœαžΆαŸ” File αžŠαŸ‚αž›αž”αžΆαž“αž”αžΎαž€αž˜αžΆαž“αžœαž·αž’αžΈαž’αžΆαž“αž•αŸ’αžŸαŸαž„αŸ—: _read()_, _readline_, _readlines_. File αžŠαŸ‚αž›αž”αžΎαž€αžαŸ’αžšαžΌαžœαž”αž·αž‘αžŠαŸ„αž™ _close()_ αŸ” + +- _read()_: αž’αžΆαž“αž’αžαŸ’αžαž”αž‘αž‘αžΆαŸ†αž„αž˜αžΌαž›αž‡αžΆ stringαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž€αŸ†αžŽαžαŸ‹αž…αŸ†αž“αž½αž“αž’αž€αŸ’αžŸαžšαžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž’αžΆαž“ αž™αžΎαž„αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžœαžΆαžŠαŸ„αž™αž•αŸ’αž‘αŸαžšαžαž˜αŸ’αž›αŸƒ int αž‘αŸ…αž€αžΆαž“αŸ‹αžœαž·αž’αžΈ _read(number)_ αŸ” + +```py +f = open('./files/reading_file_example.txt') +txt = f.read() +print(type(txt)) +print(txt) +f.close() +``` + +```sh +# output + +This is an example to show how to open a file and read. +This is the second line of the text. +``` + +αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ† print αž’αž€αŸ’αžŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž’αž€αŸ’αžŸαžš 10 αžŠαŸ†αž”αžΌαž„αž“αŸƒ file αž’αž€αŸ’αžŸαžšαŸ” + +```py +f = open('./files/reading_file_example.txt') +txt = f.read(10) +print(type(txt)) +print(txt) +f.close() +``` + +```sh +# output + +This is an +``` + +- _readline()_: αž’αžΆαž“αžαŸ‚αžαŸ’αžŸαŸ‚αž‘αžΈαž˜αž½αž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ + +```py +f = open('./files/reading_file_example.txt') +line = f.readline() +print(type(line)) +print(line) +f.close() +``` + +```sh +# output + +This is an example to show how to open a file and read. +``` + +- _readlines()_: αž’αžΆαž“αž’αž€αŸ’αžŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαžΆαž˜αžαŸ’αžŸαŸ‚ αž“αž·αž„αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ list αž“αŸƒαžαŸ’αžŸαŸ‚αž’αžαŸ’αžαž”αž‘αŸ” + +```py +f = open('./files/reading_file_example.txt') +lines = f.readlines() +print(type(lines)) +print(lines) +f.close() +``` + +```sh +# output + +['This is an example to show how to open a file and read.\n', 'This is the second line of the text.'] +``` + +αžœαž·αž’αžΈαž˜αž½αž™αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“ list αž“αŸƒαžαŸ’αžŸαŸ‚αž’αžαŸ’αžαž” αž‚αžΊαž”αŸ’αžšαžΎ _splitlines()_: + +```py +f = open('./files/reading_file_example.txt') +lines = f.read().splitlines() +print(type(lines)) +print(lines) +f.close() +``` + +```sh +# output + +['This is an example to show how to open a file and read.', 'This is the second line of the text.'] +``` + +αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž™αžΎαž„αž”αžΎαž€ file αž˜αž½αž™ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž·αž‘αžœαžΆαŸ” αž™αžΎαž„αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž—αŸ’αž›αŸαž…αž”αž·αž‘αžœαžΆαŸ” αž˜αžΆαž“αžœαž·αž’αžΈαžαŸ’αž˜αžΈαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αžΎαž€ file αžŠαŸ„αž™αž”αŸ’αžšαžΎ _with_ - αž”αž·αž‘αž―αž€αžŸαžΆαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ” αžŸαžΌαž˜αž™αžΎαž„αžŸαžšαžŸαŸαžšαž‘αžΎαž„αžœαž·αž‰αž§αž‘αžΆαž αžšαžŽαŸαž˜αž»αž“αž‡αžΆαž˜αž½αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš _with_: + +```py +with open('./files/reading_file_example.txt') as f: + lines = f.read().splitlines() + print(type(lines)) + print(lines) +``` + +```sh +# output + +['This is an example to show how to open a file and read.', 'This is the second line of the text.'] +``` + +### Opening Files for Writing and Updating + +αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžšαžŸαŸαžšαž‘αŸ…αž›αžΎ file αžŠαŸ‚αž›αž˜αžΆαž“αžšαž½αž…αž˜αž€αž αžΎαž™ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜ mode αž‡αžΆ parameter αž‘αŸ…αž›αžΎ function _open()_: + +- "a" - append αž”αž“αŸ’αžαŸ‚αž˜ - αž“αžΉαž„αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž…αž»αž„αž“αŸƒ file αž”αŸ’αžšαžŸαž·αž“αž”αžΎ file αž˜αž·αž“αž˜αžΆαž“ αžœαžΆαž”αž„αŸ’αž€αžΎαž file αžαŸ’αž˜αžΈαŸ” +- "w" - write សរសេរ - αž“αžΉαž„αžŸαžšαžŸαŸαžšαž‡αžΆαž“αŸ‹αž›αžΎαžšαžΆαž›αŸ‹αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ αž”αžΎαžŸαž·αž“αž‡αžΆαžœαžΆαž˜αž·αž“αž˜αžΆαž“ file αžœαžΆαž”αž„αŸ’αž€αžΎαž file αžαŸ’αž˜αžΈαŸ” + +αž™αžΎαž„αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜αž’αžαŸ’αžαž”αž‘αž‘αŸ…αž“αžΉαž„ file αžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎ: + +```py +with open('./files/reading_file_example.txt','a') as f: + f.write('This text has to be appended at the end') +``` + +αžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž”αž„αŸ’αž€αžΎαž file αžαŸ’αž˜αžΈ αž”αŸ’αžšαžŸαž·αž“αž”αžΎ file αž˜αž·αž“αž˜αžΆαž“: + +```py +with open('./files/writing_file_example.txt','w') as f: + f.write('This text will be written in a newly created file') +``` + +### Deleting Files + +αž™αžΎαž„αž”αžΆαž“αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž˜αž»αž“, αžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž›αž»αž” directory αž˜αž½αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎ _os_ module αŸ” αž˜αŸ’αžαž„αž‘αŸ€αž αž₯αž‘αžΌαžœαž“αŸαŸ‡, αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž›αž»αž” file αž˜αž½αž™αž™αžΎαž„αž”αŸ’αžšαžΎ _os_ module + +```py +import os +os.remove('./files/example.txt') + +``` + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎ file αž˜αž·αž“αž˜αžΆαž“, αž“αŸ„αŸ‡ remove method αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰ error αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž‡αžΆαž€αžΆαžšαž›αŸ’αž’αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡: + +```py +import os +if os.path.exists('./files/example.txt'): + os.remove('./files/example.txt') +else: + print('The file does not exist') +``` + +## File Types + +### File with txt Extension + +file αžŠαŸ‚αž›αž˜αžΆαž“ _txt_ extension αž‚αžΊαž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαŸ‚αž›αž‚αŸαž”αŸ’αžšαžΎαž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž‚αŸαŸ” αž“αžΆαŸ†αž™αžΎαž„αž‘αŸ…αž€αžΆαž“αŸ‹ JSON file αžœαž·αž‰αŸ” + +### File with json Extension + +JSON αž˜αžΆαž“αž“αŸαž™αžαžΆ JavaScript Object Notation. αž‡αžΆαž€αžΆαžšαž–αž·αžαžœαžΆαž‡αžΆ stringified JavaScript object ឬ Python dictionary. + +_Example:_ + +```py +# dictionary +person_dct= { + "name":"Asabeneh", + "country":"Finland", + "city":"Helsinki", + "skills":["JavaScrip", "React","Python"] +} +# JSON: A string form a dictionary +person_json = "{'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'skills': ['JavaScrip', 'React', 'Python']}" + +# αž™αžΎαž„αž”αŸ’αžšαžΎ quote ' 3 αž“αž·αž„αž’αŸ’αžœαžΎαžœαžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αžαŸ’αžŸαŸ‚ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž’αŸ„αž™αžœαžΆαžŸαŸ’αžšαž½αž›αž’αžΆαž“ +person_json = '''{ + "name":"Asabeneh", + "country":"Finland", + "city":"Helsinki", + "skills":["JavaScrip", "React","Python"] +}''' +``` + +### Changing JSON to Dictionary + +αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš JSON αž‘αŸ…αž‡αžΆ dictionary, αž‡αžΆαž˜αž»αž“ import json module αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš _loads_ αŸ” + +```py +import json +# JSON +person_json = '''{ + "name": "Asabeneh", + "country": "Finland", + "city": "Helsinki", + "skills": ["JavaScrip", "React", "Python"] +}''' +# αžŸαžΌαž˜αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš JSON αž‘αŸ… dictionary +person_dct = json.loads(person_json) +print(type(person_dct)) +print(person_dct) +print(person_dct['name']) +``` + +```sh +# output + +{'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'skills': ['JavaScrip', 'React', 'Python']} +Asabeneh +``` + +### Changing Dictionary to JSON + +αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš dictionary αž‘αŸ…αž‡αžΆ JSON αž™αžΎαž„αž”αŸ’αžšαžΎ _dumps_ method αž˜αž€αž–αžΈ json module. + +```py +import json +# python dictionary +person = { + "name": "Asabeneh", + "country": "Finland", + "city": "Helsinki", + "skills": ["JavaScrip", "React", "Python"] +} +# αžŸαžΌαž˜αž”αž˜αŸ’αž›αŸ‚αž„αžœαžΆαž‘αŸ…αž‡αžΆ json +person_json = json.dumps(person, indent=4) +print(type(person_json)) +print(person_json) +``` + +```sh + +{ + "name": "Asabeneh", + "country": "Finland", + "city": "Helsinki", + "skills": [ + "JavaScrip", + "React", + "Python" + ] +} +``` + +### Saving as JSON File + +αž™αžΎαž„αž€αŸαž’αžΆαž…αžšαž€αŸ’αžŸαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αž•αž„αžŠαŸ‚αžšαž‡αžΆ json fileαŸ” αž“αžΆαŸ†αž™αžΎαž„αžšαž€αŸ’αžŸαžΆαž‡αžΆ json file αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαžšαžŸαŸαžš json file, αž™αžΎαž„αž”αŸ’αžšαžΎ json.dump() method, αžœαžΆαž’αžΆαž…αž™αž€αž”αžΆαž“ dictionary, output file, ensure_ascii αž“αž·αž„ indent. + +```py +import json +# python dictionary +person = { + "name": "Asabeneh", + "country": "Finland", + "city": "Helsinki", + "skills": ["JavaScrip", "React", "Python"] +} +with open('./files/json_example.json', 'w', encoding='utf-8') as f: + json.dump(person, f, ensure_ascii=False, indent=4) +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„ code αžαžΆαž„αž›αžΎαž™αžΎαž„αž”αŸ’αžšαžΎ encoding αž“αž·αž„ indentation. Indentation αž’αŸ’αžœαžΎαž’αŸ„αž™ json file αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž’αžΆαž“αŸ” + +### File with csv Extension + +CSV αž˜αžΆαž“αž“αŸαž™αžαžΆ comma separated valuesαŸ” CSV αž‚αžΊαž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹ file αžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαžšαžΆαž„αžŠαžΌαž…αž‡αžΆ spreadsheet ឬ database αŸ” CSV αž‚αžΊαž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž…αŸ’αžšαžΎαž“αž€αŸ’αž“αž»αž„ data scienceαŸ” + +**Example:** + +```csv +"name","country","city","skills" +"Asabeneh","Finland","Helsinki","JavaScript" +``` + +**Example:** + +```py +import csv +with open('./files/csv_example.csv') as f: + csv_reader = csv.reader(f, delimiter=',') # w use, reader method to read csv + line_count = 0 + for row in csv_reader: + if line_count == 0: + print(f'Column names are :{", ".join(row)}') + line_count += 1 + else: + print( + f'\t{row[0]} is a teachers. He lives in {row[1]}, {row[2]}.') + line_count += 1 + print(f'Number of lines: {line_count}') +``` + +```sh +# output: +Column names are :name, country, city, skills + Asabeneh is a teacher. He lives in Finland, Helsinki. +Number of lines: 2 +``` + +### File with xlsx Extension + +αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“ excel file αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž…αžΌαž› _xlrd_ packageαŸ” αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžšαžΏαž„αž“αŸαŸ‡αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž› αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› package αž”αŸ’αžšαžΎ pipαŸ” + +```py +import xlrd +excel_book = xlrd.open_workbook('sample.xls) +print(excel_book.nsheets) +print(excel_book.sheet_names) +``` + +### File with xml Extension + +XML αž‡αžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž½αž™αž‘αŸ€αžαžŠαŸ‚αž›αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž‡αžΆ HTMLαŸ” αž€αŸ’αž“αž»αž„ XML, tags αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‡αžΆαž˜αž»αž“αŸ” αžαŸ’αžŸαŸ‚αžŠαŸ†αž”αžΌαž„αž‚αžΊ αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸ XMLαŸ” person tag iαž‚αžΊαž‡αžΆαž˜αžΌαž›αž“αŸƒ XML αŸ” person αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž—αŸαž‘αŸ” +**Example:XML** + +```xml + + + Asabeneh + Finland + Helsinki + + JavaScrip + React + Python + + +``` + +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž’αžΆαž“αž―αž€αžŸαžΆαžš XML αžŸαžΌαž˜αž˜αžΎαž› [documentation](https://docs.python.org/2/library/xml.etree.elementtree.html) + +```py +import xml.etree.ElementTree as ET +tree = ET.parse('./files/xml_example.xml') +root = tree.getroot() +print('Root tag:', root.tag) +print('Attribute:', root.attrib) +for child in root: + print('field: ', child.tag) +``` + +```sh +# output +Root tag: person +Attribute: {'gender': 'male'} +field: name +field: country +field: city +field: skills +``` \ No newline at end of file diff --git a/Khmer/20_Day_Python_package_manager/20_python_package_manager.md b/Khmer/20_Day_Python_package_manager/20_python_package_manager.md new file mode 100644 index 000000000..37dc6911b --- /dev/null +++ b/Khmer/20_Day_Python_package_manager/20_python_package_manager.md @@ -0,0 +1,459 @@ +
+

30 Days Of Python: Day 20 - PIP

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+Second Edition: July, 2021 +
+
+ +[<< Day 19](../19_Day_File_handling/19_file_handling.md) | [Day 21 >>](../21_Day_Classes_and_objects/21_classes_and_objects.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 20](#-day-20) + - [Python PIP - Python Package Manager](#python-pip---python-package-manager) + - [What is PIP ?](#what-is-pip-) + - [Installing PIP](#installing-pip) + - [Installing packages using pip](#installing-packages-using-pip) + - [Uninstalling Packages](#uninstalling-packages) + - [List of Packages](#list-of-packages) + - [Show Package](#show-package) + - [PIP Freeze](#pip-freeze) + - [Reading from URL](#reading-from-url) + - [Creating a Package](#creating-a-package) + - [Further Information About Packages](#further-information-about-packages) + - [Exercises: Day 20](#exercises-day-20) + +# πŸ“˜ Day 20 + +## Python PIP - Python Package Manager + +### What is PIP ? + +PIP stands for Preferred installer program. We use _pip_ to install different Python packages. +Package is a Python module that can contain one or more modules or other packages. A module or modules that we can install to our application is a package. +In programming, we do not have to write every utility program, instead we install packages and import them to our applications. + +### Installing PIP + +If you did not install pip, let us install it now. Go to your terminal or command prompt and copy and paste this: + +```sh +asabeneh@Asabeneh:~$ pip install pip +``` + +Check if pip is installed by writing + +```sh +pip --version +``` + +```py +asabeneh@Asabeneh:~$ pip --version +pip 21.1.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.9.6) +``` + +As you can see, I am using pip version 21.1.3, if you see some number a bit below or above that, means you have pip installed. + +Let us check some of the packages used in the Python community for different purposes. Just to let you know that there are lots of packages available for use with different applications. + +### Installing packages using pip + +Let us try to install _numpy_, called numeric python. It is one of the most popular packages in machine learning and data science community. + +- NumPy is the fundamental package for scientific computing with Python. It contains among other things: + - a powerful N-dimensional array object + - sophisticated (broadcasting) functions + - tools for integrating C/C++ and Fortran code + - useful linear algebra, Fourier transform, and random number capabilities + +```sh +asabeneh@Asabeneh:~$ pip install numpy +``` + +Let us start using numpy. Open your python interactive shell, write python and then import numpy as follows: + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +Type "help", "copyright", "credits" or "license" for more information. +>>> import numpy +>>> numpy.version.version +'1.20.1' +>>> lst = [1, 2, 3,4, 5] +>>> np_arr = numpy.array(lst) +>>> np_arr +array([1, 2, 3, 4, 5]) +>>> len(np_arr) +5 +>>> np_arr * 2 +array([ 2, 4, 6, 8, 10]) +>>> np_arr + 2 +array([3, 4, 5, 6, 7]) +>>> +``` + +Pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language. Let us install the big brother of numpy, _pandas_: + +```sh +asabeneh@Asabeneh:~$ pip install pandas +``` + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +Type "help", "copyright", "credits" or "license" for more information. +>>> import pandas +``` + +This section is not about numpy nor pandas, here we are trying to learn how to install packages and how to import them. If it is needed, we will talk about different packages in other sections. + +Let us import a web browser module, which can help us to open any website. We do not need to install this module, it is already installed by default with Python 3. For instance if you like to open any number of websites at any time or if you like to schedule something, this _webbrowser_ module can be used. + +```py +import webbrowser # web browser module to open websites + +# list of urls: python +url_lists = [ + 'http://www.python.org', + 'https://www.linkedin.com/in/asabeneh/', + 'https://github.com/Asabeneh', + 'https://twitter.com/Asabeneh', +] + +# opens the above list of websites in a different tab +for url in url_lists: + webbrowser.open_new_tab(url) +``` + +### Uninstalling Packages + +If you do not like to keep the installed packages, you can remove them using the following command. + +```sh +pip uninstall packagename +``` + +### List of Packages + +To see the installed packages on our machine. We can use pip followed by list. + +```sh +pip list +``` + +### Show Package + +To show information about a package + +```sh +pip show packagename +``` + +```sh +asabeneh@Asabeneh:~$ pip show pandas +Name: pandas +Version: 1.2.3 +Summary: Powerful data structures for data analysis, time series, and statistics +Home-page: http://pandas.pydata.org +Author: None +Author-email: None +License: BSD +Location: /usr/local/lib/python3.7/site-packages +Requires: python-dateutil, pytz, numpy +Required-by: +``` + +If we want even more details, just add --verbose + +```sh +asabeneh@Asabeneh:~$ pip show --verbose pandas +Name: pandas +Version: 1.2.3 +Summary: Powerful data structures for data analysis, time series, and statistics +Home-page: http://pandas.pydata.org +Author: None +Author-email: None +License: BSD +Location: /usr/local/lib/python3.7/site-packages +Requires: numpy, pytz, python-dateutil +Required-by: +Metadata-Version: 2.1 +Installer: pip +Classifiers: + Development Status :: 5 - Production/Stable + Environment :: Console + Operating System :: OS Independent + Intended Audience :: Science/Research + Programming Language :: Python + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.5 + Programming Language :: Python :: 3.6 + Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 + Programming Language :: Cython + Topic :: Scientific/Engineering +Entry-points: + [pandas_plotting_backends] + matplotlib = pandas:plotting._matplotlib +``` + +### PIP Freeze + +Generate installed Python packages with their version and the output is suitable to use it in a requirements file. A requirements.txt file is a file that should contain all the installed Python packages in a Python project. + +```sh +asabeneh@Asabeneh:~$ pip freeze +docutils==0.11 +Jinja2==2.7.2 +MarkupSafe==0.19 +Pygments==1.6 +Sphinx==1.2.2 +``` + +The pip freeze gave us the packages used, installed and their version. We use it with requirements.txt file for deployment. + +### Reading from URL + +By now you are familiar with how to read or write on a file located on you local machine. Sometimes, we would like to read from a website using url or from an API. +API stands for Application Program Interface. It is a means to exchange structured data between servers primarily as json data. To open a network connection, we need a package called _requests_ - it allows to open a network connection and to implement CRUD(create, read, update and delete) operations. In this section, we will cover only reading ore getting part of a CRUD. + +Let us install _requests_: + +```py +asabeneh@Asabeneh:~$ pip install requests +``` + +We will see _get_, _status_code_, _headers_, _text_ and _json_ methods in _requests_ module: + - _get()_: to open a network and fetch data from url - it returns a response object + - _status_code_: After we fetched data, we can check the status of the operation (success, error, etc) + - _headers_: To check the header types + - _text_: to extract the text from the fetched response object + - _json_: to extract json data +Let's read a txt file from this website, https://www.w3.org/TR/PNG/iso_8859-1.txt. + +```py +import requests # importing the request module + +url = 'https://www.w3.org/TR/PNG/iso_8859-1.txt' # text from a website + +response = requests.get(url) # opening a network and fetching a data +print(response) +print(response.status_code) # status code, success:200 +print(response.headers) # headers information +print(response.text) # gives all the text from the page +``` + +```sh + +200 +{'date': 'Sun, 08 Dec 2019 18:00:31 GMT', 'last-modified': 'Fri, 07 Nov 2003 05:51:11 GMT', 'etag': '"17e9-3cb82080711c0;50c0b26855880-gzip"', 'accept-ranges': 'bytes', 'cache-control': 'max-age=31536000', 'expires': 'Mon, 07 Dec 2020 18:00:31 GMT', 'vary': 'Accept-Encoding', 'content-encoding': 'gzip', 'access-control-allow-origin': '*', 'content-length': '1616', 'content-type': 'text/plain', 'strict-transport-security': 'max-age=15552000; includeSubdomains; preload', 'content-security-policy': 'upgrade-insecure-requests'} +``` + +- Let us read from an API. API stands for Application Program Interface. It is a means to exchange structure data between servers primarily a json data. An example of an API:https://restcountries.eu/rest/v2/all. Let us read this API using _requests_ module. + +```py +import requests +url = 'https://restcountries.eu/rest/v2/all' # countries api +response = requests.get(url) # opening a network and fetching a data +print(response) # response object +print(response.status_code) # status code, success:200 +countries = response.json() +print(countries[:1]) # we sliced only the first country, remove the slicing to see all countries +``` + +```sh + +200 +[{'alpha2Code': 'AF', + 'alpha3Code': 'AFG', + 'altSpellings': ['AF', 'Afđānistān'], + 'area': 652230.0, + 'borders': ['IRN', 'PAK', 'TKM', 'UZB', 'TJK', 'CHN'], + 'callingCodes': ['93'], + 'capital': 'Kabul', + 'cioc': 'AFG', + 'currencies': [{'code': 'AFN', 'name': 'Afghan afghani', 'symbol': 'Ψ‹'}], + 'demonym': 'Afghan', + 'flag': 'https://restcountries.eu/data/afg.svg', + 'gini': 27.8, + 'languages': [{'iso639_1': 'ps', + 'iso639_2': 'pus', + 'name': 'Pashto', + 'nativeName': 'پښΨͺو'}, + {'iso639_1': 'uz', + 'iso639_2': 'uzb', + 'name': 'Uzbek', + 'nativeName': 'OΚ»zbek'}, + {'iso639_1': 'tk', + 'iso639_2': 'tuk', + 'name': 'Turkmen', + 'nativeName': 'TΓΌrkmen'}], + 'latlng': [33.0, 65.0], + 'name': 'Afghanistan', + 'nativeName': 'افغانسΨͺΨ§Ω†', + 'numericCode': '004', + 'population': 27657145, + 'region': 'Asia', + 'regionalBlocs': [{'acronym': 'SAARC', + 'name': 'South Asian Association for Regional Cooperation', + 'otherAcronyms': [], + 'otherNames': []}], + 'subregion': 'Southern Asia', + 'timezones': ['UTC+04:30'], + 'topLevelDomain': ['.af'], + 'translations': {'br': 'AfeganistΓ£o', + 'de': 'Afghanistan', + 'es': 'AfganistΓ‘n', + 'fa': 'افغانسΨͺΨ§Ω†', + 'fr': 'Afghanistan', + 'hr': 'Afganistan', + 'it': 'Afghanistan', + 'ja': 'をフガニスタン', + 'nl': 'Afghanistan', + 'pt': 'AfeganistΓ£o'}}] +``` + +We use _json()_ method from response object, if the we are fetching JSON data. For txt, html, xml and other file formats we can use _text_. + +### Creating a Package + +We organize a large number of files in different folders and sub-folders based on some criteria, so that we can find and manage them easily. As you know, a module can contain multiple objects, such as classes, functions, etc. A package can contain one or more relevant modules. A package is actually a folder containing one or more module files. Let us create a package named mypackage, using the following steps: + +Create a new folder named mypacakge inside 30DaysOfPython folder +Create an empty **__init__**.py file in the mypackage folder. +Create modules arithmetic.py and greet.py with following code: + +```py +# mypackage/arithmetics.py +# arithmetics.py +def add_numbers(*args): + total = 0 + for num in args: + total += num + return total + + +def subtract(a, b): + return (a - b) + + +def multiple(a, b): + return a * b + + +def division(a, b): + return a / b + + +def remainder(a, b): + return a % b + + +def power(a, b): + return a ** b +``` + +```py +# mypackage/greet.py +# greet.py +def greet_person(firstname, lastname): + return f'{firstname} {lastname}, welcome to 30DaysOfPython Challenge!' +``` + +The folder structure of your package should look like this: + +```sh +─ mypackage + β”œβ”€β”€ __init__.py + β”œβ”€β”€ arithmetic.py + └── greet.py +``` + +Now let's open the python interactive shell and try the package we have created: + +```sh +asabeneh@Asabeneh:~/Desktop/30DaysOfPython$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +Type "help", "copyright", "credits" or "license" for more information. +>>> from mypackage import arithmetics +>>> arithmetics.add_numbers(1, 2, 3, 5) +11 +>>> arithmetics.subtract(5, 3) +2 +>>> arithmetics.multiple(5, 3) +15 +>>> arithmetics.division(5, 3) +1.6666666666666667 +>>> arithmetics.remainder(5, 3) +2 +>>> arithmetics.power(5, 3) +125 +>>> from mypackage import greet +>>> greet.greet_person('Asabeneh', 'Yetayeh') +'Asabeneh Yetayeh, welcome to 30DaysOfPython Challenge!' +>>> +``` + +As you can see our package works perfectly. The package folder contains a special file called **__init__**.py - it stores the package's content. If we put **__init__**.py in the package folder, python start recognizes it as a package. +The **__init__**.py exposes specified resources from its modules to be imported to other python files. An empty **__init__**.py file makes all functions available when a package is imported. The **__init__**.py is essential for the folder to be recognized by Python as a package. + +### Further Information About Packages + +- Database + - SQLAlchemy or SQLObject - Object oriented access to several different database systems + - _pip install SQLAlchemy_ +- Web Development + - Django - High-level web framework. + - _pip install django_ + - Flask - micro framework for Python based on Werkzeug, Jinja 2. (It's BSD licensed) + - _pip install flask_ +- HTML Parser + - [Beautiful Soup](https://www.crummy.com/software/BeautifulSoup/bs4/doc/) - HTML/XML parser designed for quick turnaround projects like screen-scraping, will accept bad markup. + - _pip install beautifulsoup4_ + - PyQuery - implements jQuery in Python; faster than BeautifulSoup, apparently. + +- XML Processing + - ElementTree - The Element type is a simple but flexible container object, designed to store hierarchical data structures, such as simplified XML infosets, in memory. --Note: Python 2.5 and up has ElementTree in the Standard Library +- GUI + - PyQt - Bindings for the cross-platform Qt framework. + - TkInter - The traditional Python user interface toolkit. +- Data Analysis, Data Science and Machine learning + - Numpy: Numpy(numeric python) is known as one of the most popular machine learning library in Python. + - Pandas: is a data analysis, data science and a machine learning library in Python that provides data structures of high-level and a wide variety of tools for analysis. + - SciPy: SciPy is a machine learning library for application developers and engineers. SciPy library contains modules for optimization, linear algebra, integration, image processing, and statistics. + - Scikit-Learn: It is NumPy and SciPy. It is considered as one of the best libraries for working with complex data. + - TensorFlow: is a machine learning library built by Google. + - Keras: is considered as one of the coolest machine learning libraries in Python. It provides an easier mechanism to express neural networks. Keras also provides some of the best utilities for compiling models, processing data-sets, visualization of graphs, and much more. +- Network: + - requests: is a package which we can use to send requests to a server(GET, POST, DELETE, PUT) + - _pip install requests_ + +πŸŒ• You are always progressing and you are a head of 20 steps to your way to greatness. Now do some exercises for your brain and muscles. + +## Exercises: Day 20 + +1. Read this url and find the 10 most frequent words. romeo_and_juliet = 'http://www.gutenberg.org/files/1112/1112.txt' +2. Read the cats API and cats_api = 'https://api.thecatapi.com/v1/breeds' and find : + 1. the min, max, mean, median, standard deviation of cats' weight in metric units. + 2. the min, max, mean, median, standard deviation of cats' lifespan in years. + 3. Create a frequency table of country and breed of cats +3. Read the [countries API](https://restcountries.eu/rest/v2/all) and find + 1. the 10 largest countries + 2. the 10 most spoken languages + 3. the total number of languages in the countries API +4. UCI is one of the most common places to get data sets for data science and machine learning. Read the content of UCL (https://archive.ics.uci.edu/ml/datasets.php). Without additional libraries it will be difficult, so you may try it with BeautifulSoup4 + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 19](../19_Day_File_handling/19_file_handling.md) | [Day 21 >>](../21_Day_Classes_and_objects/21_classes_and_objects.md) diff --git a/Khmer/20_Day_Python_package_manager/__init__.py b/Khmer/20_Day_Python_package_manager/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/Khmer/20_Day_Python_package_manager/arithmetic.py b/Khmer/20_Day_Python_package_manager/arithmetic.py new file mode 100644 index 000000000..bdb5c1fb2 --- /dev/null +++ b/Khmer/20_Day_Python_package_manager/arithmetic.py @@ -0,0 +1,25 @@ +def add_numbers(*args): + total = 0 + for num in args: + total += num + return total + + +def subtract(a, b): + return (a - b) + + +def multiple(a, b): + return a * b + + +def division(a, b): + return a / b + + +def remainder(a, b): + return a % b + + +def power(a, b): + return a ** b \ No newline at end of file diff --git a/Khmer/20_Day_Python_package_manager/greet.py b/Khmer/20_Day_Python_package_manager/greet.py new file mode 100644 index 000000000..997787d11 --- /dev/null +++ b/Khmer/20_Day_Python_package_manager/greet.py @@ -0,0 +1,2 @@ +def greet_person(firstname, lastname): + return f'{firstname} {lastname}, welcome to 30DaysOfPython Challenge!' \ No newline at end of file diff --git a/Khmer/21_Day_Classes_and_objects/21_classes_and_objects.md b/Khmer/21_Day_Classes_and_objects/21_classes_and_objects.md new file mode 100644 index 000000000..9876cfb55 --- /dev/null +++ b/Khmer/21_Day_Classes_and_objects/21_classes_and_objects.md @@ -0,0 +1,370 @@ +
+

30 Days Of Python: Day 21 - Classes and Objects

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+Second Edition: July, 2021 +
+ +
+ +[<< Day 20](../20_Day_Python_package_manager/20_python_package_manager.md) | [Day 22 >>](../22_Day_Web_scraping/22_web_scraping.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 21](#-day-21) + - [Classes and Objects](#classes-and-objects) + - [Creating a Class](#creating-a-class) + - [Creating an Object](#creating-an-object) + - [Class Constructor](#class-constructor) + - [Object Methods](#object-methods) + - [Object Default Methods](#object-default-methods) + - [Method to Modify Class Default Values](#method-to-modify-class-default-values) + - [Inheritance](#inheritance) + - [Overriding parent method](#overriding-parent-method) + - [πŸ’» Exercises: Day 21](#-exercises-day-21) + - [Exercises: Level 1](#exercises-level-1) + - [Exercises: Level 2](#exercises-level-2) + - [Exercises: Level 3](#exercises-level-3) + +# πŸ“˜ Day 21 + +## Classes and Objects + +Python is an object oriented programming language. Everything in Python is an object, with its properties and methods. A number, string, list, dictionary, tuple, set etc. used in a program is an object of a corresponding built-in class. We create class to create an object. A class is like an object constructor, or a "blueprint" for creating objects. We instantiate a class to create an object. The class defines attributes and the behavior of the object, while the object, on the other hand, represents the class. + +We have been working with classes and objects right from the beginning of this challenge unknowingly. Every element in a Python program is an object of a class. +Let us check if everything in python is a class: + +```py +asabeneh@Asabeneh:~$ python +Python 3.9.6 (default, Jun 28 2021, 15:26:21) +[Clang 11.0.0 (clang-1100.0.33.8)] on darwin +Type "help", "copyright", "credits" or "license" for more information. +>>> num = 10 +>>> type(num) + +>>> string = 'string' +>>> type(string) + +>>> boolean = True +>>> type(boolean) + +>>> lst = [] +>>> type(lst) + +>>> tpl = () +>>> type(tpl) + +>>> set1 = set() +>>> type(set1) + +>>> dct = {} +>>> type(dct) + +``` + +### Creating a Class + +To create a class we need the key word **class** followed by the name and colon. Class name should be **CamelCase**. + +```sh +# syntax +class ClassName: + code goes here +``` + +**Example:** + +```py +class Person: + pass +print(Person) +``` + +```sh +<__main__.Person object at 0x10804e510> +``` + +### Creating an Object + +We can create an object by calling the class. + +```py +p = Person() +print(p) +``` + +### Class Constructor + +In the examples above, we have created an object from the Person class. However, a class without a constructor is not really useful in real applications. Let us use constructor function to make our class more useful. Like the constructor function in Java or JavaScript, Python has also a built-in **__init__**() constructor function. The **__init__** constructor function has self parameter which is a reference to the current instance of the class +**Examples:** + +```py +class Person: + def __init__ (self, name): + # self allows to attach parameter to the class + self.name =name + +p = Person('Asabeneh') +print(p.name) +print(p) +``` + +```sh +# output +Asabeneh +<__main__.Person object at 0x2abf46907e80> +``` + +Let us add more parameters to the constructor function. + +```py +class Person: + def __init__(self, firstname, lastname, age, country, city): + self.firstname = firstname + self.lastname = lastname + self.age = age + self.country = country + self.city = city + + +p = Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki') +print(p.firstname) +print(p.lastname) +print(p.age) +print(p.country) +print(p.city) +``` + +```sh +# output +Asabeneh +Yetayeh +250 +Finland +Helsinki +``` + +### Object Methods + +Objects can have methods. The methods are functions which belong to the object. + +**Example:** + +```py +class Person: + def __init__(self, firstname, lastname, age, country, city): + self.firstname = firstname + self.lastname = lastname + self.age = age + self.country = country + self.city = city + def person_info(self): + return f'{self.firstname} {self.lastname} is {self.age} years old. He lives in {self.city}, {self.country}' + +p = Person('Asabeneh', 'Yetayeh', 250, 'Finland', 'Helsinki') +print(p.person_info()) +``` + +```sh +# output +Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland +``` + +### Object Default Methods + +Sometimes, you may want to have a default values for your object methods. If we give default values for the parameters in the constructor, we can avoid errors when we call or instantiate our class without parameters. Let's see how it looks: + +**Example:** + +```py +class Person: + def __init__(self, firstname='Asabeneh', lastname='Yetayeh', age=250, country='Finland', city='Helsinki'): + self.firstname = firstname + self.lastname = lastname + self.age = age + self.country = country + self.city = city + + def person_info(self): + return f'{self.firstname} {self.lastname} is {self.age} years old. He lives in {self.city}, {self.country}.' + +p1 = Person() +print(p1.person_info()) +p2 = Person('John', 'Doe', 30, 'Nomanland', 'Noman city') +print(p2.person_info()) +``` + +```sh +# output +Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland. +John Doe is 30 years old. He lives in Noman city, Nomanland. +``` + +### Method to Modify Class Default Values + +In the example below, the person class, all the constructor parameters have default values. In addition to that, we have skills parameter, which we can access using a method. Let us create add_skill method to add skills to the skills list. + +```py +class Person: + def __init__(self, firstname='Asabeneh', lastname='Yetayeh', age=250, country='Finland', city='Helsinki'): + self.firstname = firstname + self.lastname = lastname + self.age = age + self.country = country + self.city = city + self.skills = [] + + def person_info(self): + return f'{self.firstname} {self.lastname} is {self.age} years old. He lives in {self.city}, {self.country}.' + def add_skill(self, skill): + self.skills.append(skill) + +p1 = Person() +print(p1.person_info()) +p1.add_skill('HTML') +p1.add_skill('CSS') +p1.add_skill('JavaScript') +p2 = Person('John', 'Doe', 30, 'Nomanland', 'Noman city') +print(p2.person_info()) +print(p1.skills) +print(p2.skills) +``` + +```sh +# output +Asabeneh Yetayeh is 250 years old. He lives in Helsinki, Finland. +John Doe is 30 years old. He lives in Noman city, Nomanland. +['HTML', 'CSS', 'JavaScript'] +[] +``` + +### Inheritance + +Using inheritance we can reuse parent class code. Inheritance allows us to define a class that inherits all the methods and properties from parent class. The parent class or super or base class is the class which gives all the methods and properties. Child class is the class that inherits from another or parent class. +Let us create a student class by inheriting from person class. + +```py +class Student(Person): + pass + + +s1 = Student('Eyob', 'Yetayeh', 30, 'Finland', 'Helsinki') +s2 = Student('Lidiya', 'Teklemariam', 28, 'Finland', 'Espoo') +print(s1.person_info()) +s1.add_skill('JavaScript') +s1.add_skill('React') +s1.add_skill('Python') +print(s1.skills) + +print(s2.person_info()) +s2.add_skill('Organizing') +s2.add_skill('Marketing') +s2.add_skill('Digital Marketing') +print(s2.skills) + +``` + +```sh +output +Eyob Yetayeh is 30 years old. He lives in Helsinki, Finland. +['JavaScript', 'React', 'Python'] +Lidiya Teklemariam is 28 years old. He lives in Espoo, Finland. +['Organizing', 'Marketing', 'Digital Marketing'] +``` + +We did not call the **__init__**() constructor in the child class. If we didn't call it then we can still access all the properties from the parent. But if we do call the constructor we can access the parent properties by calling _super_. +We can add a new method to the child or we can override the parent class methods by creating the same method name in the child class. When we add the **__init__**() function, the child class will no longer inherit the parent's **__init__**() function. + +### Overriding parent method + +```py +class Student(Person): + def __init__ (self, firstname='Asabeneh', lastname='Yetayeh',age=250, country='Finland', city='Helsinki', gender='male'): + self.gender = gender + super().__init__(firstname, lastname,age, country, city) + def person_info(self): + gender = 'He' if self.gender =='male' else 'She' + return f'{self.firstname} {self.lastname} is {self.age} years old. {gender} lives in {self.city}, {self.country}.' + +s1 = Student('Eyob', 'Yetayeh', 30, 'Finland', 'Helsinki','male') +s2 = Student('Lidiya', 'Teklemariam', 28, 'Finland', 'Espoo', 'female') +print(s1.person_info()) +s1.add_skill('JavaScript') +s1.add_skill('React') +s1.add_skill('Python') +print(s1.skills) + +print(s2.person_info()) +s2.add_skill('Organizing') +s2.add_skill('Marketing') +s2.add_skill('Digital Marketing') +print(s2.skills) +``` + +```sh +Eyob Yetayeh is 30 years old. He lives in Helsinki, Finland. +['JavaScript', 'React', 'Python'] +Lidiya Teklemariam is 28 years old. She lives in Espoo, Finland. +['Organizing', 'Marketing', 'Digital Marketing'] +``` + +We can use super() built-in function or the parent name Person to automatically inherit the methods and properties from its parent. In the example above we override the parent method. The child method has a different feature, it can identify, if the gender is male or female and assign the proper pronoun(He/She). + +πŸŒ• Now, you are fully charged with a super power of programming. Now do some exercises for your brain and muscles. + +## πŸ’» Exercises: Day 21 + +### Exercises: Level 1 + +1. Python has the module called _statistics_ and we can use this module to do all the statistical calculations. However, to learn how to make function and reuse function let us try to develop a program, which calculates the measure of central tendency of a sample (mean, median, mode) and measure of variability (range, variance, standard deviation). In addition to those measures, find the min, max, count, percentile, and frequency distribution of the sample. You can create a class called Statistics and create all the functions that do statistical calculations as methods for the Statistics class. Check the output below. + +```py +ages = [31, 26, 34, 37, 27, 26, 32, 32, 26, 27, 27, 24, 32, 33, 27, 25, 26, 38, 37, 31, 34, 24, 33, 29, 26] + +print('Count:', data.count()) # 25 +print('Sum: ', data.sum()) # 744 +print('Min: ', data.min()) # 24 +print('Max: ', data.max()) # 38 +print('Range: ', data.range() # 14 +print('Mean: ', data.mean()) # 30 +print('Median: ', data.median()) # 29 +print('Mode: ', data.mode()) # {'mode': 26, 'count': 5} +print('Standard Deviation: ', data.std()) # 4.2 +print('Variance: ', data.var()) # 17.5 +print('Frequency Distribution: ', data.freq_dist()) # [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)] +``` + +```sh +# you output should look like this +print(data.describe()) +Count: 25 +Sum: 744 +Min: 24 +Max: 38 +Range: 14 +Mean: 30 +Median: 29 +Mode: (26, 5) +Variance: 17.5 +Standard Deviation: 4.2 +Frequency Distribution: [(20.0, 26), (16.0, 27), (12.0, 32), (8.0, 37), (8.0, 34), (8.0, 33), (8.0, 31), (8.0, 24), (4.0, 38), (4.0, 29), (4.0, 25)] +``` + +### Exercises: Level 2 + +1. Create a class called PersonAccount. It has firstname, lastname, incomes, expenses properties and it has total_income, total_expense, account_info, add_income, add_expense and account_balance methods. Incomes is a set of incomes and its description. The same goes for expenses. + +### Exercises: Level 3 + + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 20](../20_Day_Python_package_manager/20_python_package_manager.md) | [Day 22 >>](../22_Day_Web_scraping/22_web_scraping.md) diff --git a/Khmer/22_Day_Web_scraping/22_web_scraping.md b/Khmer/22_Day_Web_scraping/22_web_scraping.md new file mode 100644 index 000000000..0936adc9d --- /dev/null +++ b/Khmer/22_Day_Web_scraping/22_web_scraping.md @@ -0,0 +1,101 @@ +
+

30 Days Of Python: Day 22 - Web Scraping

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+
+ +[<< Day 21](../21_Day_Classes_and_objects/21_classes_and_objects.md) | [Day 23 >>](../23_Day_Virtual_environment/23_virtual_environment.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 22](#-day-22) + - [Python Web Scraping](#python-web-scraping) + - [What is Web Scrapping](#what-is-web-scrapping) + +# πŸ“˜ Day 22 + +## Python Web Scraping + +### What is Web Scrapping + + +αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαž–αŸ„αžšαž–αŸαž‰αž‘αŸ…αžŠαŸ„αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸαž…αŸ’αžšαžΎαž“ αžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αžŠαŸ…αž•αŸ’αžŸαŸαž„αŸ— αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαž˜αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αžšαž»αž€αžšαž€ (scrape) αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžš αŸ” + +αž€αžΆαžšαžšαž»αž€αžšαž€αžœαŸαž”αžŸαžΆαž™ αž‚αžΊαž‡αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž‘αžΆαž‰αž™αž€αž“αž·αž„αž”αŸ’αžšαž˜αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžš αž“αž·αž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžœαžΆαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž¬αž€αŸ’αž“αž»αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” + +αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ beautifulsoup αž“αž·αž„ request package αžŠαžΎαž˜αŸ’αž”αžΈαžšαž»αž€αžšαž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž”αŸ’αžšαž—αŸαž‘αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎαž‚αžΊ beautifulsoup 4 αŸ” + +αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αžšαž»αž€αžšαž€αž‚αŸαž αž‘αŸ†αž–αŸαžš αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžš _requests_, _beautifoulSoup4_ and a _website_. + +```sh +pip install requests +pip install beautifulsoup4 +``` + +αžŠαžΎαž˜αŸ’αž”αžΈαžšαž»αž€αžšαž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžš αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒ HTML tags αž“αž·αž„ CSS selectors αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž™αž€αž˜αžΆαžαž·αž€αžΆαž–αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžšαž˜αž½αž™ αžŠαŸ„αž™αž”αŸ’αžšαžΎ HTML tags, classes ឬ/αž“αž·αž„ ids αŸ” + +αžŸαžΌαž˜αž™αžΎαž„αž“αžΆαŸ†αž…αžΌαž› (import) requests αž“αž·αž„ BeautifulSoup module + +```py +import requests +from bs4 import BeautifulSoup +``` + +αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαž€αžΆαžŸαžαžΆ url variable αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ website αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αžšαž»αž€αžšαž€ αŸ” + +```py + +import requests +from bs4 import BeautifulSoup +url = 'https://archive.ics.uci.edu/ml/datasets.php' + +# Lets use the requests get method to fetch the data from url + +response = requests.get(url) +# lets check the status +status = response.status_code +print(status) # 200 means the fetching was successful +``` + +```sh +200 +``` + +αž”αŸ’αžšαžΎ beautifulSoup αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΆαžαž·αž€αžΆαž–αžΈαž‘αŸ†αž–αŸαžš + +```py +import requests +from bs4 import BeautifulSoup +url = 'https://archive.ics.uci.edu/ml/datasets.php' + +response = requests.get(url) +content = response.content # we get all the content from the website +soup = BeautifulSoup(content, 'html.parser') # beautiful soup will give a chance to parse +print(soup.title) # UCI Machine Learning Repository: Data Sets +print(soup.title.get_text()) # UCI Machine Learning Repository: Data Sets +print(soup.body) # gives the whole page on the website +print(response.status_code) + +tables = soup.find_all('table', {'cellpadding':'3'}) +# We are targeting the table with cellpadding attribute with the value of 3 +# We can select using id, class or HTML tag , for more information check the beautifulsoup doc +table = tables[0] # the result is a list, we are taking out data from it +for td in table.find('tr').find_all('td'): + print(td.text) +``` + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžšαžαŸ‹αž€αžΌαžŠαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αžαžΆ αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž‚αžΊαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž› αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž”αž“αŸ’αžαž’αŸ’αžœαžΎαžœαžΆαž”αžΆαž“ +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αžŸαžΌαž˜αž˜αžΎαž› [beautifulsoup documentation](https://www.crummy.com/software/BeautifulSoup/bs4/doc/#quick-start) + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 21](../21_Day_Web_scraping/21_class_and_object.md) | [Day 23 >>](../23_Day_Virtual_environment/23_virtual_environment.md) diff --git a/Khmer/23_Day_Virtual_environment/23_virtual_environment.md b/Khmer/23_Day_Virtual_environment/23_virtual_environment.md new file mode 100644 index 000000000..99dd3f3df --- /dev/null +++ b/Khmer/23_Day_Virtual_environment/23_virtual_environment.md @@ -0,0 +1,111 @@ +
+

30 Days Of Python: Day 23 - Virtual Environment

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+
+ +[<< Day 22](../22_Day_Web_scraping/22_web_scraping.md) | [Day 24 >>](../24_Day_Statistics/24_statistics.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 23](#-day-23) + - [Setting up Virtual Environments](#setting-up-virtual-environments) + +# πŸ“˜ Day 23 + +## Setting up Virtual Environments + +αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ project αžœαžΆαž›αŸ’αž’αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αžΆαž“ Virtual environment αŸ” Virtual environment αž’αžΆαž…αž‡αž½αž™αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž environment αžŠαŸ‚αž›αž“αŸ…αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž¬αž”αŸ‚αž€αž‚αŸ’αž“αžΆ αŸ” +αž“αŸαŸ‡αž“αžΉαž„αž‡αž½αž™αž±αŸ’αž™αž™αžΎαž„αž…αŸ€αžŸαžœαžΆαž„αž‡αž˜αŸ’αž›αŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αžΉαž„αž•αŸ’αž’αŸ‚αž€ (dependencies) αž›αžΎ project αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŸαžšαžŸαŸαžš pip freeze αž“αŸ…αž›αžΎ terminal αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αŸ” +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž”αŸ’αžšαžΎ virtualnv αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αžαŸ‚ packages αžŠαŸ‚αž›αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ project αž“αŸ„αŸ‡ αŸ” αž”αžΎαž€ terminal αžšαž”αžŸαŸ‹αž›αŸ„αž€αž’αŸ’αž“αž€αž αžΎαž™αžŠαŸ†αž‘αžΎαž„ virtualalenv + +```sh +asabeneh@Asabeneh:~$ pip install virtualenv +``` + +αž“αŸ…αž€αŸ’αž“αž»αž„ folder 30DaysOfPython αž”αž„αŸ’αž€αžΎαž folder flask_project αŸ” + +αž€αŸ’αžšαŸ„αž™αž–αžΈαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ virtualenv αžŸαžΌαž˜αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ folder αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αž”αž„αŸ’αž€αžΎαž virtualenv αžŠαŸ„αž™αžŸαžšαžŸαŸαžšαžαžΆ + +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Mac/Linux: +```sh +asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project\$ virtualenv venv + +``` + +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Windows: +```sh +C:\Users\User\Documents\30DaysOfPython\flask_project>python -m venv venv +``` + +αžαŸ’αž‰αž»αŸ†αž…αžΌαž›αž…αž·αžαŸ’αžαž αŸ… project αžαŸ’αž˜αžΈαž“αŸαŸ‡αžαžΆ venv, αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αžΆαž…αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αŸ” αžŸαžΌαž˜αž™αžΎαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎ venv αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎ ls command (ឬ dir αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ windows command prompt) αŸ” + +```sh +asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ ls +venv/ +``` + +αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž’αŸ’αžœαžΎαžŸαž€αž˜αŸ’αž˜ virtual environment αžŠαŸ„αž™αžŸαžšαžŸαŸαžšαž”αž‰αŸ’αž‡αžΆαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸ…αž€αŸ’αž“αž»αž„ folder project αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” + +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Mac/Linux: +```sh +asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ source venv/bin/activate +``` +αž€αžΆαžšαž”αžΎαž€ virtual environment αž€αŸ’αž“αž»αž„ Windows αž’αžΆαž…αž“αžΉαž„αžαžΌαž…αž“αŸ…αž›αžΎ Windows Power shell αž“αž·αž„ git bash αŸ” + +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Windows Power Shell: +```sh +C:\Users\User\Documents\30DaysOfPython\flask_project> venv\Scripts\activate +``` + +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Windows Git bash: +```sh +C:\Users\User\Documents\30DaysOfPython\flask_project> venv\Scripts\. activate +``` + +αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž”αž‰αŸ’αž‡αžΆ activation, project directory αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ venv αŸ” αžŸαžΌαž˜αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ” + +```sh +(venv) asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ +``` + +αž₯αž‘αžΌαžœαž“αŸαŸ‡, αžŸαžΌαž˜αž˜αžΎαž› package αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ project αž“αŸαŸ‡αžŠαŸ„αž™αžŸαžšαžŸαŸαžš pip freeze αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αžƒαžΎαž‰αž“αžΌαžœαž€αž‰αŸ’αž…αž”αŸ‹αžŽαžΆαž˜αž½αž™αž‘αŸ αŸ” + +αž™αžΎαž„αž“αžΉαž„αž’αŸ’αžœαžΎ flask project αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„ flask package αž“αŸαŸ‡αž‘αŸ…αž›αžΎ project αž“αŸαŸ‡αŸ” + +```sh +(venv) asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ pip install Flask +``` + +αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αžŸαžšαžŸαŸαžš pip freeze αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ project : + +```sh +(venv) asabeneh@Asabeneh:~/Desktop/30DaysOfPython/flask_project$ pip freeze +Click==7.0 +Flask==1.1.1 +itsdangerous==1.1.0 +Jinja2==2.10.3 +MarkupSafe==1.1.1 +Werkzeug==0.16.0 +``` + +αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αž”αž·αž‘αžŸαž€αž˜αŸ’αž˜ project αžŠαŸ„αž™αž”αŸ’αžšαžΎ _deactivate_ αŸ” + +```sh +(venv) asabeneh@Asabeneh:~/Desktop/30DaysOfPython$ deactivate +``` + +αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ flask αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„ αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡, project directory αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž”αžΆαž“αžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αžšαž½αž…αžšαžΆαž›αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ flask project αŸ”αž’αŸ’αž“αž€αž‚αž½αžšαž”αž‰αŸ’αž…αžΌαž› venv αž‘αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš.gitignore αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž˜αž·αž“αžαŸ’αžšαžΌαžœαž‡αŸ†αžšαž»αž‰αžœαžΆαž‘αŸ… Github αž‘αŸ αŸ” + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 22](../22_Day_Web_scraping/22_web_scraping.md) | [Day 24 >>](../24_Day_Statistics/24_statistics.md) diff --git a/Khmer/24_Day_Statistics/24_statistics.md b/Khmer/24_Day_Statistics/24_statistics.md new file mode 100644 index 000000000..86ef4fef7 --- /dev/null +++ b/Khmer/24_Day_Statistics/24_statistics.md @@ -0,0 +1,1235 @@ +
+

30 Days Of Python: Day 24 - Statistics

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+Second Edition: July, 2021 +
+
+ +[<< Day 23](../23_Day_Virtual_environment/23_virtual_environment.md) | [Day 25 >>](../25_Day_Pandas/25_pandas.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 24](#-day-24) + - [Python for Statistical Analysis](#python-for-statistical-analysis) + - [Statistics](#statistics) + - [Data](#data) + - [Statistics Module](#statistics-module) +- [NumPy](#numpy) + +# πŸ“˜ Day 24 + +## Python for Statistical Analysis + +## Statistics + +Statistics = αžŸαŸ’αžαž·αžαž· +Statistics αž‚αžΊαž‡αžΆαžœαž·αžŸαŸαž™αžŠαŸ‚αž›αžŸαž·αž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈ _collection_, _organization_, _displaying_, _analysing_, _interpretation_ and _presentation_ αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” +Statistics αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αžαžΆαž‡αžΆαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ data science αž“αž·αž„ machine learningαŸ” Statistics αž‚αžΊαž‡αžΆαžœαž·αžŸαŸαž™αžŠαŸαž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αž•αŸ’αžαŸ„αžαž›αžΎαž•αŸ’αž“αŸ‚αž€αžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αžαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” +αž–αŸαž›αž…αž”αŸ‹αž–αžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αž™αž€αžšαŸ€αž“αž‘αŸ…αž›αžΎαž•αŸ’αž›αžΌαžœ web development, data analysis, machine learning αž“αž·αž„ data scienceαŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž’αŸ’αž“αž€αžŠαžΎαžšαžαžΆαž˜αž•αŸ’αž›αžΌαžœαžŽαžΆαž€αŸαžŠαŸ„αž™ αž’αŸ’αž“αž€αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαŸ” αž€αžΆαžšαž˜αžΆαž“αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αžαžΆαž„αžŸαŸ’αžαž·αžαž·αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™, _data tells as they say_. + +## Data + +Data = αž‘αž·αž“αŸ’αž“αž“αŸαž™ +αžαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž’αŸ’αžœαžΈ? αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž“αž·αž„αž”αž€αž”αŸ’αžšαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αž”αŸ†αžŽαž„αžŽαžΆαž˜αž½αž™αŸ” αžœαžΆαž’αžΆαž…αž‡αžΆαž’αŸ’αžœαžΈαžŽαžΆαž˜αž½αž™ αžšαž½αž˜αž‘αžΆαŸ†αž„αž’αž€αŸ’αžŸαžš αž“αž·αž„αž›αŸαž αžšαžΌαž”αž—αžΆαž– αžŸαŸ†αž‘αŸαž„ αž¬αžœαžΈαžŠαŸαž’αžΌαŸ” αž”αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘ αžœαžΆαž˜αž·αž“αž˜αžΆαž“αž“αŸαž™αž’αŸ’αžœαžΈαž‘αŸ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž“αž»αžŸαŸ’αžŸ ឬ αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αŸ—αŸ” + +αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž„αžΆαžš data analysis, data science ឬ machine learning αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž‘αž·αž“αŸ’αž“αž“αŸαž™. αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž–αžΈαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŽαžΆαž˜αž½αž™αž¬αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžœαžΆαž‘αžΎαž„αŸ” αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆ αž“αž·αž„αž˜αž·αž“αžšαž…αž“αžΆαŸ” (Structured data and unstructured data) + +αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžαžΌαž…αž¬αž’αŸ†αŸ” αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αžšαŸ€αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€ file handlingαŸ” + +## Statistics Module + +Python _statistics_ module αž•αŸ’αžαž›αŸ‹αž˜αž»αžαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‚αžŽαž“αžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αŸαžαŸ” αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸαŸ‡αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αž‡αžΆαž˜αž½αž™ NumPy, SciPy, ឬ αžŸαž˜αŸ’αž—αžΆαžšαŸˆαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž–αŸαž‰αž›αŸαž‰αžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž―αž€αž‡αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž‡αŸ†αž“αžΆαž‰αžŠαžΌαž…αž‡αžΆ Minitab, SAS αž“αž·αž„ MatlabαŸ” αžœαžΆαž˜αžΆαž“αž‚αŸ„αž›αžŠαŸ…αž›αžΎ graphing αž“αž·αž„ scientific calculatorsαŸ” + +# NumPy + +αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž‘αžΈαž˜αž½αž™αž™αžΎαž„αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ Python αž‡αžΆ programming language αž‘αžΌαž‘αŸ…αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαŸ„αž™αž˜αžΆαž“αž‡αŸ†αž“αž½αž™αž–αžΈ libraries αž›αŸ’αž”αžΈαž›αŸ’αž”αžΆαž‰αžŠαžΌαž…αž‡αžΆ (numpy, scipy, matplotlib, pandas, etc)αŸ” αžœαžΆαž€αŸ’αž›αžΆαž™αž‡αžΆαž”αžšαž·αž™αžΆαž€αžΆαžŸαžŠαŸαž˜αžΆαž“αž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž·αž‘αŸ’αž™αžΆαžŸαžΆαžŸαŸ’αžαŸ’αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαŸ” + +NumPy αž‚αžΊαž‡αžΆ library αžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž·αž‘αŸ’αž™αžΆαžŸαžΆαžŸαŸ’αžαŸ’αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž€αŸ’αž“αž»αž„ PythonαŸ” αžœαžΆαž•αŸ’αžαž›αŸ‹αž“αžΌαžœ multi-dimensional array αžŠαŸ‚αž›αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž›αŸ’αž’ αž“αž·αž„αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ arrays αŸ” + +αžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αž–αŸαž›αž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎ vscode αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αžΆαž”αŸ‹αž–αžΈαž–αŸαž›αž“αŸαŸ‡αžαž‘αŸ…αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αžŽαŸ‚αž“αžΆαŸ†αž²αŸ’αž™αž”αŸ’αžšαžΎ Jupyter NotebookαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎ jupyter notebook αž™αžΎαž„αž”αž‰αŸ’αž…αžΌαž› [anaconda](https://www.anaconda.com/)αŸ” αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎ anaconda, package αžŠαŸ‚αž›αž›αŸ’αž”αžΈαž“αžΉαž„αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž αžΎαž™αŸ” + +```sh +asabeneh@Asabeneh:~/Desktop/30DaysOfPython$ pip install numpy +``` + +## Importing NumPy + +αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎ Jupyter notebook αž”αžΎαž…αžΌαž›αž…αž·αžαŸ’αžαžœαžΆ [jupyter notebook](https://github.com/Asabeneh/data-science-for-everyone/blob/master/numpy/numpy.ipynb) + +```py + # How to import numpy + import numpy as np + # How to check the version of the numpy package + print('numpy:', np.__version__) + # Checking the available methods + print(dir(np)) +``` + +## Creating numpy array using + +### Creating int numpy arrays + +```py + # Creating python List + python_list = [1,2,3,4,5] + + # Checking data types + print('Type:', type (python_list)) # + # + print(python_list) # [1, 2, 3, 4, 5] + + two_dimensional_list = [[0,1,2], [3,4,5], [6,7,8]] + + print(two_dimensional_list) # [[0, 1, 2], [3, 4, 5], [6, 7, 8]] + + # Creating Numpy(Numerical Python) array from python list + + numpy_array_from_list = np.array(python_list) + print(type (numpy_array_from_list)) # + print(numpy_array_from_list) # array([1, 2, 3, 4, 5]) +``` + +### Creating float numpy arrays + +αž”αž„αŸ’αž€αžΎαž float numpy array αž–αžΈ list αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ parameter float + +```py + # Python list + python_list = [1,2,3,4,5] + + numy_array_from_list2 = np.array(python_list, dtype=float) + print(numy_array_from_list2) # array([1., 2., 3., 4., 5.]) +``` + +### Creating boolean numpy arrays + +αž”αž„αŸ’αž€αžΎαž boolean numpy array αž–αžΈ list + +```py + numpy_bool_array = np.array([0, 1, -1, 0, 0], dtype=bool) + print(numpy_bool_array) # array([False, True, True, False, False]) +``` + +### Creating multidimensional array using numpy + +Numpy array αž’αžΆαž…αž˜αžΆαž“αž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αž‡αž½αžšαžˆαžšαž“αž·αž„αžŠαŸαž€ + +```py + two_dimensional_list = [[0,1,2], [3,4,5], [6,7,8]] + numpy_two_dimensional_list = np.array(two_dimensional_list) + print(type (numpy_two_dimensional_list)) + print(numpy_two_dimensional_list) +``` + +```sh + + [[0 1 2] + [3 4 5] + [6 7 8]] +``` + +### Converting numpy array to list + +αž”αŸ’αžαžΌαžš numpy αž‘αŸ… list + +```python +# We can always convert an array back to a python list using tolist(). +np_to_list = numpy_array_from_list.tolist() +print(type (np_to_list)) +print('one dimensional array:', np_to_list) +print('two dimensional array: ', numpy_two_dimensional_list.tolist()) +``` + +```sh + + one dimensional array: [1, 2, 3, 4, 5] + two dimensional array: [[0, 1, 2], [3, 4, 5], [6, 7, 8]] +``` + +### Creating numpy array from tuple + +αž”αž„αŸ’αž€αžΎαž numpy array αž–αžΈ tuple + +```py +# Numpy array from tuple +# Creating tuple in Python +python_tuple = (1,2,3,4,5) +print(type (python_tuple)) # +print('python_tuple: ', python_tuple) # python_tuple: (1, 2, 3, 4, 5) + +numpy_array_from_tuple = np.array(python_tuple) +print(type (numpy_array_from_tuple)) # +print('numpy_array_from_tuple: ', numpy_array_from_tuple) # numpy_array_from_tuple: [1 2 3 4 5] +``` + +### Shape of numpy array + +Shape method αž•αŸ’αžαž›αŸ‹αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒ array αž‡αžΆ tupleαŸ” αž‘αžΈαž˜αž½αž™αž‚αžΊαž‡αž½αžšαžˆαžš αž“αž·αž„αž‘αžΈαž–αžΈαžšαž‚αžΊαž‡αž½αžšαžŠαŸαž€αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎ array αž˜αžΆαž“αžαŸ‚αž˜αž½αž™ dimension αžœαžΆαž“αžΉαž„αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž‘αŸ†αž αŸ† array αŸ” + +```py + nums = np.array([1, 2, 3, 4, 5]) + print(nums) + print('shape of nums: ', nums.shape) + print(numpy_two_dimensional_list) + print('shape of numpy_two_dimensional_list: ', numpy_two_dimensional_list.shape) + three_by_four_array = np.array([[0, 1, 2, 3], + [4,5,6,7], + [8,9,10, 11]]) + print(three_by_four_array.shape) +``` + +```sh + [1 2 3 4 5] + shape of nums: (5,) + [[0 1 2] + [3 4 5] + [6 7 8]] + shape of numpy_two_dimensional_list: (3, 3) + (3, 4) +``` + +### Data type of numpy array + +αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™: str, int, float, complex, bool, list, None + +```py +int_lists = [-3, -2, -1, 0, 1, 2,3] +int_array = np.array(int_lists) +float_array = np.array(int_lists, dtype=float) + +print(int_array) +print(int_array.dtype) +print(float_array) +print(float_array.dtype) +``` + +```sh + [-3 -2 -1 0 1 2 3] + int64 + [-3. -2. -1. 0. 1. 2. 3.] + float64 +``` + +### Size of a numpy array + +αž€αŸ’αž“αž»αž„ numpy αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΉαž„αž…αŸ†αž“αž½αž“αž“αŸƒαž’αžΆαžαŸ’αžšαžΆαž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈ array numpy αž™αžΎαž„αž”αŸ’αžšαžΎ sizeαŸ” + +```py +numpy_array_from_list = np.array([1, 2, 3, 4, 5]) +two_dimensional_list = np.array([[0, 1, 2], + [3, 4, 5], + [6, 7, 8]]) + +print('The size:', numpy_array_from_list.size) # 5 +print('The size:', two_dimensional_list.size) # 3 + +``` + +```sh + The size: 5 + The size: 9 +``` + +## Mathematical Operation using numpy + +NumPy array αž˜αž·αž“αžŠαžΌαž… python listαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Python list αž™αžΎαž„αžαŸ’αžšαžΌαžœ loop αžαžΆαž˜αžšαž™αŸˆαž’αžαŸ’αžαž”αž‘ αž”αŸ‰αž»αž“αŸ’αžαŸ‚ numpy αž’αžΆαž…αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αžœαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαžŽαžΆαž˜αž½αž™αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“ looping αŸ” +αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆ: + +- Addition (+) αž”αžΌαž€ +- Subtraction (-) αžŠαž€ +- Multiplication (\*) αž‚αž»αžŽ +- Division (/) αž…αŸ‚αž€ +- Modules (%) αžšαž€αžŸαŸ†αžŽαž›αŸ‹ +- Floor Division(//) αž”αž„αŸ’αž€αžαŸ‹ +- Exponential(\*\*) αžŸαŸ’αžœαžΆαž™αž‚αž»αžŽ + +### Addition + +```py +# Mathematical Operation +# Addition +numpy_array_from_list = np.array([1, 2, 3, 4, 5]) +print('original array: ', numpy_array_from_list) +ten_plus_original = numpy_array_from_list + 10 +print(ten_plus_original) + +``` + +```sh + original array: [1 2 3 4 5] + [11 12 13 14 15] +``` + +### Subtraction + +```python +# Subtraction +numpy_array_from_list = np.array([1, 2, 3, 4, 5]) +print('original array: ', numpy_array_from_list) +ten_minus_original = numpy_array_from_list - 10 +print(ten_minus_original) +``` + +```sh + original array: [1 2 3 4 5] + [-9 -8 -7 -6 -5] +``` + +### Multiplication + +```python +# Multiplication +numpy_array_from_list = np.array([1, 2, 3, 4, 5]) +print('original array: ', numpy_array_from_list) +ten_times_original = numpy_array_from_list * 10 +print(ten_times_original) +``` + +```sh + original array: [1 2 3 4 5] + [10 20 30 40 50] +``` + +### Division + +```python +# Division +numpy_array_from_list = np.array([1, 2, 3, 4, 5]) +print('original array: ', numpy_array_from_list) +ten_times_original = numpy_array_from_list / 10 +print(ten_times_original) +``` + +```sh + original array: [1 2 3 4 5] + [0.1 0.2 0.3 0.4 0.5] +``` + +### Modulus + +```python +# Modulus; Finding the remainder +numpy_array_from_list = np.array([1, 2, 3, 4, 5]) +print('original array: ', numpy_array_from_list) +ten_times_original = numpy_array_from_list % 3 +print(ten_times_original) +``` + +```sh + original array: [1 2 3 4 5] + [1 2 0 1 2] +``` + +### Floor Division + +```py +# Floor division: the division result without the remainder +numpy_array_from_list = np.array([1, 2, 3, 4, 5]) +print('original array: ', numpy_array_from_list) +ten_times_original = numpy_array_from_list // 10 +print(ten_times_original) +``` + +### Exponential + +```py +# Exponential is finding some number the power of another: +numpy_array_from_list = np.array([1, 2, 3, 4, 5]) +print('original array: ', numpy_array_from_list) +ten_times_original = numpy_array_from_list ** 2 +print(ten_times_original) +``` + +```sh + original array: [1 2 3 4 5] + [ 1 4 9 16 25] +``` + +## Checking data types + +```py +#Int, Float numbers +numpy_int_arr = np.array([1,2,3,4]) +numpy_float_arr = np.array([1.1, 2.0,3.2]) +numpy_bool_arr = np.array([-3, -2, 0, 1,2,3], dtype='bool') + +print(numpy_int_arr.dtype) +print(numpy_float_arr.dtype) +print(numpy_bool_arr.dtype) +``` + +```sh + int64 + float64 + bool +``` + +### Converting types + +αž™αžΎαž„αž’αžΆαž…αž”αž˜αŸ’αž›αŸ‚αž„αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸƒ array numpy + +1. Int αž‘αŸ… Float + +```py +numpy_int_arr = np.array([1,2,3,4], dtype = 'float') +numpy_int_arr +``` + + array([1., 2., 3., 4.]) + +2. Float αž‘αŸ… Int + +```py +numpy_int_arr = np.array([1., 2., 3., 4.], dtype = 'int') +numpy_int_arr +``` + +```sh + array([1, 2, 3, 4]) +``` + +3. Int αž‘αŸ… boolean + +```py +np.array([-3, -2, 0, 1,2,3], dtype='bool') + +``` + +```sh + array([ True, True, False, True, True, True]) +``` + +4. Int αž‘αŸ… str + +```py +numpy_float_list.astype('int').astype('str') +``` + +```sh + array(['1', '2', '3'], dtype=' + [[1 2 3] + [4 5 6] + [7 8 9]] + Shape: (3, 3) + Size: 9 + Data type: int64 +``` + +### Getting items from a numpy array + +```py +# 2 Dimension Array +two_dimension_array = np.array([[1,2,3],[4,5,6], [7,8,9]]) +first_row = two_dimension_array[0] +second_row = two_dimension_array[1] +third_row = two_dimension_array[2] +print('First row:', first_row) +print('Second row:', second_row) +print('Third row: ', third_row) +``` + +```sh + First row: [1 2 3] + Second row: [4 5 6] + Third row: [7 8 9] +``` + +```py +first_column= two_dimension_array[:,0] +second_column = two_dimension_array[:,1] +third_column = two_dimension_array[:,2] +print('First column:', first_column) +print('Second column:', second_column) +print('Third column: ', third_column) +print(two_dimension_array) + +``` + +```sh + First column: [1 4 7] + Second column: [2 5 8] + Third column: [3 6 9] + [[1 2 3] + [4 5 6] + [7 8 9]] +``` + +## Slicing Numpy array + +Slicing αž€αŸ’αž“αž»αž„ numpy αžŸαŸ’αžšαžŠαŸ€αž„ slicing αž€αŸ’αž“αž»αž„ python list + +```py +two_dimension_array = np.array([[1,2,3],[4,5,6], [7,8,9]]) +first_two_rows_and_columns = two_dimension_array[0:2, 0:2] +print(first_two_rows_and_columns) +``` + +```sh + [[1 2] + [4 5]] +``` + +### How to reverse the rows and the whole array? + +αžαžΎαž’αŸ’αžœαžΎαžŠαžΌαž…αž˜αŸ’αžαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαž”αž˜αŸ’αž›αŸ‚αž„αž‡αž½αžšαžˆαžšαž“αž·αž„ array αž‘αžΆαŸ†αž„αž˜αžΌαž›? + +```py +two_dimension_array[::] +``` + +```sh + array([[1, 2, 3], + [4, 5, 6], + [7, 8, 9]]) +``` + +### Reverse the row and column positions + +αž”αŸ’αžαžΌαžšαž‡αž½αžšαžˆαžšαž“αž·αž„αžŠαŸαž€αž’αŸ„αž™αž•αŸ’αž‘αž»αž™αž‚αŸ’αž“αžΆ + +```py + two_dimension_array = np.array([[1,2,3],[4,5,6], [7,8,9]]) + two_dimension_array[::-1,::-1] +``` + +```sh + array([[9, 8, 7], + [6, 5, 4], + [3, 2, 1]]) +``` + +## How to represent missing values ? + +αžšαž”αŸ€αž”αžαŸ†αžŽαžΆαž„αžαž˜αŸ’αž›αŸƒαžŠαŸ‚αž›αž”αžΆαžαŸ‹αž”αž„αŸ‹? + +```python + print(two_dimension_array) + two_dimension_array[1,1] = 55 + two_dimension_array[1,2] =44 + print(two_dimension_array) +``` + +```sh + [[1 2 3] + [4 5 6] + [7 8 9]] + [[ 1 2 3] + [ 4 55 44] + [ 7 8 9]] +``` + +```py + # Numpy Zeroes + # numpy.zeros(shape, dtype=float, order='C') + numpy_zeroes = np.zeros((3,3),dtype=int,order='C') + numpy_zeroes +``` + +```sh + array([[0, 0, 0], + [0, 0, 0], + [0, 0, 0]]) +``` + +```py +# Numpy Zeroes +numpy_ones = np.ones((3,3),dtype=int,order='C') +print(numpy_ones) +``` + +```sh + [[1 1 1] + [1 1 1] + [1 1 1]] +``` + +```py +twoes = numpy_ones * 2 +``` + +```py +# Reshape +# numpy.reshape(), numpy.flatten() +first_shape = np.array([(1,2,3), (4,5,6)]) +print(first_shape) +reshaped = first_shape.reshape(3,2) +print(reshaped) + +``` + +```sh + [[1 2 3] + [4 5 6]] + [[1 2] + [3 4] + [5 6]] +``` + +```py +flattened = reshaped.flatten() +flattened +``` + +```sh + array([1, 2, 3, 4, 5, 6]) +``` + +```py + ## Horitzontal Stack + np_list_one = np.array([1,2,3]) + np_list_two = np.array([4,5,6]) + + print(np_list_one + np_list_two) + + print('Horizontal Append:', np.hstack((np_list_one, np_list_two))) +``` + +```sh + [5 7 9] + Horizontal Append: [1 2 3 4 5 6] +``` + +```py + ## Vertical Stack + print('Vertical Append:', np.vstack((np_list_one, np_list_two))) +``` + +```sh + Vertical Append: [[1 2 3] + [4 5 6]] +``` + +#### Generating Random Numbers + +αž€αžΆαžšαž”αž„αŸ’αžαžΎαžαž›αŸαžαžŠαŸ„αž™ random + +```py + # Generate a random float number + random_float = np.random.random() + random_float +``` + +```sh + 0.018929887384753874 +``` + +```py + # Generate a random float number + random_floats = np.random.random(5) + random_floats +``` + +```sh + array([0.26392192, 0.35842215, 0.87908478, 0.41902195, 0.78926418]) +``` + +```py + # Generating a random integers between 0 and 10 + + random_int = np.random.randint(0, 11) + random_int +``` + +```sh + 4 +``` + +```py + # Generating a random integers between 2 and 11, and creating a one row array + random_int = np.random.randint(2,10, size=4) + random_int +``` + +```sh + array([8, 8, 8, 2]) +``` + +```py + # Generating a random integers between 0 and 10 + random_int = np.random.randint(2,10, size=(3,3)) + random_int +``` + +```sh + array([[3, 5, 3], + [7, 3, 6], + [2, 3, 3]]) +``` + +### Generationg random numbers + +```py + # np.random.normal(mu, sigma, size) + normal_array = np.random.normal(79, 15, 80) + normal_array + +``` + +```sh + array([ 89.49990595, 82.06056961, 107.21445842, 38.69307086, + 47.85259157, 93.07381061, 76.40724259, 78.55675184, + 72.17358173, 47.9888899 , 65.10370622, 76.29696568, + 95.58234254, 68.14897213, 38.75862686, 122.5587927 , + 67.0762565 , 95.73990864, 81.97454563, 92.54264805, + 59.37035153, 77.76828101, 52.30752166, 64.43109931, + 62.63695351, 90.04616138, 75.70009094, 49.87586877, + 80.22002414, 68.56708848, 76.27791052, 67.24343975, + 81.86363935, 78.22703433, 102.85737041, 65.15700341, + 84.87033426, 76.7569997 , 64.61321853, 67.37244562, + 74.4068773 , 58.65119655, 71.66488727, 53.42458179, + 70.26872028, 60.96588544, 83.56129414, 72.14255326, + 81.00787609, 71.81264853, 72.64168853, 86.56608717, + 94.94667321, 82.32676973, 70.5165446 , 85.43061003, + 72.45526212, 87.34681775, 87.69911217, 103.02831489, + 75.28598596, 67.17806893, 92.41274447, 101.06662611, + 87.70013935, 70.73980645, 46.40368207, 50.17947092, + 61.75618542, 90.26191397, 78.63968639, 70.84550744, + 88.91826581, 103.91474733, 66.3064638 , 79.49726264, + 70.81087439, 83.90130623, 87.58555972, 59.95462521]) +``` + +## Numpy and Statistics + +```py +import matplotlib.pyplot as plt +import seaborn as sns +sns.set() +plt.hist(normal_array, color="grey", bins=50) +``` + +```sh + (array([2., 0., 0., 0., 1., 2., 2., 0., 2., 0., 0., 1., 2., 2., 1., 4., 3., + 4., 2., 7., 2., 2., 5., 4., 2., 4., 3., 2., 1., 5., 3., 0., 3., 2., + 1., 0., 0., 1., 3., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1.]), + array([ 38.69307086, 40.37038529, 42.04769973, 43.72501417, + 45.4023286 , 47.07964304, 48.75695748, 50.43427191, + 52.11158635, 53.78890079, 55.46621523, 57.14352966, + 58.8208441 , 60.49815854, 62.17547297, 63.85278741, + 65.53010185, 67.20741628, 68.88473072, 70.56204516, + 72.23935959, 73.91667403, 75.59398847, 77.27130291, + 78.94861734, 80.62593178, 82.30324622, 83.98056065, + 85.65787509, 87.33518953, 89.01250396, 90.6898184 , + 92.36713284, 94.04444727, 95.72176171, 97.39907615, + 99.07639058, 100.75370502, 102.43101946, 104.1083339 , + 105.78564833, 107.46296277, 109.14027721, 110.81759164, + 112.49490608, 114.17222052, 115.84953495, 117.52684939, + 119.20416383, 120.88147826, 122.5587927 ]), + ) +``` + +### Matrix in numpy + +```py + +four_by_four_matrix = np.matrix(np.ones((4,4), dtype=float)) +``` + +```py +four_by_four_matrix +``` + +```sh +matrix([[1., 1., 1., 1.], + [1., 1., 1., 1.], + [1., 1., 1., 1.], + [1., 1., 1., 1.]]) +``` + +```py +np.asarray(four_by_four_matrix)[2] = 2 +four_by_four_matrix +``` + +```sh + +matrix([[1., 1., 1., 1.], + [1., 1., 1., 1.], + [2., 2., 2., 2.], + [1., 1., 1., 1.]]) +``` + +### Numpy numpy.arange() + +#### What is Arrange? + +αž‡αž½αž“αž€αžΆαž› αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αž„αŸ’αž€αžΎαžαžαž˜αŸ’αž›αŸƒ αžŠαŸ‚αž›αž˜αžΆαž“αž…αž“αŸ’αž›αŸ„αŸ‡ interval αžŽαžΆαž˜αž½αž™αŸ” αž§αž‘αžΆαž αžšαžŽαŸ, αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αž„αŸ’αž€αžΎαžαžαž˜αŸ’αž›αŸƒαž–αžΈ 1 αžŠαž›αŸ‹ 10; αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎ numpy.arange() function + +```py +# creating list using range(starting, stop, step) +lst = range(0, 11, 2) +lst +``` + +```python +range(0, 11, 2) +``` + +```python +for l in lst: + print(l) +``` + +```sh 0 + 2 + 4 + 6 + 8 + 10 +``` + +```py +# Similar to range arange numpy.arange(start, stop, step) +whole_numbers = np.arange(0, 20, 1) +whole_numbers +``` + +```sh +array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19]) +``` + +```py +natural_numbers = np.arange(1, 20, 1) +natural_numbers +``` + +```py +odd_numbers = np.arange(1, 20, 2) +odd_numbers +``` + +```sh + array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]) +``` + +```py +even_numbers = np.arange(2, 20, 2) +even_numbers +``` + +```sh + array([ 2, 4, 6, 8, 10, 12, 14, 16, 18]) +``` + +### Creating sequence of numbers using linspace + +```py +# numpy.linspace() +# numpy.logspace() in Python with Example +# For instance, it can be used to create 10 values from 1 to 5 evenly spaced. +np.linspace(1.0, 5.0, num=10) +``` + +```sh + array([1. , 1.44444444, 1.88888889, 2.33333333, 2.77777778, + 3.22222222, 3.66666667, 4.11111111, 4.55555556, 5. ]) +``` + +```py +# not to include the last value in the interval +np.linspace(1.0, 5.0, num=5, endpoint=False) +``` + +``` +array([1. , 1.8, 2.6, 3.4, 4.2]) +``` + +```py +# LogSpace +# LogSpace returns even spaced numbers on a log scale. Logspace has the same parameters as np.linspace. + +# Syntax: + +# numpy.logspace(start, stop, num, endpoint) + +np.logspace(2, 4.0, num=4) +``` + +```sh + +array([ 100. , 464.15888336, 2154.43469003, 10000. ]) +``` + +```py +# to check the size of an array +x = np.array([1,2,3], dtype=np.complex128) +``` + +```py +x +``` + +```sh + array([1.+0.j, 2.+0.j, 3.+0.j]) +``` + +```py +x.itemsize +``` + +```sh +16 +``` + +```py +# indexing and Slicing NumPy Arrays in Python +np_list = np.array([(1,2,3), (4,5,6)]) +np_list + +``` + +```sh + array([[1, 2, 3], + [4, 5, 6]]) +``` + +```py +print('First row: ', np_list[0]) +print('Second row: ', np_list[1]) + +``` + +```sh + + First row: [1 2 3] + Second row: [4 5 6] +``` + +```p +print('First column: ', np_list[:,0]) +print('Second column: ', np_list[:,1]) +print('Third column: ', np_list[:,2]) + +``` + +```sh + First column: [1 4] + Second column: [2 5] + Third column: [3 6] +``` + +### NumPy Statistical Functions with Example + +NumPy αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€ minimum, maximum, mean, median, percentile,standard deviation αž“αž·αž„ variance, etc αž–αžΈαž…αŸ†αžŽαž»αž…αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ array αŸ” +Functions αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž“αŸ’αž™αž›αŸ‹αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ βˆ’ +Statistical function +Numpy αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž–αžΆαž€αŸ‹αžŠαŸ„αž™ statistical function αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ + +- Numpy Functions + - Min np.min() + - Max np.max() + - Mean np.mean() + - Median np.median() + - Varience + - Percentile + - Standard deviation np.std() + +```python +np_normal_dis = np.random.normal(5, 0.5, 100) +np_normal_dis +## min, max, mean, median, sd +print('min: ', two_dimension_array.min()) +print('max: ', two_dimension_array.max()) +print('mean: ',two_dimension_array.mean()) +# print('median: ', two_dimension_array.median()) +print('sd: ', two_dimension_array.std()) +``` + + min: 1 + max: 55 + mean: 14.777777777777779 + sd: 18.913709183069525 + +```python +min: 1 +max: 55 +mean: 14.777777777777779 +sd: 18.913709183069525 +``` + +```python +print(two_dimension_array) +print('Column with minimum: ', np.amin(two_dimension_array,axis=0)) +print('Column with maximum: ', np.amax(two_dimension_array,axis=0)) +print('=== Row ==') +print('Row with minimum: ', np.amin(two_dimension_array,axis=1)) +print('Row with maximum: ', np.amax(two_dimension_array,axis=1)) +``` + + [[ 1 2 3] + [ 4 55 44] + [ 7 8 9]] + Column with minimum: [1 2 3] + Column with maximum: [ 7 55 44] + === Row == + Row with minimum: [1 4 7] + Row with maximum: [ 3 55 9] + +### How to create repeating sequences? + +```python +a = [1,2,3] + +# Repeat whole of 'a' two times +print('Tile: ', np.tile(a, 2)) + +# Repeat each element of 'a' two times +print('Repeat: ', np.repeat(a, 2)) + +``` + + Tile: [1 2 3 1 2 3] + Repeat: [1 1 2 2 3 3] + +### How to generate random numbers? + +```python +# One random number between [0,1) +one_random_num = np.random.random() +one_random_in = np.random +print(one_random_num) +``` + + 0.6149403282678213 + +```python +0.4763968133790438 +``` + + 0.4763968133790438 + +```python +# Random numbers between [0,1) of shape 2,3 +r = np.random.random(size=[2,3]) +print(r) +``` + + [[0.13031737 0.4429537 0.1129527 ] + [0.76811539 0.88256594 0.6754075 ]] + +```python +print(np.random.choice(['a', 'e', 'i', 'o', 'u'], size=10)) +``` + + ['u' 'o' 'o' 'i' 'e' 'e' 'u' 'o' 'u' 'a'] + +```python +['i' 'u' 'e' 'o' 'a' 'i' 'e' 'u' 'o' 'i'] +``` + + ['iueoaieuoi'] + +```python +## Random numbers between [0, 1] of shape 2, 2 +rand = np.random.rand(2,2) +rand +``` + + array([[0.97992598, 0.79642484], + [0.65263629, 0.55763145]]) + +```python +rand2 = np.random.randn(2,2) +rand2 + +``` + + array([[ 1.65593322, -0.52326621], + [ 0.39071179, -2.03649407]]) + +```python +# Random integers between [0, 10) of shape 2,5 +rand_int = np.random.randint(0, 10, size=[5,3]) +rand_int +``` + + array([[0, 7, 5], + [4, 1, 4], + [3, 5, 3], + [4, 3, 8], + [4, 6, 7]]) + +```py +from scipy import stats +np_normal_dis = np.random.normal(5, 0.5, 1000) # mean, standard deviation, number of samples +np_normal_dis +## min, max, mean, median, sd +print('min: ', np.min(np_normal_dis)) +print('max: ', np.max(np_normal_dis)) +print('mean: ', np.mean(np_normal_dis)) +print('median: ', np.median(np_normal_dis)) +print('mode: ', stats.mode(np_normal_dis)) +print('sd: ', np.std(np_normal_dis)) +``` + +```sh + + min: 3.557811005458804 + max: 6.876317743643499 + mean: 5.035832048106663 + median: 5.020161980441937 + mode: ModeResult(mode=array([3.55781101]), count=array([1])) + sd: 0.489682424165213 + +``` + +```python +plt.hist(np_normal_dis, color="grey", bins=21) +plt.show() +``` + +![png](../test_files/test_121_0.png) + +```python +# numpy.dot(): Dot Product in Python using Numpy +# Dot Product +# Numpy is powerful library for matrices computation. For instance, you can compute the dot product with np.dot + +# Syntax + +# numpy.dot(x, y, out=None) +``` + +### Linear Algebra + +1. Dot Product + +```python +## Linear algebra +### Dot product: product of two arrays +f = np.array([1,2,3]) +g = np.array([4,5,3]) +### 1*4+2*5 + 3*6 +np.dot(f, g) # 23 +``` + +### NumPy Matrix Multiplication with np.matmul() + +```python +### Matmul: matruc product of two arrays +h = [[1,2],[3,4]] +i = [[5,6],[7,8]] +### 1*5+2*7 = 19 +np.matmul(h, i) +``` + +```sh + array([[19, 22], + [43, 50]]) + +``` + +```py +## Determinant 2*2 matrix +### 5*8-7*6np.linalg.det(i) +``` + +```python +np.linalg.det(i) +``` + + -1.999999999999999 + +```python +Z = np.zeros((8,8)) +Z[1::2,::2] = 1 +Z[::2,1::2] = 1 +``` + +```python +Z +``` + + array([[0., 1., 0., 1., 0., 1., 0., 1.], + [1., 0., 1., 0., 1., 0., 1., 0.], + [0., 1., 0., 1., 0., 1., 0., 1.], + [1., 0., 1., 0., 1., 0., 1., 0.], + [0., 1., 0., 1., 0., 1., 0., 1.], + [1., 0., 1., 0., 1., 0., 1., 0.], + [0., 1., 0., 1., 0., 1., 0., 1.], + [1., 0., 1., 0., 1., 0., 1., 0.]]) + +```python +new_list = [ x + 2 for x in range(0, 11)] +``` + +```python +new_list +``` + + [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + +```python +[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +``` + + [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + +```python +np_arr = np.array(range(0, 11)) +np_arr + 2 +``` + +array([ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) + +αž™αžΎαž„αž”αŸ’αžšαžΎ linear equation αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž˜αžΆαž“ linear relationshipαŸ” αžŸαžΌαž˜αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜: + +```python +temp = np.array([1,2,3,4,5]) +pressure = temp * 2 + 5 +pressure +``` + +array([ 7, 9, 11, 13, 15]) + +```python +plt.plot(temp,pressure) +plt.xlabel('Temperature in oC') +plt.ylabel('Pressure in atm') +plt.title('Temperature vs Pressure') +plt.xticks(np.arange(0, 6, step=0.5)) +plt.show() +``` + +![png](../test_files/test_141_0.png) + +αžŠαžΎαž˜αŸ’αž”αžΈαž‚αžΌαžš Gaussian normal distribution αžŠαŸ„αž™αž”αŸ’αžšαžΎ numpyαŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αžαžΆαž„αž€αŸ’αžšαŸ„αž˜, numpy αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž›αŸαžαžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαžΆαž€αžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™, αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš mean(mu), sigma(standard deviation), mumber of data points. + +```python +mu = 28 +sigma = 15 +samples = 100000 + +x = np.random.normal(mu, sigma, samples) +ax = sns.distplot(x); +ax.set(xlabel="x", ylabel='y') +plt.show() +``` + +![png](../test_files/test_143_0.png) + +[<< Day 23](../23_Day_Virtual_environment/23_virtual_environment.md) | [Day 25 >>](../25_Day_Pandas/25_pandas.md) diff --git a/Khmer/25_Day_Pandas/25_pandas.md b/Khmer/25_Day_Pandas/25_pandas.md new file mode 100644 index 000000000..f1f65e8b3 --- /dev/null +++ b/Khmer/25_Day_Pandas/25_pandas.md @@ -0,0 +1,1215 @@ +
+

30 Days Of Python: Day 25 - Pandas

+
+ + + + Twitter Follow + + + Author: + Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 24](../24_Day_Statistics/24_statistics.md) | [Day 26 >>](../26_Day_Python_web/26_python_web.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 25](#-day-25) + - [Pandas](#pandas) + - [αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Pandas](#installing-pandas) + - [αž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž› Pandas](#importing-pandas) + - [αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ "Pandas" αž‡αžΆαž˜αž½αž™αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜](#creating-pandas-series-with-default-index) + - [αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ "Pandas" αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“](#creating--pandas-series-with-custom-index) + - [αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ "Pandas" αž–αžΈαžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜](#creating-pandas-series-from-a-dictionary) + - [αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ "Pandas" ថេរ](#creating-a-constant-pandas-series) + - [αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ "Pandas" αžŠαŸ„αž™αž”αŸ’αžšαžΎ Linspace](#creating-a--pandas-series-using-linspace) + - [DataFrames](#dataframes) + - [αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž "DataFrames" αž–αžΈαž”αž‰αŸ’αž‡αžΈαž”αž‰αŸ’αž‡αžΈ](#creating-dataframes-from-list-of-lists) + - [αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž "DataFrames" αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜](#creating-dataframe-using-dictionary) + - [αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž DataFrames αž–αžΈαž”αž‰αŸ’αž‡αžΈαžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜](#creating-dataframes-from-a-list-of-dictionaries) + - [αž€αžΆαžšαž’αžΆαž“αž―αž€αžŸαžΆαžš CSV αžŠαŸ„αž™αž”αŸ’αžšαžΎ Pandas](#reading-csv-file-using-pandas) + - [αž€αžΆαžšαžšαž»αž€αžšαž€αž‘αž·αž“αŸ’αž“αž“αŸαž™](#data-exploration) + - [αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚ DataFrame](#modifying-a-dataframe) + - [αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž DataFrame](#creating-a-dataframe) + - [αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈαŸ”](#adding-a-new-column) + - [αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αžαž˜αŸ’αž›αŸƒαž‡αž½αžšαžˆαžš](#modifying-column-values) + - [αž€αžΆαžšαž’αŸ’αžœαžΎαž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž‡αž½αžšαžˆαžš DataFrame](#formating-dataframe-columns) + - [αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸƒαžαž˜αŸ’αž›αŸƒαž‡αž½αžšαžˆαžš](#checking-data-types-of-column-values) + - [αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž”αŸŠαžΌαž›αžΈαž“](#boolean-indexing) + - [Exercises: Day 25](#exercises-day-25) + +# πŸ“˜ Day 25 + +## Pandas + +Pandas αž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αž–αžŸαŸ‹ αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžšαžΎ αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Python αŸ” +Pandas αž”αž“αŸ’αžαŸ‚αž˜αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΌαž…αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž‡αžΆ *ស៊េរី* αž“αž·αž„ *αžŸαŸŠαž»αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™*αŸ” +Pandas αž•αŸ’αžαž›αŸ‹αž§αž”αž€αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαŸ€αž”αž…αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ– + +- αž€αŸ‚αž‘αž˜αŸ’αžšαž„αŸ‹ +- αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆ +- αžαž˜αŸ’αžšαŸ€αž” +- αž…αŸ†αžŽαž·αž +- αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ† +- αž€αžΆαžšαž€αžΆαžαŸ‹αž‘αŸ„αžŸαŸ” + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎ anaconda αž’αŸ’αž“αž€αž˜αž·αž“αž˜αžΆαž“αžŠαŸ†αž‘αžΎαž„ pandas αž‘αŸαŸ” + +### αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Pandas + +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Mac: +```py +pip install conda +conda install pandas +``` + +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Windows: +```py +pip install conda +pip install pandas +``` + +αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™ Pandas αž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎ *ស៊េរី* αž“αž·αž„ *DataFrames*αŸ” + +A *series* αž‚αžΊαž‡αžΆ *column* αž αžΎαž™ DataFrame αž‚αžΊαž‡αžΆ *αžαžΆαžšαžΆαž„αž–αž αž»αžœαž·αž˜αžΆαžαŸ’αžš* αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž”αžŽαŸ’αžαž»αŸ†αž“αŸƒ *series*αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈαž•αŸαž“αžŠαžΆ αž™αžΎαž„αž‚αž½αžšαž”αŸ’αžšαžΎ numpy αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž’αžΆαžšαŸαžœαž·αž˜αžΆαžαŸ’αžšαž˜αž½αž™ αž¬αž”αž‰αŸ’αž‡αžΈ python αŸ” +αžαŸ„αŸ‡αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžŸαŸŠαŸαžšαžΈαŸ– + +Names Pandas Series + +![pandas series](../images/pandas-series-1.png) + +Countries Series + +![pandas series](../images/pandas-series-2.png) + +Cities Series + +![pandas series](../images/pandas-series-3.png) + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αžŸαŸŠαŸαžšαžΈαž•αŸαž“αžŠαžΆαž‚αžΊαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž‡αž½αžšαžˆαžšαž˜αž½αž™αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž˜αžΆαž“αž‡αž½αžšαžˆαžšαž…αŸ’αžšαžΎαž“ αž™αžΎαž„αž”αŸ’αžšαžΎαžŸαŸŠαž»αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž•αŸαž“αžŠαžΆ DataFrames αŸ” + +αžαŸ„αŸ‡αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžŸαŸŠαž»αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž›αžΆαžƒαŸ’αž˜αž»αŸ†αž•αŸαž“αžŠαžΆαŸ– + +![Pandas data frame](../images/pandas-dataframe-1.png) + +αžŸαŸŠαž»αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αžΊαž‡αžΆαž”αžŽαŸ’αžαž»αŸ†αž“αŸƒαž‡αž½αžšαžŠαŸαž€ αž“αž·αž„αž‡αž½αžšαžˆαžšαŸ” αžŸαžΌαž˜αž˜αžΎαž›αžαžΆαžšαžΆαž„αžαžΆαž„αž€αŸ’αžšαŸ„αž˜; αžœαžΆαž˜αžΆαž“αž‡αž½αžšαžˆαžšαž…αŸ’αžšαžΎαž“αž›αžΎαžŸαž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎαŸ– + +![Pandas data frame](../images/pandas-dataframe-2.png) + +αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰αž–αžΈαžšαž”αŸ€αž”αž“αžΆαŸ†αž…αžΌαž›αž•αŸαž“αžŠαžΆ αž“αž·αž„αžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαž Series αž“αž·αž„ DataFrames αžŠαŸ„αž™αž”αŸ’αžšαžΎαž•αŸαž“αžŠαžΆ + +### αž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž› Pandas + +```python +import pandas as pd # importing pandas as pd +import numpy as np # importing numpy as np +``` + +### αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ Pandas αž‡αžΆαž˜αž½αž™αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ + +```python +nums = [1, 2, 3, 4,5] +s = pd.Series(nums) +print(s) +``` + +```sh + 0 1 + 1 2 + 2 3 + 3 4 + 4 5 + dtype: int64 +``` + +### αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ Pandas αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“ + +```python +nums = [1, 2, 3, 4, 5] +s = pd.Series(nums, index=[1, 2, 3, 4, 5]) +print(s) +``` + +```sh + 1 1 + 2 2 + 3 3 + 4 4 + 5 5 + dtype: int64 +``` + +```python +fruits = ['Orange','Banana','Mango'] +fruits = pd.Series(fruits, index=[1, 2, 3]) +print(fruits) +``` + +```sh + 1 Orange + 2 Banana + 3 Mango + dtype: object +``` + +### αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ Pandas αž–αžΈαžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜ + +```python +dct = {'name':'Asabeneh','country':'Finland','city':'Helsinki'} +``` + +```python +s = pd.Series(dct) +print(s) +``` + +```sh + name Asabeneh + country Finland + city Helsinki + dtype: object +``` + +### αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ Pandas ថេរ + +```python +s = pd.Series(10, index = [1, 2, 3]) +print(s) +``` + +```sh + 1 10 + 2 10 + 3 10 + dtype: int64 +``` + +### αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŸαŸŠαŸαžšαžΈ Pandas αžŠαŸ„αž™αž”αŸ’αžšαžΎ Linspace + +```python +s = pd.Series(np.linspace(5, 20, 10)) # linspace(starting, end, items) +print(s) +``` + +```sh + 0 5.000000 + 1 6.666667 + 2 8.333333 + 3 10.000000 + 4 11.666667 + 5 13.333333 + 6 15.000000 + 7 16.666667 + 8 18.333333 + 9 20.000000 + dtype: float64 +``` + +## DataFrames + +αžŸαŸŠαž»αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™ Pandas αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžαžΆαž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ” + +### αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž DataFrames αž–αžΈαž”αž‰αŸ’αž‡αžΈαžšαžΆαž™αž“αžΆαž˜ + +```python +data = [ + ['Asabeneh', 'Finland', 'Helsink'], + ['David', 'UK', 'London'], + ['John', 'Sweden', 'Stockholm'] +] +df = pd.DataFrame(data, columns=['Names','Country','City']) +print(df) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamesCountryCity
0AsabenehFinlandHelsink
1DavidUKLondon
2JohnSwedenStockholm
+ +### αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž DataFrame αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜ + +```python +data = {'Name': ['Asabeneh', 'David', 'John'], 'Country':[ + 'Finland', 'UK', 'Sweden'], 'City': ['Helsiki', 'London', 'Stockholm']} +df = pd.DataFrame(data) +print(df) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCity
0AsabenehFinlandHelsiki
1DavidUKLondon
2JohnSwedenStockholm
+ +### αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž DataFrames αž–αžΈαž”αž‰αŸ’αž‡αžΈαžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜ + +```python +data = [ + {'Name': 'Asabeneh', 'Country': 'Finland', 'City': 'Helsinki'}, + {'Name': 'David', 'Country': 'UK', 'City': 'London'}, + {'Name': 'John', 'Country': 'Sweden', 'City': 'Stockholm'}] +df = pd.DataFrame(data) +print(df) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCity
0AsabenehFinlandHelsinki
1DavidUKLondon
2JohnSwedenStockholm
+ +## αž€αžΆαžšαž’αžΆαž“αž―αž€αžŸαžΆαžš CSV αžŠαŸ„αž™αž”αŸ’αžšαžΎ Pandas + +αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αž―αž€αžŸαžΆαžš CSV αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡ αž€αž»αž„αžŸαžΌαž›/αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‚αžΊαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™αŸ– + +```sh +curl -O https://raw.githubusercontent.com/Asabeneh/30-Days-Of-Python/master/data/weight-height.csv +``` + +αžŠαžΆαž€αŸ‹αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž‘αžΆαž‰αž™αž€αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” + +```python +import pandas as pd + +df = pd.read_csv('weight-height.csv') +print(df) +``` + +### Data Exploration + +αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž’αžΆαž“αžαŸ‚ 5 αž‡αž½αžšαžŠαŸ†αž”αžΌαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎ head() + +```python +print(df.head()) # give five rows we can increase the number of rows by passing argument to the head() method +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GenderHeightWeight
0Male73.847017241.893563
1Male68.781904162.310473
2Male74.110105212.740856
3Male71.730978220.042470
4Male69.881796206.349801
+ +αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αžšαž»αž€αžšαž€αž•αž„αžŠαŸ‚αžšαž“αžΌαžœαž€αžΆαžšαž€αžαŸ‹αžαŸ’αžšαžΆαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸƒαžŸαŸŠαž»αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈ tail() αŸ” + +```python +print(df.tail()) # tails αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΆαŸ†αž‡αž½αžšαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž“αž‡αž½αžšαžŠαŸαž€αžŠαŸ„αž™αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž‘αŸ…αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš "tail" +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GenderHeightWeight
9995Female66.172652136.777454
9996Female67.067155170.867906
9997Female63.867992128.475319
9998Female69.034243163.852461
9999Female61.944246113.649103
+ +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž―αž€αžŸαžΆαžš csv αž˜αžΆαž“αž”αžΈαž‡αž½αžšαŸ– αž—αŸαž‘ αž€αž˜αŸ’αž–αžŸαŸ‹ αž“αž·αž„αž‘αž˜αŸ’αž„αž“αŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎ DataFrame αž“αžΉαž„αž˜αžΆαž“αž‡αž½αžšαžœαŸ‚αž„ αžœαžΆαž“αžΉαž„αž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαžΉαž„αž–αžΈαž‡αž½αžšαžˆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž αžΎαž™ αž™αžΎαž„β€‹αž‚αž½αžšβ€‹αž”αŸ’αžšαžΎβ€‹αžœαž·αž’αžΈβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αžŸαŸ’αž‚αžΆαž›αŸ‹β€‹αž€αžΌαž‘αž»αŸ†αŸ” αž™αžΎαž„αž˜αž·αž“αžŠαžΉαž„αž…αŸ†αž“αž½αž“αž‡αž½αžšαžŠαŸαž€αž‘αŸαŸ” αžαŸ„αŸ‡αž”αŸ’αžšαžΎαžŸαžΆαž…αŸ‹αž€αŸ’αžšαž€αžšαžΆαž„αŸ” + +```python +print(df.shape) # αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰ 10000 αž‡αž½αžšαž“αž·αž„αž‡αž½αžšαžˆαžšαž”αžΈ +``` + + (10000, 3) + +αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‡αž½αžšαžˆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‡αž½αžšαžˆαžšαŸ” + +```python +print(df.columns) +``` + + Index(['Gender', 'Height', 'Weight'], dtype='object') + +αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‡αž½αžšαžˆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž…αž‡αž½αžšαžˆαžš + +```python +heights = df['Height'] # αž₯αž‘αžΌαžœαž“αŸαŸ‡αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸŠαŸαžšαžΈ +``` + +```python +print(heights) +``` + +```sh + 0 73.847017 + 1 68.781904 + 2 74.110105 + 3 71.730978 + 4 69.881796 + ... + 9995 66.172652 + 9996 67.067155 + 9997 63.867992 + 9998 69.034243 + 9999 61.944246 + Name: Height, Length: 10000, dtype: float64 +``` + +```python +weights = df['Weight'] # αž₯αž‘αžΌαžœαž“αŸαŸ‡αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸŠαŸαžšαžΈ +``` + +```python +print(weights) +``` + +```sh + 0 241.893563 + 1 162.310473 + 2 212.740856 + 3 220.042470 + 4 206.349801 + ... + 9995 136.777454 + 9996 170.867906 + 9997 128.475319 + 9998 163.852461 + 9999 113.649103 + Name: Weight, Length: 10000, dtype: float64 +``` + +```python +print(len(heights) == len(weights)) +``` + + True + +αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš describe() αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžαž˜αŸ’αž›αŸƒαžŸαŸ’αžαž·αžαž·αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸƒαžŸαŸ†αžŽαž»αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” + +```python +print(heights.describe()) # αž•αŸ’αžαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŸαŸ’αžαž·αžαž·αž’αŸ†αž–αžΈαž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αž˜αŸ’αž–αžŸαŸ‹ + +```sh + count 10000.000000 + mean 66.367560 + std 3.847528 + min 54.263133 + 25% 63.505620 + 50% 66.318070 + 75% 69.174262 + max 78.998742 + Name: Height, dtype: float64 +``` + +```python +print(weights.describe()) +``` + +```sh + count 10000.000000 + mean 161.440357 + std 32.108439 + min 64.700127 + 25% 135.818051 + 50% 161.212928 + 75% 187.169525 + max 269.989699 + Name: Weight, dtype: float64 +``` + +```python +print(df.describe()) # αž–αž·αž–αžŽαŸŒαž“αžΆαž€αŸαž’αžΆαž…αž•αŸ’αžαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŸαŸ’αžαž·αžαž·αž–αžΈ dataFrame αž•αž„αžŠαŸ‚αžšαŸ” +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HeightWeight
count10000.00000010000.000000
mean66.367560161.440357
std3.84752832.108439
min54.26313364.700127
25%63.505620135.818051
50%66.318070161.212928
75%69.174262187.169525
max78.998742269.989699
+ +αžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„ describe() αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš info() αž€αŸαž•αŸ’αžαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαžŸαŸ†αžŽαž»αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αž„αžŠαŸ‚αžšαŸ” + +## Modifying a DataFrame + +αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚ DataFrameαŸ– + * αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž DataFrame αžαŸ’αž˜αžΈαŸ” + * αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈ αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αžœαžΆαž‘αŸ… DataFrame, + * αž™αžΎαž„αž’αžΆαž…αžŠαž€αž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž…αŸαž‰αž–αžΈ DataFrame, + * αž™αžΎαž„αž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ DataFrame, + * αž™αžΎαž„αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸƒαžαž˜αŸ’αž›αŸƒαž‡αž½αžšαžˆαžšαž€αŸ’αž“αž»αž„ DataFrame + +### Creating a DataFrame + +αžŠαžΌαž…αžšαžΆαž›αŸ‹αžŠαž„ αž‡αžΆαžŠαŸ†αž”αžΌαž„αž™αžΎαž„αž“αžΆαŸ†αž…αžΌαž›αž€αž‰αŸ’αž…αž”αŸ‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ” αž₯αž›αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž“αžΆαŸ†αž•αŸαž“αžŠαžΆ αž“αž·αž„ αž“αžΉαž˜αž—αžΈ αžŠαŸ‚αž›αž‡αžΆαž˜αž·αžαŸ’αžαž—αŸαž€αŸ’αžαž·αž›αŸ’αž’αž–αžΈαžšαž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž’αŸ’αž›αžΆαž”αŸ‹αž˜αžΆαž“αŸ” + +```python +import pandas as pd +import numpy as np +data = [ + {"Name": "Asabeneh", "Country":"Finland","City":"Helsinki"}, + {"Name": "David", "Country":"UK","City":"London"}, + {"Name": "John", "Country":"Sweden","City":"Stockholm"}] +df = pd.DataFrame(data) +print(df) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCity
0AsabenehFinlandHelsinki
1DavidUKLondon
2JohnSwedenStockholm
+ +αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαž‘αŸ… DataFrame αž‚αžΊαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž€αžΌαž“αžŸαŸ„αž‘αŸ…αžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜αŸ” + +αž‡αžΆαžŠαŸ†αž”αžΌαž„ αž…αžΌαžšαž™αžΎαž„αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαž˜αž»αž“αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž DataFrame αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž™αžΎαž„αž”αž„αŸ’αž€αžΎαž DataFrame αž™αžΎαž„αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αŸ‚αž”αŸ’αžšαŸ‚αžαž˜αŸ’αž›αŸƒαž‡αž½αžšαžˆαžš αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž‡αž½αžšαžˆαžšαŸ” + +### Adding a New Column + +αž…αžΌαžšαž™αžΎαž„αž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαž‘αž˜αŸ’αž„αž“αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ DataFrame + +```python +weights = [74, 78, 69] +df['Weight'] = weights +df +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCityWeight
0AsabenehFinlandHelsinki74
1DavidUKLondon78
2JohnSwedenStockholm69
+ +αž…αžΌαžšαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαž€αž˜αŸ’αž–αžŸαŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„ DataFrame αž•αž„αžŠαŸ‚αžšαŸ” + +```python +heights = [173, 175, 169] +df['Height'] = heights +print(df) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCityWeightHeight
0AsabenehFinlandHelsinki74173
1DavidUKLondon78175
2JohnSwedenStockholm69169
+ +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ DataFrame αžαžΆαž„αž›αžΎ αž™αžΎαž„αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈ αž‘αž˜αŸ’αž„αž“αŸ‹ αž“αž·αž„αž€αž˜αŸ’αž–αžŸαŸ‹αŸ” αž…αžΌαžšαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαž˜αž½αž™αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαžŠαŸ‚αž›αž αŸ…αžαžΆ BMI (αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž˜αŸ‰αžΆαžŸαžšαžΆαž„αž€αžΆαž™) αžŠαŸ„αž™αž‚αžŽαž“αžΆ BMI αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸ‹ αž“αž·αž„αž€αž˜αŸ’αž–αžŸαŸ‹αŸ” BMI αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αžŠαŸ„αž™αž€αž˜αŸ’αž–αžŸαŸ‹αž€αžΆαžšαŸ‰αŸ (αž‚αž·αžαž‡αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš) - αž‘αŸ†αž„αž“αŸ‹ / αž€αž˜αŸ’αž–αžŸαŸ‹ * αž€αž˜αŸ’αž–αžŸαŸ‹αŸ” + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž€αž˜αŸ’αž–αžŸαŸ‹αž‚αž·αžαž‡αžΆαžŸαž„αŸ‹αž‘αžΈαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž‚αž½αžšαžαŸ‚αž”αŸ’αžαžΌαžšαžœαžΆαž‘αŸ…αž‡αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ” αžαŸ„αŸ‡αž€αŸ‚αž”αŸ’αžšαŸ‚αž‡αž½αžšαž€αž˜αŸ’αž–αžŸαŸ‹αŸ” + +### αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αžαž˜αŸ’αž›αŸƒαž‡αž½αžšαžˆαžš + +```python +df['Height'] = df['Height'] * 0.01 +df +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCityWeightHeight
0AsabenehFinlandHelsinki741.73
1DavidUKLondon781.75
2JohnSwedenStockholm691.69
+ +```python +# αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΌαžŠαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαŸ’αž’αžΆαž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αžΆαž…αž‚αžŽαž“αžΆ bmi αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž›αŸαž +def calculate_bmi (): + weights = df['Weight'] + heights = df['Height'] + bmi = [] + for w,h in zip(weights, heights): + b = w/(h*h) + bmi.append(b) + return bmi + +bmi = calculate_bmi() + +``` + + +```python +df['BMI'] = bmi +df +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCityWeightHeightBMI
0AsabenehFinlandHelsinki741.7324.725183
1DavidUKLondon781.7525.469388
2JohnSwedenStockholm691.6924.158818
+ +### αž€αžΆαžšαž’αŸ’αžœαžΎαž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž‡αž½αžšαžˆαžš DataFrame + +αžαž˜αŸ’αž›αŸƒαž‡αž½αžšαžˆαžš BMI αž“αŸƒ DataFrame αž‚αžΊαž’αžŽαŸ’αžαŸ‚αžαžŠαŸ„αž™αž˜αžΆαž“αžαŸ’αž‘αž„αŸ‹αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž‡αžΆαž…αŸ’αžšαžΎαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž‘αžŸαž—αžΆαž‚αŸ” αž…αžΌαžšαž”αŸ’αžαžΌαžšαžœαžΆαž‘αŸ…αž‡αžΆαžαŸ’αž‘αž„αŸ‹αžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž…αŸ†αž“αž»αž…αŸ” + +```python +df['BMI'] = round(df['BMI'], 1) +print(df) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCityWeightHeightBMI
0AsabenehFinlandHelsinki741.7324.7
1DavidUKLondon781.7525.5
2JohnSwedenStockholm691.6924.2
+ +αž–αŸαžαŸŒαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ DataFrame αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž˜αž·αž“αž‘αžΆαž“αŸ‹αž–αŸαž‰αž›αŸαž‰αž“αŸ…αž‘αžΎαž™ αžŸαžΌαž˜αž”αž“αŸ’αžαŸ‚αž˜αž†αŸ’αž“αžΆαŸ†αž€αŸ†αžŽαžΎαž αž“αž·αž„αž‡αž½αžšαžˆαžšαž†αŸ’αž“αžΆαŸ†αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ” + +```python +birth_year = ['1769', '1985', '1990'] +current_year = pd.Series(2020, index=[0, 1,2]) +df['Birth Year'] = birth_year +df['Current Year'] = current_year +df +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCityWeightHeightBMIBirth YearCurrent Year
0AsabenehFinlandHelsinki741.7324.717692020
1DavidUKLondon781.7525.519852020
2JohnSwedenStockholm691.6924.219902020
+ +## αž€αŸ†αž–αž»αž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸƒαžαž˜αŸ’αž›αŸƒαž‡αž½αžšαžˆαžš + +```python +print(df.Weight.dtype) +``` + +```sh + dtype('int64') +``` + +```python +df['Birth Year'].dtype # αžœαžΆαž•αŸ’αžαž›αŸ‹αž±αŸ’αž™ string object αž™αžΎαž„αž‚αž½αžšαžαŸ‚αž”αŸ’αžαžΌαžšαžœαžΆαž‘αŸ…αž‡αžΆαž›αŸαž +``` + +```python +df['Birth Year'] = df['Birth Year'].astype('int') +print(df['Birth Year'].dtype) # αžŸαžΌαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡ +``` + +```sh + dtype('int32') +``` + +αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŠαžΌαž…αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž†αŸ’αž“αžΆαŸ†αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ– + +```python +df['Current Year'] = df['Current Year'].astype('int') +df['Current Year'].dtype +``` + +```sh + dtype('int32') +``` + +αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžαž˜αŸ’αž›αŸƒαž‡αž½αžšαžˆαžšαž“αŸƒαž†αŸ’αž“αžΆαŸ†αž€αŸ†αžŽαžΎαž αž“αž·αž„αž†αŸ’αž“αžΆαŸ†αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž‚αžΊαž‡αžΆαž…αŸ†αž“αž½αž“αž‚αžαŸ‹αŸ” αž™αžΎαž„αž’αžΆαž…αž‚αžŽαž“αžΆαž’αžΆαž™αž»αž”αžΆαž“αŸ” + +```python +ages = df['Current Year'] - df['Birth Year'] +ages +``` + + 0 251 + 1 35 + 2 30 + dtype: int32 + +```python +df['Ages'] = ages +print(df) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCityWeightHeightBMIBirth YearCurrent YearAges
0AsabenehFinlandHelsinki741.7324.717692019250
1DavidUKLondon781.7525.51985201934
2JohnSwedenStockholm691.6924.21990201929
+ +αž’αŸ’αž“αž€β€‹αž“αŸ…β€‹αž‡αž½αžšβ€‹αž‘αžΈβ€‹αž˜αž½αž™β€‹αž”αžΆαž“β€‹αžšαžŸαŸ‹β€‹αž“αŸ…β€‹αžšαž αžΌαžβ€‹αž˜αž€β€‹αžŠαž›αŸ‹β€‹αž–αŸαž›β€‹αž“αŸαŸ‡β€‹αž’αžŸαŸ‹β€‹αžšαž™αŸˆβ€‹αž–αŸαž› ្αŸ₯៑ αž†αŸ’αž“αžΆαŸ†αŸ” αžœαžΆαž˜αž·αž“αž‘αŸ†αž“αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αžšαžŸαŸ‹αž“αŸ…αž”αžΆαž“αž™αžΌαžšαž“αŸ„αŸ‡αž‘αŸαŸ” αž‘αžΆαŸ†αž„αžœαžΆαž‡αžΆαž€αŸ†αž αž»αžŸ αž¬αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž˜αŸ’αž’αž·αž“αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž”αŸ†αž–αŸαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ„αŸ‡αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αž’αŸ’αž™αž˜αž“αŸƒαž‡αž½αžšαžˆαžšαžŠαŸ„αž™αž˜αž·αž“αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž…αžΌαž›αžαžΆαž„αž€αŸ’αžšαŸ…αŸ” + +mean = (35 + 30)/ 2 + +```python +mean = (35 + 30)/ 2 +print('Mean: ',mean) #αžœαžΆαž‡αžΆαž€αžΆαžšαž›αŸ’αž’αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαžαŸ’αž›αŸ‡αž‘αŸ…αž›αž‘αŸ’αž’αž•αž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αžŠαžΉαž„αžαžΆαž’αŸ’αžœαžΈαž‡αžΆαž’αŸ’αžœαžΈ +``` + +```sh + Mean: 32.5 +``` + +### Boolean Indexing + +```python +print(df[df['Ages'] > 120]) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCityWeightHeightBMIBirth YearCurrent YearAges
0AsabenehFinlandHelsinki741.7324.717692020251
+ + +```python +print(df[df['Ages'] < 120]) +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCountryCityWeightHeightBMIBirth YearCurrent YearAges
1DavidUKLondon781.7525.51985202035
2JohnSwedenStockholm691.6924.21990202030
+ +## Exercises: Day 25 + +1. αž’αžΆαž“αž―αž€αžŸαžΆαžš hacker_news.csv αž–αžΈαžαžαž‘αž·αž“αŸ’αž“αž“αŸαž™ +1. αž‘αž‘αž½αž›αž”αžΆαž“αž”αŸ’αžšαžΆαŸ†αž‡αž½αžšαžŠαŸ†αž”αžΌαž„ +1. αž‘αž‘αž½αž›αž”αžΆαž“αž”αŸ’αžšαžΆαŸ†αž‡αž½αžšαž…αž»αž„αž€αŸ’αžšαŸ„αž™ +1. αž‘αž‘αž½αž›αž”αžΆαž“αž‡αž½αžšαžˆαžšαž…αŸ†αžŽαž„αž‡αžΎαž„αž‡αžΆαžŸαŸŠαŸαžšαžΈαž•αŸαž“αžŠαžΆ +1. αžšαžΆαž”αŸ‹αž…αŸ†αž“αž½αž“αž‡αž½αžšαžŠαŸαž€αž“αž·αž„αž‡αž½αžšαžˆαžš + - αžαŸ’αžšαž„αž…αŸ†αžŽαž„αž‡αžΎαž„αžŠαŸ‚αž›αž˜αžΆαž“ python + - αžαŸ’αžšαž„αž…αŸ†αžŽαž„αž‡αžΎαž„αžŠαŸ‚αž›αž˜αžΆαž“ JavaScript + - αžšαž»αž€αžšαž€αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž™αž›αŸ‹αž’αŸ†αž–αžΈαžœαžΆαŸ” + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 24](../24_Day_Statistics/24_statistics.md) | [Day 26 >>](../26_Day_Python_web/26_python_web.md) diff --git a/Khmer/26_Day_Python_web/26_python_web.md b/Khmer/26_Day_Python_web/26_python_web.md new file mode 100644 index 000000000..31688a289 --- /dev/null +++ b/Khmer/26_Day_Python_web/26_python_web.md @@ -0,0 +1,568 @@ +
+

30 Days Of Python: Day 26 - Python for web

+ + + + + Twitter Follow + + + Author: + Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+
+ + +[<< Day 25 ](../25_Day_Pandas/25_pandas.md) | [Day 27 >>](../27_Day_Python_with_mongodb/27_python_with_mongodb.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 26](#-day-26) + - [Python for Web](#python-for-web) + - [Flask](#flask) + - [Folder structure](#folder-structure) + - [Setting up your project directory](#setting-up-your-project-directory) + - [Creating routes](#creating-routes) + - [Creating templates](#creating-templates) + - [Python Script](#python-script) + - [Navigation](#navigation) + - [Creating a layout](#creating-a-layout) + - [Serving Static File](#serving-static-file) + - [Deployment](#deployment) + - [Creating Heroku account](#creating-heroku-account) + - [Login to Heroku](#login-to-heroku) + - [Create requirements and Procfile](#create-requirements-and-procfile) + - [Pushing project to heroku](#pushing-project-to-heroku) + +# πŸ“˜ Day 26 + +## Python for Web + +Python is a general purpose programming language and it can be used for many places. In this section, we will see how we use Python for the web. There are many Python web frame works. Django and Flask are the most popular ones. Today, we will see how to use Flask for web development. + +### Flask + +Flask is a web development framework written in Python. Flask uses Jinja2 template engine. Flask can be also used with other modern front libraries such as React. + +If you did not install the virtualenv package yet install it first. Virtual environment will allows to isolate project dependencies from the local machine dependencies. + +#### Folder structure + +After completing all the step, your project file structure should look like this: + +```sh + +β”œβ”€β”€ Procfile +β”œβ”€β”€ app.py +β”œβ”€β”€ env +β”‚Β Β  β”œβ”€β”€ bin +β”œβ”€β”€ requirements.txt +β”œβ”€β”€ static +β”‚Β Β  └── css +β”‚Β Β  └── main.css +└── templates + β”œβ”€β”€ about.html + β”œβ”€β”€ home.html + β”œβ”€β”€ layout.html + β”œβ”€β”€ post.html + └── result.html +``` + +### Setting up your project directory + +Follow the following steps to get started with Flask. + +Step 1: install virtualenv using the following command. + +```sh +pip install virtualenv +``` + +Step 2: + +```sh +asabeneh@Asabeneh:~/Desktop$ mkdir python_for_web +asabeneh@Asabeneh:~/Desktop$ cd python_for_web/ +asabeneh@Asabeneh:~/Desktop/python_for_web$ virtualenv venv +asabeneh@Asabeneh:~/Desktop/python_for_web$ source venv/bin/activate +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ pip freeze +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ pip install Flask +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ pip freeze +Click==7.0 +Flask==1.1.1 +itsdangerous==1.1.0 +Jinja2==2.10.3 +MarkupSafe==1.1.1 +Werkzeug==0.16.0 +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ +``` + +We created a project director named python_for_web. Inside the project we created a virtual environment *venv* which could be any name but I prefer to call it _venv_. Then we activated the virtual environment. We used pip freeze to check the installed packages in the project directory. The result of pip freeze was empty because a package was not installed yet. + +Now, let's create app.py file in the project directory and write the following code. The app.py file will be the main file in the project. The following code has flask module, os module. + +### Creating routes + +The home route. + +```py +# let's import the flask +from flask import Flask +import os # importing operating system module + +app = Flask(__name__) + +@app.route('/') # this decorator create the home route +def home (): + return '

Welcome

' + +@app.route('/about') +def about(): + return '

About us

' + + +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +To run the flask application, write python app.py in the main flask application directory. + +After you run _python app.py_ check local host 5000. + +Let us add additional route. +Creating about route + +```py +# let's import the flask +from flask import Flask +import os # importing operating system module + +app = Flask(__name__) + +@app.route('/') # this decorator create the home route +def home (): + return '

Welcome

' + +@app.route('/about') +def about(): + return '

About us

' + +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +Now, we added the about route in the above code. How about if we want to render an HTML file instead of string? It is possible to render HTML file using the function *render_templae*. Let us create a folder called templates and create home.html and about.html in the project directory. Let us also import the *render_template* function from flask. + +### Creating templates + +Create the HTML files inside templates folder. + +home.html + +```html + + + + + + Home + + + +

Welcome Home

+ + +``` + +about.html + +```html + + + + + + About + + + +

About Us

+ + +``` + +### Python Script + +app.py + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module + +app = Flask(__name__) + +@app.route('/') # this decorator create the home route +def home (): + return render_template('home.html') + +@app.route('/about') +def about(): + return render_template('about.html') + +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +As you can see to go to different pages or to navigate we need a navigation. Let's add a link to each page or let's create a layout which we use to every page. + +### Navigation + +```html + +``` + +Now, we can navigate between the pages using the above link. Let us create additional page which handle form data. You can call it any name, I like to call it post.html. + +We can inject data to the HTML files using Jinja2 template engine. + +```py +# let's import the flask +from flask import Flask, render_template, request, redirect, url_for +import os # importing operating system module + +app = Flask(__name__) + +@app.route('/') # this decorator create the home route +def home (): + techs = ['HTML', 'CSS', 'Flask', 'Python'] + name = '30 Days Of Python Programming' + return render_template('home.html', techs=techs, name = name, title = 'Home') + +@app.route('/about') +def about(): + name = '30 Days Of Python Programming' + return render_template('about.html', name = name, title = 'About Us') + +@app.route('/post') +def post(): + name = 'Text Analyzer' + return render_template('post.html', name = name, title = name) + + +if __name__ == '__main__': + # for deployment + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +Let's see the templates too: + +home.html + +```html + + + + + + Home + + + + +

Welcome to {{name}}

+
    + {% for tech in techs %} +
  • {{tech}}
  • + {% endfor %} +
+ + +``` + +about.html + +```html + + + + + + About Us + + + + +

About Us

+

{{name}}

+ + +``` + +### Creating a layout + +In the template files, there are lots of repeated codes, we can write a layout and we can remove the repetition. Let's create layout.html inside the templates folder. +After we create the layout we will import to every file. + +#### Serving Static File + +Create a static folder in your project directory. Inside the static folder create CSS or styles folder and create a CSS stylesheet. We use the *url_for* module to serve the static file. + +layout.html + +```html + + + + + + + + {% if title %} + 30 Days of Python - {{ title}} + {% else %} + 30 Days of Python + {% endif %} + + + +
+ +
+
+ {% block content %} {% endblock %} +
+ + +``` + +Now, lets remove all the repeated code in the other template files and import the layout.html. The href is using _url_for_ function with the name of the route function to connect each navigation route. + +home.html + +```html +{% extends 'layout.html' %} {% block content %} +
+

Welcome to {{name}}

+

+ This application clean texts and analyse the number of word, characters and + most frequent words in the text. Check it out by click text analyzer at the + menu. You need the following technologies to build this web application: +

+
    + {% for tech in techs %} +
  • {{tech}}
  • + + {% endfor %} +
+
+ +{% endblock %} +``` + +about.html + +```html +{% extends 'layout.html' %} {% block content %} +
+

About {{name}}

+

+ This is a 30 days of python programming challenge. If you have been coding + this far, you are awesome. Congratulations for the job well done! +

+
+{% endblock %} +``` + +post.html + +```html +{% extends 'layout.html' %} {% block content %} +
+

Text Analyzer

+
+
+ +
+
+ +
+
+
+ +{% endblock %} +``` + +Request methods, there are different request methods(GET, POST, PUT, DELETE) are the common request methods which allow us to do CRUD(Create, Read, Update, Delete) operation. + +In the post, route we will use GET and POST method alternative depending on the type of request, check how it looks in the code below. The request method is a function to handle request methods and also to access form data. +app.py + +```py +# let's import the flask +from flask import Flask, render_template, request, redirect, url_for +import os # importing operating system module + +app = Flask(__name__) +# to stop caching static file +app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0 + + + +@app.route('/') # this decorator create the home route +def home (): + techs = ['HTML', 'CSS', 'Flask', 'Python'] + name = '30 Days Of Python Programming' + return render_template('home.html', techs=techs, name = name, title = 'Home') + +@app.route('/about') +def about(): + name = '30 Days Of Python Programming' + return render_template('about.html', name = name, title = 'About Us') + +@app.route('/result') +def result(): + return render_template('result.html') + +@app.route('/post', methods= ['GET','POST']) +def post(): + name = 'Text Analyzer' + if request.method == 'GET': + return render_template('post.html', name = name, title = name) + if request.method =='POST': + content = request.form['content'] + print(content) + return redirect(url_for('result')) + +if __name__ == '__main__': + # for deployment + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +So far, we have seen how to use template and how to inject data to template, how to a common layout. +Now, lets handle static file. Create a folder called static in the project director and create a folder called css. Inside css folder create main.css. Your main. css file will be linked to the layout.html. + +You don't have to write the css file, copy and use it. Let's move on to deployment. + +### Deployment + +#### Creating Heroku account + +Heroku provides a free deployment service for both front end and fullstack applications. Create an account on [heroku](https://www.heroku.com/) and install the heroku [CLI](https://devcenter.heroku.com/articles/heroku-cli) for you machine. +After installing heroku write the following command + +#### Login to Heroku + +```sh +asabeneh@Asabeneh:~$ heroku login +heroku: Press any key to open up the browser to login or q to exit: +``` + +Let's see the result by clicking any key from the keyboard. When you press any key from you keyboard it will open the heroku login page and click the login page. Then you will local machine will be connected to the remote heroku server. If you are connected to remote server, you will see this. + +```sh +asabeneh@Asabeneh:~$ heroku login +heroku: Press any key to open up the browser to login or q to exit: +Opening browser to https://cli-auth.heroku.com/auth/browser/be12987c-583a-4458-a2c2-ba2ce7f41610 +Logging in... done +Logged in as asabeneh@gmail.com +asabeneh@Asabeneh:~$ +``` + +#### Create requirements and Procfile + +Before we push our code to remote server, we need requirements + +- requirements.txt +- Procfile + +```sh +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ pip freeze +Click==7.0 +Flask==1.1.1 +itsdangerous==1.1.0 +Jinja2==2.10.3 +MarkupSafe==1.1.1 +Werkzeug==0.16.0 +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ touch requirements.txt +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ pip freeze > requirements.txt +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ cat requirements.txt +Click==7.0 +Flask==1.1.1 +itsdangerous==1.1.0 +Jinja2==2.10.3 +MarkupSafe==1.1.1 +Werkzeug==0.16.0 +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ touch Procfile +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ ls +Procfile env/ static/ +app.py requirements.txt templates/ +(env) asabeneh@Asabeneh:~/Desktop/python_for_web$ +``` + +The Procfile will have the command which run the application in the web server in our case on Heroku. + +```sh +web: python app.py +``` + +#### Pushing project to heroku + +Now, it is ready to be deployed. Steps to deploy the application on heroku + +1. git init +2. git add . +3. git commit -m "commit message" +4. heroku create 'name of the app as one word' +5. git push heroku master +6. heroku open(to launch the deployed application) + +After this step you will get an application like [this](http://thirdaysofpython-practice.herokuapp.com/) + +[<< Day 25 ](../25_Day_Pandas/25_pandas.md) | [Day 27 >>](../27_Day_Python_with_mongodb/27_python_with_mongodb.md) \ No newline at end of file diff --git a/Khmer/27_Day_Python_with_mongodb/27_python_with_mongodb.md b/Khmer/27_Day_Python_with_mongodb/27_python_with_mongodb.md new file mode 100644 index 000000000..b8d131831 --- /dev/null +++ b/Khmer/27_Day_Python_with_mongodb/27_python_with_mongodb.md @@ -0,0 +1,656 @@ +
+

30 Days Of Python: Day 27 - Python with MongoDB

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+ Second Edition: July, 2021 +
+ +
+ +[<< Day 26](../26_Day_Python_web/26_python_web.md) | [Day 28 >>](../28_Day_API/28_API.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 27](#-day-27) +- [Python with MongoDB](#python-with-mongodb) + - [MongoDB](#mongodb) + - [SQL versus NoSQL](#sql-versus-nosql) + - [Getting Connection String(MongoDB URI)](#getting-connection-stringmongodb-uri) + - [Connecting Flask application to MongoDB Cluster](#connecting-flask-application-to-mongodb-cluster) + - [Creating a database and collection](#creating-a-database-and-collection) + - [Inserting many documents to collection](#inserting-many-documents-to-collection) + - [MongoDB Find](#mongodb-find) + - [Find with Query](#find-with-query) + - [Find query with modifier](#find-query-with-modifier) + - [Limiting documents](#limiting-documents) + - [Find with sort](#find-with-sort) + - [Update with query](#update-with-query) + - [Delete Document](#delete-document) + - [Drop a collection](#drop-a-collection) + +# πŸ“˜ Day 27 + +# Python with MongoDB + +Python αž‚αžΊαž‡αžΆ backend technology αž αžΎαž™αžœαžΆαž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™ data base αž•αŸ’αžŸαŸαž„αŸ—αŸ” αžœαžΆαž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž“αžΉαž„ SQL αž“αž·αž„ noSQL databasesαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž—αŸ’αž‡αžΆαž”αŸ‹ Python αž‡αžΆαž˜αž½αž™αž“αžΉαž„ MongoDB database αžŠαŸ‚αž›αž‡αžΆ database noSQLαŸ” + +## MongoDB + +MongoDB αž‚αžΊαž‡αžΆ NoSQL databaseαŸ” MongoDB αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš JSON αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž’αŸ„αž™ MongoDB αž˜αžΆαž“αž—αžΆαž–αžšαž›αžΌαž“ αž“αž·αž„αž’αžΆαž…αž€αŸ‚αž…αŸ’αž“αŸƒαž”αžΆαž“αŸ” αžŸαžΌαž˜αž˜αžΎαž›αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αžŠαžΈ αž•αŸ’αžŸαŸαž„αŸ—αž“αŸƒ SQL αž“αž·αž„ NoSQL databasesαŸ” αžαžΆαžšαžΆαž„αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„ SQL versus NoSQL databases αŸ” + +### SQL versus NoSQL + +![SQL versus NoSQL](../images/mongoDB/sql-vs-nosql.png) + +αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž•αŸ’αžαŸ„αžαž›αžΎαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ NoSQL MongoDB αŸ” αžŸαžΌαž˜αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡ [mongoDB](https://www.mongodb.com/) αž…αž»αž…αž›αžΎαž”αŸŠαžΌαžαž»αž„ Sign in αžšαž½αž…αž…αž»αž… Register αž“αŸ…αž‘αŸ†αž–αŸαžšαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ” +![MongoDB Sign up pages](../images/mongoDB/mongodb-signup-page.png) + +αž”αŸ†αž–αŸαž‰αž“αž·αž„αž…αž»αž…αž”αž“αŸ’αž + +![Mongodb register](../images/mongoDB/mongodb-register.png) + +αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž•αŸ‚αž“αž€αžΆαžšαž₯αžαž‚αž·αžαžαŸ’αž›αŸƒ + +![Mongodb free plan](../images/mongoDB/mongodb-free.png) + +αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžαŸ†αž”αž“αŸ‹ αž“αž·αž„αž•αŸ’αžαž›αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡ clusterαŸ” + +![Mongodb cluster name](../images/mongoDB/mongodb-cluster-name.png) + +Now, a free sandbox is created +αž₯αž‘αžΌαžœαž“αŸαŸ‡, free sandbox αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ + +![Mongodb sandbox](../images/mongoDB/mongodb-sandbox.png) + +αž‚αŸ’αžšαž”αŸ‹ local host access + +![Mongodb allow ip access](../images/mongoDB/mongodb-allow-ip-access.png) + +αžŠαžΆαž€αŸ‹ user αž“αž·αž„ password + +![Mongodb add user](../images/mongoDB/mongodb-add-user.png) + +αž”αž„αŸ’αžαžΎαž mongoDB uri link + +![Mongodb create uri](../images/mongoDB/mongodb-create-uri.png) + +αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Python 3.6 ឬ αžαŸ’αž–αžŸαŸ‹αž‡αžΆαž„αž“αžΉαž„ + +![Mongodb python driver](../images/mongoDB/mongodb-python-driver.png) + +### Getting Connection String(MongoDB URI) + +αž…αž˜αŸ’αž›αž„ connection string link αž αžΎαž™αž’αŸ’αž“αž€αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž’αŸ’αžœαžΈαž˜αž½αž™αžŠαžΌαž…αž“αŸαŸ‡ + +```sh +mongodb+srv://asabeneh:@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority +``` + +αž€αž»αŸ†αž”αžΆαžšαž˜αŸ’αž—αž’αŸ†αž–αžΈ url, αžœαžΆαž‡αžΆαž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ… MongoDBαŸ” +αžŸαžΌαž˜αž™αžΎαž„αž‡αŸ†αž“αž½αžŸ password placeholder αž‡αžΆαž˜αž½αž™αž“αžΉαž„ password αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ userαŸ” + +**Example:** + +```sh +mongodb+srv://asabeneh:123123123@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority +``` + +αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‡αŸ†αž“αž½αžŸαž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž“αž·αž„ password αž‚αžΊ 123123 αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹ database αž‚αžΊ thirty_days_pythonαŸ” αž“αŸαŸ‡αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡, password αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αž›αžΆαŸ†αž„αž‡αžΆαž„αž“αŸαŸ‡αž”αž“αŸ’αžαž·αž…αŸ” + +Python αžαŸ’αžšαžΌαžœαž€αžΆαžš mongoDB driver αž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ mongoDB databaseαŸ” αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ _pymongo_ αž‡αžΆαž˜αž½αž™ _dnspython_ αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž˜αž½αž™ mongoDB baseαŸ” αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ project directory αž”αž‰αŸ’αž…αžΌαž› pymongo αž“αž·αž„ dnspythonαŸ” + +```sh +pip install pymongo dnspython +``` + +"dnspython" module αžαŸ’αžšαžΌαžœαž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžΎ mongodb+srv:// URIsαŸ” dnspython αž‚αžΊ DNS toolkit αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ PythonαŸ” αžœαžΆαž‚αžΆαŸ†αž‘αŸ’αžšαž”αŸ’αžšαž—αŸαž‘αž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” + +### Connecting Flask application to MongoDB Cluster + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +print(client.list_database_names()) + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) + +``` + +αž–αŸαž›αž™αžΎαž„ run code, αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“ default mongoDB databases. + +```sh +['admin', 'local'] +``` + +### Creating a database and collection + +αžŸαžΌαž˜αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž database αž“αž·αž„ collection αž€αŸ’αž“αž»αž„ mongoDB, αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αž·αž“αž˜αžΆαž“αŸ” αžŸαžΌαž˜αž”αž„αŸ’αž€αžΎαž data base αžˆαŸ’αž“αŸ„αŸ‡ _thirty_days_of_python_ αž“αž·αž„ _students_ collectionαŸ” +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž database + +```sh +db = client.name_of_databse # we can create a database like this or the second way +db = client['name_of_database'] +``` + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +# Creating database +db = client.thirty_days_of_python +# Creating students collection and inserting a document +db.students.insert_one({'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250}) +print(client.list_database_names()) + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž™αžΎαž„αž”αž„αŸ’αž€αžΎαž database, αž™αžΎαž„αž€αŸαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž students collection αž“αž·αž„αž™αžΎαž„αž”αŸ’αžšαžΎ *insert_one()* method αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αžΌαž› documentαŸ” +αž₯αž‘αžΌαžœαž“αŸαŸ‡ database *thirty_days_of_python* αž“αž·αž„ *students* collection αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αž αžΎαž™ document αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αŸ” +αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž› mongoDB cluster αž αžΎαž™αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰ database αž“αž·αž„ collectionαŸ” αž€αŸ’αž“αž»αž„ collection, αž“αžΉαž„αž˜αžΆαž“ documentαŸ” + +```sh +['thirty_days_of_python', 'admin', 'local'] +``` + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžƒαžΎαž‰αž“αŸαŸ‡αž“αŸ…αž›αžΎ mongoDB cluster, αžœαžΆαž˜αžΆαž“αž“αŸαž™αžαžΆ αž’αŸ’αž“αž€αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž database αž“αž·αž„ collection. + +![Creating database and collection](../images/mongoDB/mongodb-creating_database.png) + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžΆαž“αžƒαžΎαž‰αž“αŸ…αž›αžΎαžšαžΌαž”αž—αžΆαž–, document αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž˜αžΆαž“ id αžœαŸ‚αž„αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž‡αžΆ primary keyαŸ” αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž document, mongoDB αž“αž·αž„αž”αž„αŸ’αž€αžΎαž ID αž–αž·αžŸαŸαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαŸ” + +### Inserting many documents to collection + +*insert_one()* method αž”αž‰αŸ’αž…αžΌαž› item αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™, αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž…αŸ’αžšαžΎαž“ documents αž—αŸ’αž›αžΆαž˜αŸ—αž™αžΎαž„αž”αŸ’αžšαžΎ *insert_many()* method ឬ for loopαŸ” +αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ for loop αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αžΌαž›αž…αŸ’αžšαžΎαž“ documents αž—αŸ’αž›αžΆαž˜αŸ—αŸ” + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) + +students = [ + {'name':'David','country':'UK','city':'London','age':34}, + {'name':'John','country':'Sweden','city':'Stockholm','age':28}, + {'name':'Sami','country':'Finland','city':'Helsinki','age':25}, + ] +for student in students: + db.students.insert_one(student) + + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +### MongoDB Find + +*find()* αž“αž·αž„ *findOne()* methods αž‡αžΆαžœαž·αž’αžΈαž‘αžΌαž‘αŸ…αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„ collection αž€αŸ’αž“αž»αž„ mongoDB databaseαŸ” αžœαžΆαžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„ SELECT statement αž€αŸ’αž“αž»αž„ MySQL databaseαŸ” +αžŸαžΌαž˜αž™αžΎαž„αž”αŸ’αžšαžΎ _find_one()_ method αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“ document αž€αŸ’αž“αž»αž„ database collectionαŸ” + +- \*find_one({"\_id": ObjectId("id"}): αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αžŠαŸ†αž”αžΌαž„ αž”αŸ’αžšαžŸαž·αž“αž”αžΎ ID αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹ + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +student = db.students.find_one() +print(student) + + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) + +``` + +```sh +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Helsinki', 'city': 'Helsinki', 'age': 250} +``` + +Query αžαžΆαž„αž›αžΎαž”αžΆαž“αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αž›αŸαžαžŠαŸ†αž”αžΌαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž’αžΆαž…αž•αŸ’αžαŸ„αžαž›αžΎ document αžŽαžΆαž˜αž½αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎ \_idαŸ” αžŸαžΌαž˜αž™αžΎαž„αž’αŸ’αžœαžΎαž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™, αž”αŸ’αžšαžΎ id αžšαž”αžŸαŸ‹ David αžŠαžΎαž˜αŸ’αž”αžΈαž”αžΆαž“ David objectαŸ” +'\_id':ObjectId('5df68a23f106fe2d315bbc8c') + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +from bson.objectid import ObjectId # id object +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +student = db.students.find_one({'_id':ObjectId('5df68a23f106fe2d315bbc8c')}) +print(student) + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +{'_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34} +``` + +αž™αžΎαž„αž”αžΆαž“αžƒαžΎαž‰αž€αžΆαžšαž”αŸ’αžšαžΎ _find_one()_ αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎαŸ” αžŸαžΌαž˜αž…αž›αŸαžαž˜αž½αž™αž‘αŸ… _find()_ + +- _find()_: αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈ collection αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž˜αž·αž“αžŠαžΆαž€αŸ‹ query objectαŸ” Object αž‚αžΊ pymongo.cursor objectαŸ” + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +students = db.students.find() +for student in students: + print(student) + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250} +{'_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34} +{'_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28} +{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25} +``` + +αž™αžΎαž„αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹ Field αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ αžŠαŸ„αž™αž•αŸ’αž‘αŸαžš Object αž‘αžΈαž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„ _find({}, {})_αŸ” 0 αž˜αžΆαž“αž“αŸαž™αžαžΆαž˜αž·αž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› αž“αž·αž„ 1 αž˜αžΆαž“αž“αŸαž™αžαžΆαž”αž‰αŸ’αž…αžΌαž› αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž˜αž·αž“αž’αžΆαž…αž›αžΆαž™αž‘αŸ†αž‚αŸ’αž“αžΆ 0 αž“αž·αž„ 1, αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚ \_idαŸ” + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +students = db.students.find({}, {"_id":0, "name": 1, "country":1}) # 0 means not include and 1 means include +for student in students: + print(student) + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +{'name': 'Asabeneh', 'country': 'Finland'} +{'name': 'David', 'country': 'UK'} +{'name': 'John', 'country': 'Sweden'} +{'name': 'Sami', 'country': 'Finland'} +``` + +### Find with Query + +αž€αŸ’αž“αž»αž„ mongoDB find αž™αž€ query objectαŸ” αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ query object αž“αž·αž„ αž™αžΎαž„αž’αžΆαž…αžαž˜αŸ’αžšαž„ documents αž™αžΎαž„αž…αž„αŸ‹αžαž˜αŸ’αžšαž„αŸ” + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database + +query = { + "country":"Finland" +} +students = db.students.find(query) + +for student in students: + print(student) + + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250} +{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25} +``` + +Query αž‡αžΆαž˜αž½αž™ modifiers + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +import pymongo + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database + +query = { + "city":"Helsinki" +} +students = db.students.find(query) +for student in students: + print(student) + + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250} +{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25} +``` + +### Find query with modifier + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +import pymongo + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +query = { + "country":"Finland", + "city":"Helsinki" +} +students = db.students.find(query) +for student in students: + print(student) + + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250} +{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25} +``` + +Query αž‡αžΆαž˜αž½αž™ modifiers + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +import pymongo + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +query = {"age":{"$gt":30}} +students = db.students.find(query) +for student in students: + print(student) + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250} +{'_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34} +``` + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +import pymongo + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +query = {"age":{"$gt":30}} +students = db.students.find(query) +for student in students: + print(student) +``` + +```sh +{'_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28} +{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25} +``` + +### Limiting documents + +αž™αžΎαž„αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž…αŸ†αž“αž½αž“ documents αž™αžΎαž„αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ αžŠαŸ„αž™αž”αŸ’αžšαžΎ _limit()_ methodαŸ” + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +import pymongo + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +db.students.find().limit(3) +``` + +### Find with sort + +αžŠαŸ„αž™ default, sort αž‚αžΊαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸ†αžŠαžΆαž”αŸ‹αž‘αžΎαž„αŸ” αž™αžΎαž„αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžŠαžΌαžšαž€αžΆαžš sort αž‘αŸ…αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž…αž»αŸ‡αžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜ parameter -1 αŸ” + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +import pymongo + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +students = db.students.find().sort('name') +for student in students: + print(student) + + +students = db.students.find().sort('name',-1) +for student in students: + print(student) + +students = db.students.find().sort('age') +for student in students: + print(student) + +students = db.students.find().sort('age',-1) +for student in students: + print(student) + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +Ascending order + +```sh +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250} +{'_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34} +{'_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28} +{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25} +``` + +Descending order + +```sh +{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25} +{'_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28} +{'_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34} +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 250} +``` + +### Update with query + +αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ *update_one()* method αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžαžΌαžš item αž˜αž½αž™αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžš object αž–αžΈαžš, αž˜αž½αž™αž‡αžΆ query αž“αž·αž„ αž–αžΈαžšαž‡αžΆ object αžαŸ’αž˜αžΈαŸ” +αž˜αž“αž»αžŸαŸ’αžŸαž‘αžΈαž˜αž½αž™, Asabeneh αž˜αžΆαž“αž’αžΆαž™αž»αž˜αž·αž“αž‚αž½αžšαž²αŸ’αž™αž‡αžΏαŸ” αž“αžΆαŸ†αž™αžΎαž„αž”αŸ’αžαžΌαžšαž’αžΆαž™αž»αžšαž”αžŸαŸ‹ AsabenehαŸ” + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +import pymongo + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database + +query = {'age':250} +new_value = {'$set':{'age':38}} + +db.students.update_one(query, new_value) +# lets check the result if the age is modified +for student in db.students.find(): + print(student) + + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 38} +{'_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34} +{'_id': ObjectId('5df68a23f106fe2d315bbc8d'), 'name': 'John', 'country': 'Sweden', 'city': 'Stockholm', 'age': 28} +{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25} +``` + +αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αž…αž„αŸ‹αž”αŸ’αžαžΌαžš documents αž…αŸ’αžšαžΎαž“αž—αŸ’αž›αžΆαž˜αŸ— αž™αžΎαž„αž”αŸ’αžšαžΎ *upate_many()* methodαŸ” + +### Delete Document + +*delete_one()* αž›αž»αž”αž˜αž½αž™ documentαŸ” *delete_one()* αžαŸ’αžšαžΌαžœαž€αžΆαžš query object parameterαŸ” αžœαžΆαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž›αž»αž”αž…αŸ„αž›αž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αžŠαŸ†αž”αžΌαž„αŸ” +αž™αžΎαž„αžαŸ’αžšαžΌαžœαžŠαž€ John αž˜αŸ’αž“αžΆαž€αŸ‹αž…αŸαž‰αž–αžΈ collectionαŸ” + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +import pymongo + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database + +query = {'name':'John'} +db.students.delete_one(query) + +for student in db.students.find(): + print(student) +# lets check the result if the age is modified +for student in db.students.find(): + print(student) + + +app = Flask(__name__) +if __name__ == '__main__': + # for deployment we use the environ + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +{'_id': ObjectId('5df68a21f106fe2d315bbc8b'), 'name': 'Asabeneh', 'country': 'Finland', 'city': 'Helsinki', 'age': 38} +{'_id': ObjectId('5df68a23f106fe2d315bbc8c'), 'name': 'David', 'country': 'UK', 'city': 'London', 'age': 34} +{'_id': ObjectId('5df68a23f106fe2d315bbc8e'), 'name': 'Sami', 'country': 'Finland', 'city': 'Helsinki', 'age': 25} +``` + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž”αžΆαž“ John αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αž–αžΈ collectionαŸ” + +When we want to delete many documents we use *delete_many()* method, it takes a query object. If we pass an empty query object to *delete_many({})* it will delete all the documents in the collection. + +### Drop a collection + +αž€αžΆαžšαž”αŸ’αžšαžΎ _drop()_ method αž™αžΎαž„αž’αžΆαž…αž›αž»αž” collection αž–αžΈ databaseαŸ” + +```py +# let's import the flask +from flask import Flask, render_template +import os # importing operating system module +import pymongo + +MONGODB_URI = 'mongodb+srv://asabeneh:your_password_goes_here@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database +db.students.drop() +``` + +αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž›αž»αž”αž…αŸ„αž› students collection αž–αžΈ databaseαŸ” + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 26](../26_Day_Python_web/26_python_web.md) | [Day 28 >>](../28_Day_API/28_API.md) diff --git a/Khmer/28_Day_API/28_API.md b/Khmer/28_Day_API/28_API.md new file mode 100644 index 000000000..2495e4c37 --- /dev/null +++ b/Khmer/28_Day_API/28_API.md @@ -0,0 +1,156 @@ +
+

30 Days Of Python: Day 28 - API

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+Second Edition: July, 2021 +
+ +
+ + +[<< Day 27](../27_Day_Python_with_mongodb/27_python_with_mongodb.md) | [Day 29 >>](../29_Day_Building_API/29_building_API.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [πŸ“˜ Day 28](#-day-28) +- [Application Programming Interface(API)](#application-programming-interfaceapi) + - [API](#api) + - [Building API](#building-api) + - [HTTP(Hypertext Transfer Protocol)](#httphypertext-transfer-protocol) + - [Structure of HTTP](#structure-of-http) + - [Initial Request Line(Status Line)](#initial-request-linestatus-line) + - [Initial Response Line(Status Line)](#initial-response-linestatus-line) + - [Header Fields](#header-fields) + - [The message body](#the-message-body) + - [Request Methods](#request-methods) + - [πŸ’» Exercises: Day 28](#-exercises-day-28) + +# πŸ“˜ Day 28 + +# Application Programming Interface(API) + +## API + +API αž˜αžΆαž“αž“αŸαž™αžαžΆ Application Programming InterfaceαŸ” αž”αŸ’αžšαž—αŸαž‘ API αž™αžΎαž„αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž‚αžΊ Web APIsαŸ” +Web APIs αž‚αžΊαž‡αžΆ Interface αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ‚αž›αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαžœαžΆαž„αžŸαž αž‚αŸ’αžšαžΆαžŸαž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž’αžΆαž“αžšαž”αžŸαŸ‹αžœαžΆ, αžŠαŸ‚αž›αž€αŸαž‡αžΆ Service Level Agreement (SLA) αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž•αŸ’αž›αžΌαžœαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ ឬ URL αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ API αžšαž”αžŸαŸ‹αžœαžΆαŸ” + +αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘ web development, API αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαžΆαž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·, αžŠαžΌαž…αž‡αžΆ Hypertext Transfer Protocol (HTTP) request messages, αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαžŸαžΆαžšαž†αŸ’αž›αžΎαž™αžαž”, αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž€αŸ’αž“αž»αž„ XML ឬ JavaScript Object Notation (JSON) formatαŸ” + +Web API αž”αžΆαž“αž…αžΆαž€αž…αŸαž‰αž–αžΈ Simple Object Access Protocol (SOAP) based web services αž“αž·αž„ service-oriented architecture (SOA) αž†αŸ’αž–αŸ„αŸ‡αž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΆαžš representational state transfer (REST) style web resourcesαŸ” + +Social media services, web APIs αž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαž web communities αžŠαžΎαž˜αŸ’αž”αžΈαž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αž·αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαžœαžΆαž„αžŸαž αž‚αž˜αž“αŸαž“αž·αž„ αžœαŸαž‘αž·αž€αžΆαž•αŸ’αžŸαŸαž„αŸ—αŸ” + +αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ API, αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž“αŸ’αž›αŸ‚αž„αžαŸ‚αž˜αž½αž™αžŠαŸ„αž™αž˜αžΆαž“αž…αž›αž“αžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αŸ„αŸ‡ αž“αž·αž„αž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž‘αžΎαž„αžœαž·αž‰αž‘αŸ…αž€αžΆαž“αŸ‹αž‘αžΈαžαžΆαŸ†αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸ…αž›αžΎ Web αŸ” + +αž§αž‘αžΆαž αžšαžŽαŸ, Twitter's REST API αž’αž“αž»αž‰αŸ’αž‰αžΆαž developers αž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ†αžαžΆαž“αŸ‹αžšαž”αžŸαŸ‹ Twitter αž“αž·αž„ Search API αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ developers αžŠαžΎαž˜αŸ’αž”αžΈαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž˜αž½αž™ Twitter Search αž“αž·αž„ trends dataαŸ” + +αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αž•αŸ’αžαž›αŸ‹ API end pointsαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒ API αžŠαžΌαž…αž‡αžΆαž”αŸ’αžšαž‘αŸαžŸ [API](https://restcountries.eu/rest/v2/all), [cat's breed API](https://api.thecatapi.com/v1/breeds). + +αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž› RESTful API αžŠαŸ‚αž›αž”αŸ’αžšαžΎ HTTP request methods αžŠαžΎαž˜αŸ’αž”αžΈ GET, PUT, POST αž“αž·αž„ DELETE dataαŸ” + +## Building API + +RESTful API αž‚αžΊαž‡αžΆ application program interface (API) αžŠαŸ‚αž›αž”αŸ’αžšαžΎ HTTP requests αžŠαžΎαž˜αŸ’αž”αžΈ GET, PUT, POST αž“αž·αž„ DELETE dataαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž˜αž»αž“αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αžšαŸ€αž“αž’αŸ†αž–αžΈ Python, flask αž“αž·αž„ mongoDBαŸ” αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αžŠαŸ‚αž›αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž RESTful API αžŠαŸ„αž™αž”αŸ’αžšαžΎ Python flask αž“αž·αž„ mongoDB databaseαŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αžΆαž“ CRUD(Create, Read, Update, Delete) operation αž˜αžΆαž“ API αžŠαžΎαž˜αŸ’αž”αžΈ create data, αžŠαžΎαž˜αŸ’αž”αžΈ get data, αžŠαžΎαž˜αŸ’αž”αžΈ update data ឬ αžŠαžΎαž˜αŸ’αž”αžΈ delete data αž–αžΈ databaseαŸ” + +αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž API, αž™αžΎαž„αž‚αž½αžšαž™αž›αŸ‹ HTTP protocol αž“αž·αž„ HTTP request αž“αž·αž„ response cycleαŸ” + +## HTTP(Hypertext Transfer Protocol) + +HTTP αž‚αžΊαž‡αžΆ communication protocol αž•αŸ’αž›αžΌαžœαž€αžΆαžšαžšαžœαžΆαž„ client αž“αž·αž„ serverαŸ” A clientαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž‚αžΊ browser αž“αž·αž„ server αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” HTTP αž‚αžΊαž‡αžΆ network protocol αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΉαž€αž“αžΆαŸ†αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž’αžΆαž…αž‡αžΆ files αž“αŸ…αž›αžΎ World Wide Web, αžœαžΆαž’αžΆαž…αž‡αžΆ HTML files, image files, query results, scripts, ឬ other file typesαŸ” + +A browser αž‚αžΊαž‡αžΆ HTTP client αžŠαŸ„αž™αžŸαžΆαžšαžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΊαž€αž“αžΆαŸ† requests αž‘αŸ… HTTP server (Web server), αžŠαŸ‚αž›αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž•αŸ’αž‰αžΎαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž€αžΆαž“αŸ‹ clientαŸ” + +## Structure of HTTP + +HTTP αž”αŸ’αžšαžΎ client-server modelαŸ” HTTP client αž”αžΎαž€αž€αžΆαžšαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž αžΎαž™αž•αŸ’αž‰αžΎ request message αž‘αŸ… HTTP server αž“αž·αž„ HTTP server αžαŸ’αžšαž‘αŸ’αž”αž”αŸ‹αž˜αž€αžœαž·αž‰ response message αžŠαŸ‚αž›αž‡αžΆ requested resourcesαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› request response cycle αž”αž‰αŸ’αž…αž”αŸ‹, server αž“αžΉαž„αž”αž·αžαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αŸ” + +![HTTP request response cycle](../images/http_request_response_cycle.png) + +αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒ request αž“αž·αž„ response messages αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αžŸαžΆαžšαž‘αžΆαŸ†αž„αž–αžΈαžšαž”αŸ’αžšαž—αŸαž‘αž˜αžΆαž“ + +- αžαŸ’αžŸαŸ‚αžŠαŸ†αž”αžΌαž„, +- 0 αž¬αž…αŸ’αžšαžΎαž“αžαŸ’αžŸαŸ‚ headers, +- αž”αž“αŸ’αž‘αžΆαžαŸ‹αž‘αž‘αŸ (i.e. a CRLF by itself), αž“αž·αž„ +- αžŸαžΆαžšαžŠαŸ‚αž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹ (e.g. a file, or query data, or query output)αŸ” + +Lαž™αžΎαž„αž˜αžΆαž“αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž“αŸƒ request αž“αž·αž„ response messages αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž˜αžΎαž› site:https://thirtydaysofpython-v1-final.herokuapp.com/. Site αž“αŸαŸ‡αž”αžΆαž“αžŠαžΆαž€αŸ‹αž…αŸαž‰αž›αžΎ Heroku free dyno αž“αž·αž„ αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž˜αž½αž™αžαŸ‚αž’αžΆαž…αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžαŸ’αž–αžŸαŸ‹αŸ” αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž„αžΆαžšαž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™ server αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž–αŸαž›αŸ” + +![Request and Response header](../images/request_response_header.png) + +## Initial Request Line(Status Line) + +ីnitial request line αžαž»αžŸαž–αžΈ responseαŸ” +Request line αž˜αžΆαž“ 3 αž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž”αŸ‚αž„αž…αŸ‚αž€αžŠαŸ„αž™αž…αŸ†αžŽαž»αž…αžšαžœαžΆαž„: + +- αžˆαŸ’αž˜αŸ„αŸ‡ method(GET, POST, HEAD) +- αž•αŸ’αž›αžΌαžœαž“αŸƒ requested resource, +- Version αžšαž”αžŸαŸ‹ HTTP αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” eg GET / HTTP/1.1 + +GET αž‚αžΊαž‡αžΆ HTTP αžŠαŸ‚αž›αž‡αž½αž™αžŠαž›αŸ‹ get ឬ read resource αž“αž·αž„ POST αž‚αžΊαž‡αžΆαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž resourceαŸ” + +### Initial Response Line(Status Line) + +The initial response line, αž αŸ…αžαžΆ status line, αž€αŸαž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€αž”αžΈαžŠαŸ‚αž›αž”αŸ‚αž„αž…αŸ‚αž€αžŠαŸ„αž™αž€αž“αŸ’αž›αŸ‚αž„: + +- HTTP version +- Response status code αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž›αž‘αŸ’αž’αž•αž›αž“αŸƒ request, αž“αž·αž„αž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈ status code. αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒ status lines αž‚αžΊ: + HTTP/1.0 200 OK + or + HTTP/1.0 404 Not Found + Notes: + +Status codes αžŠαŸ‚αž€αž‚αŸαž”αŸ’αžšαžΎαž…αŸ’αžšαžΎαž„αž‡αžΆαž„αž‚αŸαž‚αžΊ: +200 OK: The request succeeded, and the resulting resource (e.g. file or script output) is returned in the message body. +500 Server Error +A complete list of HTTP status code can be found [here](https://httpstatuses.com/). It can be also found [here](https://httpstatusdogs.com/). + +### Header Fields + +αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αžƒαžΎαž‰αž“αŸ… screenshot αžαžΆαž„αž›αžΎ, header lines αž•αŸ’αžαž›αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈ request ឬ response, αž¬αž’αŸ†αž–αžΈ object αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž€αŸ’αž“αž»αž„ message bodyαŸ” + +```sh +GET / HTTP/1.1 +Host: thirtydaysofpython-v1-final.herokuapp.com +Connection: keep-alive +Pragma: no-cache +Cache-Control: no-cache +Upgrade-Insecure-Requests: 1 +User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36 +Sec-Fetch-User: ?1 +Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 +Sec-Fetch-Site: same-origin +Sec-Fetch-Mode: navigate +Referer: https://thirtydaysofpython-v1-final.herokuapp.com/post +Accept-Encoding: gzip, deflate, br +Accept-Language: en-GB,en;q=0.9,fi-FI;q=0.8,fi;q=0.7,en-CA;q=0.6,en-US;q=0.5,fr;q=0.4 +``` + +### The message body + +HTTP message αž’αžΆαž…αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈ header linesαŸ” αž€αŸ’αž“αž»αž„ response, αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž› requested resource αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αžαŸ’αžšαž‘αž”αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹ client, αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆ explanatory text αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“ errorαŸ” αž€αŸ’αž“αž»αž„ request, αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž› user-entered data ឬ uploaded files αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ… serverαŸ” + +αž”αŸ’αžšαžŸαž·αž“αž”αžΎ HTTP message αž˜αžΆαž“ body, αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž˜αžΆαž“ header lines αž€αŸ’αž“αž»αž„ message αžŠαŸ‚αž›αž”αž€αžŸαŸ’αžšαžΆαž™ bodyαŸ” αž‡αžΆαž–αž·αžŸαŸαžŸ, + +The Content-Type: header αž’αŸ„αž™ MIME-type αž“αŸƒ data αž€αŸ’αž“αž»αž„ body(text/html, application/json, text/plain, text/css, image/gif). +The Content-Length: header αž’αŸ„αž™αž…αŸ†αž“αž½αž“ bytes αž€αŸ’αž“αž»αž„ bodyαŸ” + +### Request Methods + +GET, POST, PUT αž“αž·αž„ DELETE αž‚αžΊαž‡αžΆ HTTP request methods αžŠαŸ‚αž›αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž API ឬ CRUD operation applicationαŸ” + +1. GET: GET method αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž–αžΈ server αžŠαŸ„αž™αž”αŸ’αžšαžΎ URIαŸ” Requests αž”αŸ’αžšαžΎ GET αž‚αž½αžšαžαŸ‚αž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž αžΎαž™αž˜αž·αž“αž‚αž½αžšαž˜αžΆαž“αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸ…αž›αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ„αŸ‡αž‘αŸαŸ” + +2. POST: POST request αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž data αž“αž·αž„αž”αž‰αŸ’αž…αžΌαž“ data αž‘αŸ…αž€αžΆαž“αŸ‹ server, αž§αž‘αžΆαž αžšαžŽαŸ, creating a new post, file upload, etc. using HTML formsαŸ” + +3. PUT: αž”αŸ’αžαžΌαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αžΌαžœ representations αž“αŸƒ resource αž™αžΎαž„αž…αžΆαž”αŸ‹αž™αž€αž‡αžΆαž˜αž½αž™ uploaded content αž“αž·αž„αž™αžΎαž„αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈ αž€αŸ‚αž”αŸ’αžšαŸ‚αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” + +4. DELETE: αž›αž»αž”αž‘αž·αž“αŸ’αž“αž“αŸαž™ + +[<< Day 27](../27_Day_Python_with_mongodb/27_python_with_mongodb.md) | [Day 29 >>](../29_Day_Building_API/29_building_API.md) \ No newline at end of file diff --git a/Khmer/29_Day_Building_API/29_building_API.md b/Khmer/29_Day_Building_API/29_building_API.md new file mode 100644 index 000000000..b9da7bf9f --- /dev/null +++ b/Khmer/29_Day_Building_API/29_building_API.md @@ -0,0 +1,494 @@ +
+

30 Days Of Python: Day 29 - Building an API

+ + + + + Twitter Follow + + +Author: +Asabeneh Yetayeh
+Second Edition: July, 2021 +
+ +
+ +[<< Day 28](../28_Day_API/28_API.md) | [Day 29 >>](../30_Day_Conclusions/30_conclusions.md) + +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [Day 29](#day-29) +- [Building API](#building-api) + - [Structure of an API](#structure-of-an-api) + - [Retrieving data using get](#retrieving-data-using-get) + - [Getting a document by id](#getting-a-document-by-id) + - [Creating data using POST](#creating-data-using-post) + - [Updating using PUT](#updating-using-put) + - [Deleting a document using Delete](#deleting-a-document-using-delete) + +## Day 29 + +## Building API + +αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈ RESTful API αžŠαŸ‚αž€αž”αŸ’αžšαžΎ HTTP request methods αžŠαžΎαž˜αŸ’αž”αžΈ GET, PUT, POST αž“αž·αž„ DELETE dataαŸ” + +RESTful API αž‚αžΊαž‡αžΆ application program interface (API) αžŠαŸ‚αž›αž”αŸ’αžšαžΎ HTTP requests αžŠαžΎαž˜αŸ’αž”αžΈ GET, PUT, POST αž“αž·αž„ DELETE dataαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž˜αž»αž“αž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αžšαŸ€αž“αž’αŸ†αž–αžΈ Python, flask αž“αž·αž„ mongoDBαŸ” αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αžŠαŸ‚αž›αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž RESTful API αžŠαŸ„αž™αž”αŸ’αžšαžΎ Python flask αž“αž·αž„ mongoDB databaseαŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αžΆαž“ CRUD(Create, Read, Update, Delete) operation αž˜αžΆαž“ API αžŠαžΎαž˜αŸ’αž”αžΈ create data, αžŠαžΎαž˜αŸ’αž”αžΈ get data, αžŠαžΎαž˜αŸ’αž”αžΈ update data ឬ αžŠαžΎαž˜αŸ’αž”αžΈ delete data αž–αžΈ databaseαŸ” + +Browser αž’αžΆαž…αžαŸ‚αž™αž€αž”αžΆαž“ request. αžŠαžΌαž…αŸ’αž“αŸαŸ‡, αž™αžΎαž„αžαŸ’αžšαžΌαžœαž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž’αžΆαž…αž‡αž½αž™αž™αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ request methods(GET, POST, PUT, DELETE)αŸ” + +αž§αž‘αžΆαž αžšαžŽαŸ API + +- Countries API: https://restcountries.eu/rest/v2/all +- Cats breed API: https://api.thecatapi.com/v1/breeds + +[Postman](https://www.getpostman.com/) αž‡αžΆαž§αž”αž€αžšαžŽαŸαžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž API αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡, αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž’αŸ’αžœαžΎαž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž…αžΌαž› [download postman](https://www.getpostman.com/). αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αž‘αŸ€αžαž‚αžΊ [Insomnia](https://insomnia.rest/download). + +![Postman](../images/postman.png) + +### Structure of an API + +API end point αž‚αžΊαž‡αžΆ URL αžŠαŸ‚αž›αž’αžΆαž…αž‡αž½αž™αžŠαž›αŸ‹αž€αžΆαžš retrieve, create, update ឬ delete αž’αž“αž’αžΆαž“αžŽαžΆαž˜αž½αž™αŸ” αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸαŸ‡αž˜αžΆαž“αžšαžΌαž”αžšαžΆαž„αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ– +αž§αž‘αžΆαž αžšαžŽαŸ: +https://api.twitter.com/1.1/lists/members.json +αž”αž‰αŸ’αž‡αžΌαž“αžŸαž˜αžΆαž‡αž·αž€αž“αŸƒαž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ” Private list αž“αŸƒαžŸαž˜αžΆαž‡αž·αž€ αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹αž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αŸ” +αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαžˆαŸ’αž˜αŸ„αŸ‡αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž”αž“αŸ’αžαžŠαŸ„αž™ version αž”αž“αŸ’αžαžŠαŸ„αž™ αž‚αŸ„αž™αžŠαŸ…αž“αŸƒ APIαŸ” +The methods: +HTTP methods & URLs + +API αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸƒ HTTP methods αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚ object: + +```sh +GET Used for object retrieval αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αžΆαž‰αž™αž€αžœαžαŸ’αžαž» +POST Used for object creation and object actions αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžœαžαŸ’αžαž» αž“αž·αž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžαŸ’αžαž» +PUT Used for object update αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚ +DELETE Used for object deletion αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž›αž»αž” +``` + +αžŸαžΌαž˜αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž API αžŠαŸ‚αž›αž”αŸ’αžšαž˜αžΌαž›αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈ 30DaysOfPython studentsαŸ” αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαž˜αžΌαž› name, country, city, date of birth, skills αž“αž·αž„ bio. + +αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αž API αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ: + +- Postman +- Python +- Flask +- MongoDB + +### Retrieving data using get + +Iαž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž αžΆαž“αž“αŸαŸ‡, αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž›αŸ‚αž„αžαŸ’αž›αžΆαž™ αž αžΎαž™αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž‡αžΆ jsonαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž‡αžΆ json, αž“αžΉαž„αž”αŸ’αžšαžΎ json module αž“αž·αž„ Response moduleαŸ” + +```py +# let's import the flask + +from flask import Flask, Response +import json + +app = Flask(__name__) + +@app.route('/api/v1.0/students', methods = ['GET']) +def students (): + student_list = [ + { + 'name':'Asabeneh', + 'country':'Finland', + 'city':'Helsinki', + 'skills':['HTML', 'CSS','JavaScript','Python'] + }, + { + 'name':'David', + 'country':'UK', + 'city':'London', + 'skills':['Python','MongoDB'] + }, + { + 'name':'John', + 'country':'Sweden', + 'city':'Stockholm', + 'skills':['Java','C#'] + } + ] + return Response(json.dumps(student_list), mimetype='application/json') + + +if __name__ == '__main__': + # for deployment + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αžŸαž»αŸ† URL http://localhost:5000/api/v1.0/students αž“αŸ…αž›αžΎ browser αž’αŸ’αž“αž€αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž“αŸαŸ‡: + +![Get on browser](../images/get_on_browser.png) + +αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αžŸαž»αŸ† URL http://localhost:5000/api/v1.0/students αž“αŸ…αž›αžΎ browser αž’αŸ’αž“αž€αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž“αŸαŸ‡: + +![Get on postman](../images/get_on_postman.png) + +αž€αŸ’αžšαŸ…αž–αžΈαž€αžΆαžšαž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž›αŸ‚αž„αžαŸ’αž›αžΆαž™ αžŸαžΌαž˜αž™αžΎαž„αž—αŸ’αž‡αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ flask αž‡αžΆαž˜αž½αž™ MongoDB αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈ MongoDB database αŸ” + +```py +# let's import the flask + +from flask import Flask, Response +import json +import pymongo + + +app = Flask(__name__) + +# +MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database + +@app.route('/api/v1.0/students', methods = ['GET']) +def students (): + + return Response(json.dumps(student), mimetype='application/json') + + +if __name__ == '__main__': + # for deployment + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +αžŠαŸ„αž™αž—αŸ’αž‡αžΆαž”αŸ‹ flask, αž™αžΎαž„αž’αžΆαž…αž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž™αž€αžšαž”αžŸαŸ‹αžŸαž·αžŸαŸ’αžŸαž–αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ thirty_days_of_python αŸ” + +```sh +[ + { + "_id": { + "$oid": "5df68a21f106fe2d315bbc8b" + }, + "name": "Asabeneh", + "country": "Finland", + "city": "Helsinki", + "age": 38 + }, + { + "_id": { + "$oid": "5df68a23f106fe2d315bbc8c" + }, + "name": "David", + "country": "UK", + "city": "London", + "age": 34 + }, + { + "_id": { + "$oid": "5df68a23f106fe2d315bbc8e" + }, + "name": "Sami", + "country": "Finland", + "city": "Helsinki", + "age": 25 + } +] +``` + +### Getting a document by id + +αž™αžΎαž„αž’αžΆαž…αž™αž€αž”αžΆαž“ document αž˜αž½αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎ id, αžαŸ„αŸ‡αž“αžΆαŸ†αž™αžΎαž„αž™αž€ Asabeneh αžŠαŸ„αž™αž”αŸ’αžšαžΎ id. +http://localhost:5000/api/v1.0/students/5df68a21f106fe2d315bbc8b + +```py +# let's import the flask + +from flask import Flask, Response +import json +from bson.objectid import ObjectId +import json +from bson.json_util import dumps +import pymongo + + +app = Flask(__name__) + +# +MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database + +@app.route('/api/v1.0/students', methods = ['GET']) +def students (): + + return Response(json.dumps(student), mimetype='application/json') +@app.route('/api/v1.0/students/', methods = ['GET']) +def single_student (id): + student = db.students.find({'_id':ObjectId(id)}) + return Response(dumps(student), mimetype='application/json') + +if __name__ == '__main__': + # for deployment + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +```sh +[ + { + "_id": { + "$oid": "5df68a21f106fe2d315bbc8b" + }, + "name": "Asabeneh", + "country": "Finland", + "city": "Helsinki", + "age": 38 + } +] +``` + +### Creating data using POST + +αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ POST request method αžŠαžΎαž˜αŸ’αž”αžΈ create data + +```py +# let's import the flask + +from flask import Flask, Response +import json +from bson.objectid import ObjectId +import json +from bson.json_util import dumps +import pymongo +from datetime import datetime + + +app = Flask(__name__) + +# +MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database + +@app.route('/api/v1.0/students', methods = ['GET']) +def students (): + + return Response(json.dumps(student), mimetype='application/json') +@app.route('/api/v1.0/students/', methods = ['GET']) +def single_student (id): + student = db.students.find({'_id':ObjectId(id)}) + return Response(dumps(student), mimetype='application/json') +@app.route('/api/v1.0/students', methods = ['POST']) +def create_student (): + name = request.form['name'] + country = request.form['country'] + city = request.form['city'] + skills = request.form['skills'].split(', ') + bio = request.form['bio'] + birthyear = request.form['birthyear'] + created_at = datetime.now() + student = { + 'name': name, + 'country': country, + 'city': city, + 'birthyear': birthyear, + 'skills': skills, + 'bio': bio, + 'created_at': created_at + + } + db.students.insert_one(student) + return ; +def update_student (id): +if __name__ == '__main__': + # for deployment + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +### Updating using PUT + +```py +# let's import the flask + +from flask import Flask, Response +import json +from bson.objectid import ObjectId +import json +from bson.json_util import dumps +import pymongo +from datetime import datetime + + +app = Flask(__name__) + +# +MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database + +@app.route('/api/v1.0/students', methods = ['GET']) +def students (): + + return Response(json.dumps(student), mimetype='application/json') +@app.route('/api/v1.0/students/', methods = ['GET']) +def single_student (id): + student = db.students.find({'_id':ObjectId(id)}) + return Response(dumps(student), mimetype='application/json') +@app.route('/api/v1.0/students', methods = ['POST']) +def create_student (): + name = request.form['name'] + country = request.form['country'] + city = request.form['city'] + skills = request.form['skills'].split(', ') + bio = request.form['bio'] + birthyear = request.form['birthyear'] + created_at = datetime.now() + student = { + 'name': name, + 'country': country, + 'city': city, + 'birthyear': birthyear, + 'skills': skills, + 'bio': bio, + 'created_at': created_at + + } + db.students.insert_one(student) + return +@app.route('/api/v1.0/students/', methods = ['PUT']) # this decorator create the home route +def update_student (id): + query = {"_id":ObjectId(id)} + name = request.form['name'] + country = request.form['country'] + city = request.form['city'] + skills = request.form['skills'].split(', ') + bio = request.form['bio'] + birthyear = request.form['birthyear'] + created_at = datetime.now() + student = { + 'name': name, + 'country': country, + 'city': city, + 'birthyear': birthyear, + 'skills': skills, + 'bio': bio, + 'created_at': created_at + + } + db.students.update_one(query, student) + # return Response(dumps({"result":"a new student has been created"}), mimetype='application/json') + return +def update_student (id): +if __name__ == '__main__': + # for deployment + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +### Deleting a document using Delete + +```py +# let's import the flask + +from flask import Flask, Response +import json +from bson.objectid import ObjectId +import json +from bson.json_util import dumps +import pymongo +from datetime import datetime + + +app = Flask(__name__) + +# +MONGODB_URI='mongodb+srv://asabeneh:your_password@30daysofpython-twxkr.mongodb.net/test?retryWrites=true&w=majority' +client = pymongo.MongoClient(MONGODB_URI) +db = client['thirty_days_of_python'] # accessing the database + +@app.route('/api/v1.0/students', methods = ['GET']) +def students (): + + return Response(json.dumps(student), mimetype='application/json') +@app.route('/api/v1.0/students/', methods = ['GET']) +def single_student (id): + student = db.students.find({'_id':ObjectId(id)}) + return Response(dumps(student), mimetype='application/json') +@app.route('/api/v1.0/students', methods = ['POST']) +def create_student (): + name = request.form['name'] + country = request.form['country'] + city = request.form['city'] + skills = request.form['skills'].split(', ') + bio = request.form['bio'] + birthyear = request.form['birthyear'] + created_at = datetime.now() + student = { + 'name': name, + 'country': country, + 'city': city, + 'birthyear': birthyear, + 'skills': skills, + 'bio': bio, + 'created_at': created_at + + } + db.students.insert_one(student) + return +@app.route('/api/v1.0/students/', methods = ['PUT']) # this decorator create the home route +def update_student (id): + query = {"_id":ObjectId(id)} + name = request.form['name'] + country = request.form['country'] + city = request.form['city'] + skills = request.form['skills'].split(', ') + bio = request.form['bio'] + birthyear = request.form['birthyear'] + created_at = datetime.now() + student = { + 'name': name, + 'country': country, + 'city': city, + 'birthyear': birthyear, + 'skills': skills, + 'bio': bio, + 'created_at': created_at + + } + db.students.update_one(query, student) + # return Response(dumps({"result":"a new student has been created"}), mimetype='application/json') + return +@app.route('/api/v1.0/students/', methods = ['PUT']) # this decorator create the home route +def update_student (id): + query = {"_id":ObjectId(id)} + name = request.form['name'] + country = request.form['country'] + city = request.form['city'] + skills = request.form['skills'].split(', ') + bio = request.form['bio'] + birthyear = request.form['birthyear'] + created_at = datetime.now() + student = { + 'name': name, + 'country': country, + 'city': city, + 'birthyear': birthyear, + 'skills': skills, + 'bio': bio, + 'created_at': created_at + + } + db.students.update_one(query, student) + # return Response(dumps({"result":"a new student has been created"}), mimetype='application/json') + return ; +@app.route('/api/v1.0/students/', methods = ['DELETE']) +def delete_student (id): + db.students.delete_one({"_id":ObjectId(id)}) + return +if __name__ == '__main__': + # for deployment + # to make it work for both production and development + port = int(os.environ.get("PORT", 5000)) + app.run(debug=True, host='0.0.0.0', port=port) +``` + +[<< Day 28](../28_Day_API/28_API.md) | [Day 30 >>](../30_Day_Conclusions/30_conclusions.md) diff --git a/Khmer/30_Day_Conclusions/30_conclusions.md b/Khmer/30_Day_Conclusions/30_conclusions.md new file mode 100644 index 000000000..7442cffaf --- /dev/null +++ b/Khmer/30_Day_Conclusions/30_conclusions.md @@ -0,0 +1,38 @@ +
+ +

30 Days Of Python: Day 30- Conclusions

+ + + + + Twitter Follow + + + +Author: +Asabeneh Yetayeh
+Second Edition: July, 2021 +
+ +
+ +[<< Day 29](../29_Day_Building_API/29_building_API.md) +![30DaysOfPython](../images/30DaysOfPython_banner3@2x.png) + +- [Day 30](#day-30) + - [Conclusions](#conclusions) + +# Day 30 + +## Conclusions +αž‚αžΆαŸ†αž‘αŸ’αžšαž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžαŸ’αžαž»αž’αž”αŸ‹αžšαŸ†αž”αž“αŸ’αžαŸ‚αž˜ [Support the author for more educational materials](https://www.paypal.com/paypalme/asabeneh). + +## Testimony +αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžœαžΆαž‡αžΆαž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αŸαž‰αž˜αžαž·αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αŸ†αž–αžΈαž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’ αž“αž·αž„ 30DaysOfPyhtonαŸ” [link](https://testimonial-vdzd.onrender.com/) + +αž•αŸ’αžαž›αŸ‹ αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”: +http://thirtydayofpython-api.herokuapp.com/feedback + +πŸŽ‰ CONGRATULATIONS ! πŸŽ‰ + +[<< Day 29](../29_Day_Building_API/29_building_API.md) diff --git a/Khmer/Readme_Khmer_Ver.md b/Khmer/Readme_Khmer_Ver.md new file mode 100644 index 000000000..48f61e89a --- /dev/null +++ b/Khmer/Readme_Khmer_Ver.md @@ -0,0 +1,41 @@ +# 🐍 30 of Python + +αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž›αŸ†αž αžΆαžαŸ‹, αžŸαžΌαž˜αž˜αžΎαž› folder αž“αŸ…αžαžΆαž„αž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸ + +|# Day | Topics | +|------|:---------------------------------------------------------:| +| 01 | [Introduction](./Readme_Khmer_Ver.md)| +| 02 | [Variables, Built-in Functions](./02_Day_Variables_builtin_functions/02_Day_Variables_builtin_functions.md)| +| 03 | [Operators](./03_Day_Operators/03_operators.md)| +| 04 | [Strings](./04_Day_Strings/04_strings.md)| +| 05 | [Lists](./05_Day_Lists/05_lists.md)| +| 06 | [Tuples](./06_Day_Tuples/06_tuples.md)| +| 07 | [Sets](./07_Day_Sets/07_sets.md)| +| 08 | [Dictionaries](./08_Day_Dictionaries/08_dictionaries.md)| +| 09 | [Conditionals](./09_Day_Conditionals/09_conditionals.md)| +| 10 | [Loops](./10_Day_Loops/10_loops.md)| +| 11 | [Functions](./11_Day_Functions/11_functions.md)| +| 12 | [Modules](./12_Day_Modules/12_modules.md)| +| 13 | [List Comprehension](./13_Day_List_comprehension/13_list_comprehension.md)| +| 14 | [Higher Order Functions](./14_Day_Higher_order_functions/14_higher_order_functions.md)| +| 15 | [Python Type Errors](./15_Day_Python_type_errors/15_python_type_errors.md)| +| 16 | [Python Date time](./16_Day_Python_date_time/16_python_datetime.md) | +| 17 | [Exception Handling](./17_Day_Exception_handling/17_exception_handling.md)| +| 18 | [Regular Expressions](./18_Day_Regular_expressions/18_regular_expressions.md)| +| 19 | [File Handling](./19_Day_File_handling/19_file_handling.md)| +| 20 | [Python Package Manager](./20_Day_Python_package_manager/20_python_package_manager.md)| +| 21 | [Classes and Objects](./21_Day_Classes_and_objects/21_classes_and_objects.md)| +| 22 | [Web Scraping](./22_Day_Web_scraping/22_web_scraping.md)| +| 23 | [Virtual Environment](./23_Day_Virtual_environment/23_virtual_environment.md)| +| 24 | [Statistics](./24_Day_Statistics/24_statistics.md)| +| 25 | [Pandas](./25_Day_Pandas/25_pandas.md)| +| 26 | [Python web](./26_Day_Python_web/26_python_web.md)| +| 27 | [Python with MongoDB](./27_Day_Python_with_mongodb/27_python_with_mongodb.md)| +| 28 | [API](./28_Day_API/28_API.md)| +| 29 | [Building API](./29_Day_Building_API/29_building_API.md)| +| 30 | [Conclusions](./30_Day_Conclusions/30_conclusions.md)| + +🧑🧑🧑 HAPPY CODING 🧑🧑🧑 + +🧑🧑🧑 Translated by Team Vecheka and the boys of CS 480 🧑🧑🧑 + diff --git a/Khmer/images/30DaysOfPython_banner3@2x.png b/Khmer/images/30DaysOfPython_banner3@2x.png new file mode 100644 index 000000000..26dec5e26 Binary files /dev/null and b/Khmer/images/30DaysOfPython_banner3@2x.png differ diff --git a/Khmer/images/adding_on_python_shell.png b/Khmer/images/adding_on_python_shell.png new file mode 100644 index 000000000..2d0ac0dcc Binary files /dev/null and b/Khmer/images/adding_on_python_shell.png differ diff --git a/Khmer/images/arithmetic_operators.png b/Khmer/images/arithmetic_operators.png new file mode 100644 index 000000000..9287c02fd Binary files /dev/null and b/Khmer/images/arithmetic_operators.png differ diff --git a/Khmer/images/assignment_operators.png b/Khmer/images/assignment_operators.png new file mode 100644 index 000000000..8a6bbd314 Binary files /dev/null and b/Khmer/images/assignment_operators.png differ diff --git a/Khmer/images/assignmet_operators.png b/Khmer/images/assignmet_operators.png new file mode 100644 index 000000000..045b36e04 Binary files /dev/null and b/Khmer/images/assignmet_operators.png differ diff --git a/Khmer/images/become_patreon.png b/Khmer/images/become_patreon.png new file mode 100644 index 000000000..7de852e42 Binary files /dev/null and b/Khmer/images/become_patreon.png differ diff --git a/Khmer/images/builtin-functional-final.png b/Khmer/images/builtin-functional-final.png new file mode 100644 index 000000000..f98e9ac60 Binary files /dev/null and b/Khmer/images/builtin-functional-final.png differ diff --git a/Khmer/images/builtin-functions.png b/Khmer/images/builtin-functions.png new file mode 100644 index 000000000..c90180689 Binary files /dev/null and b/Khmer/images/builtin-functions.png differ diff --git a/Khmer/images/builtin-functions_practice.png b/Khmer/images/builtin-functions_practice.png new file mode 100644 index 000000000..adf3df831 Binary files /dev/null and b/Khmer/images/builtin-functions_practice.png differ diff --git a/Khmer/images/checking_data_types.png b/Khmer/images/checking_data_types.png new file mode 100644 index 000000000..3ff0f60f7 Binary files /dev/null and b/Khmer/images/checking_data_types.png differ diff --git a/Khmer/images/closing_opened_project.png b/Khmer/images/closing_opened_project.png new file mode 100644 index 000000000..6f49f08c2 Binary files /dev/null and b/Khmer/images/closing_opened_project.png differ diff --git a/Khmer/images/comparison_operators.png b/Khmer/images/comparison_operators.png new file mode 100644 index 000000000..306c9dd2f Binary files /dev/null and b/Khmer/images/comparison_operators.png differ diff --git a/Khmer/images/exit_from_shell.png b/Khmer/images/exit_from_shell.png new file mode 100644 index 000000000..e7e621e1a Binary files /dev/null and b/Khmer/images/exit_from_shell.png differ diff --git a/Khmer/images/fixing_syntax_error.png b/Khmer/images/fixing_syntax_error.png new file mode 100644 index 000000000..a9f8454dd Binary files /dev/null and b/Khmer/images/fixing_syntax_error.png differ diff --git a/Khmer/images/get_on_browser.png b/Khmer/images/get_on_browser.png new file mode 100644 index 000000000..7a532c95d Binary files /dev/null and b/Khmer/images/get_on_browser.png differ diff --git a/Khmer/images/get_on_postman.png b/Khmer/images/get_on_postman.png new file mode 100644 index 000000000..d562a8ff6 Binary files /dev/null and b/Khmer/images/get_on_postman.png differ diff --git a/Khmer/images/helloworld.png b/Khmer/images/helloworld.png new file mode 100644 index 000000000..1b00ec40b Binary files /dev/null and b/Khmer/images/helloworld.png differ diff --git a/Khmer/images/help_and_dir_builtin.png b/Khmer/images/help_and_dir_builtin.png new file mode 100644 index 000000000..2b168a208 Binary files /dev/null and b/Khmer/images/help_and_dir_builtin.png differ diff --git a/Khmer/images/how_to_open_project_on_vscode.png b/Khmer/images/how_to_open_project_on_vscode.png new file mode 100644 index 000000000..4027c90c8 Binary files /dev/null and b/Khmer/images/how_to_open_project_on_vscode.png differ diff --git a/Khmer/images/http_request_response_cycle.png b/Khmer/images/http_request_response_cycle.png new file mode 100644 index 000000000..b9698b2b3 Binary files /dev/null and b/Khmer/images/http_request_response_cycle.png differ diff --git a/Khmer/images/identity_operators.png b/Khmer/images/identity_operators.png new file mode 100644 index 000000000..b223221a3 Binary files /dev/null and b/Khmer/images/identity_operators.png differ diff --git a/Khmer/images/indentation.png b/Khmer/images/indentation.png new file mode 100644 index 000000000..dbe1209f8 Binary files /dev/null and b/Khmer/images/indentation.png differ diff --git a/Khmer/images/installing_on_macOS.png b/Khmer/images/installing_on_macOS.png new file mode 100644 index 000000000..cc93f94a4 Binary files /dev/null and b/Khmer/images/installing_on_macOS.png differ diff --git a/Khmer/images/installing_on_windows.png b/Khmer/images/installing_on_windows.png new file mode 100644 index 000000000..9c38d95c7 Binary files /dev/null and b/Khmer/images/installing_on_windows.png differ diff --git a/Khmer/images/invalid_syntax_error.png b/Khmer/images/invalid_syntax_error.png new file mode 100644 index 000000000..024c93463 Binary files /dev/null and b/Khmer/images/invalid_syntax_error.png differ diff --git a/Khmer/images/list_index.png b/Khmer/images/list_index.png new file mode 100644 index 000000000..355324e18 Binary files /dev/null and b/Khmer/images/list_index.png differ diff --git a/Khmer/images/list_negative_indexing.png b/Khmer/images/list_negative_indexing.png new file mode 100644 index 000000000..771c2a1a6 Binary files /dev/null and b/Khmer/images/list_negative_indexing.png differ diff --git a/Khmer/images/logical_operators.png b/Khmer/images/logical_operators.png new file mode 100644 index 000000000..815428efc Binary files /dev/null and b/Khmer/images/logical_operators.png differ diff --git a/Khmer/images/maths_on_python_shell.png b/Khmer/images/maths_on_python_shell.png new file mode 100644 index 000000000..f5fca7f69 Binary files /dev/null and b/Khmer/images/maths_on_python_shell.png differ diff --git a/Khmer/images/mongoDB/mongodb-add-user.png b/Khmer/images/mongoDB/mongodb-add-user.png new file mode 100644 index 000000000..cf8d3370a Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-add-user.png differ diff --git a/Khmer/images/mongoDB/mongodb-allow-ip-access.png b/Khmer/images/mongoDB/mongodb-allow-ip-access.png new file mode 100644 index 000000000..f7b5902bf Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-allow-ip-access.png differ diff --git a/Khmer/images/mongoDB/mongodb-cluster-name.png b/Khmer/images/mongoDB/mongodb-cluster-name.png new file mode 100644 index 000000000..ad7fadc73 Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-cluster-name.png differ diff --git a/Khmer/images/mongoDB/mongodb-create-uri.png b/Khmer/images/mongoDB/mongodb-create-uri.png new file mode 100644 index 000000000..08e466b2a Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-create-uri.png differ diff --git a/Khmer/images/mongoDB/mongodb-creating_database.png b/Khmer/images/mongoDB/mongodb-creating_database.png new file mode 100644 index 000000000..4a7676610 Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-creating_database.png differ diff --git a/Khmer/images/mongoDB/mongodb-free.png b/Khmer/images/mongoDB/mongodb-free.png new file mode 100644 index 000000000..e956f7625 Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-free.png differ diff --git a/Khmer/images/mongoDB/mongodb-python-driver.png b/Khmer/images/mongoDB/mongodb-python-driver.png new file mode 100644 index 000000000..ed6b1bbbd Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-python-driver.png differ diff --git a/Khmer/images/mongoDB/mongodb-register.png b/Khmer/images/mongoDB/mongodb-register.png new file mode 100644 index 000000000..eeaa335d8 Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-register.png differ diff --git a/Khmer/images/mongoDB/mongodb-sandbox.png b/Khmer/images/mongoDB/mongodb-sandbox.png new file mode 100644 index 000000000..7fe36f2b0 Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-sandbox.png differ diff --git a/Khmer/images/mongoDB/mongodb-signup-page.png b/Khmer/images/mongoDB/mongodb-signup-page.png new file mode 100644 index 000000000..3980c9c96 Binary files /dev/null and b/Khmer/images/mongoDB/mongodb-signup-page.png differ diff --git a/Khmer/images/mongoDB/sql-vs-nosql.png b/Khmer/images/mongoDB/sql-vs-nosql.png new file mode 100644 index 000000000..87c9a78ec Binary files /dev/null and b/Khmer/images/mongoDB/sql-vs-nosql.png differ diff --git a/Khmer/images/opening_project.png b/Khmer/images/opening_project.png new file mode 100644 index 000000000..580c8a361 Binary files /dev/null and b/Khmer/images/opening_project.png differ diff --git a/Khmer/images/opening_python_shell.png b/Khmer/images/opening_python_shell.png new file mode 100644 index 000000000..f3c1d867a Binary files /dev/null and b/Khmer/images/opening_python_shell.png differ diff --git a/Khmer/images/pandas-dataframe-1.png b/Khmer/images/pandas-dataframe-1.png new file mode 100644 index 000000000..19f662f83 Binary files /dev/null and b/Khmer/images/pandas-dataframe-1.png differ diff --git a/Khmer/images/pandas-dataframe-2.png b/Khmer/images/pandas-dataframe-2.png new file mode 100644 index 000000000..08351a2ca Binary files /dev/null and b/Khmer/images/pandas-dataframe-2.png differ diff --git a/Khmer/images/pandas-series-1.png b/Khmer/images/pandas-series-1.png new file mode 100644 index 000000000..7a08e4684 Binary files /dev/null and b/Khmer/images/pandas-series-1.png differ diff --git a/Khmer/images/pandas-series-2.png b/Khmer/images/pandas-series-2.png new file mode 100644 index 000000000..a8251cffb Binary files /dev/null and b/Khmer/images/pandas-series-2.png differ diff --git a/Khmer/images/pandas-series-3.png b/Khmer/images/pandas-series-3.png new file mode 100644 index 000000000..efb95b907 Binary files /dev/null and b/Khmer/images/pandas-series-3.png differ diff --git a/Khmer/images/paypal_lg.png b/Khmer/images/paypal_lg.png new file mode 100644 index 000000000..cc2a45a1d Binary files /dev/null and b/Khmer/images/paypal_lg.png differ diff --git a/Khmer/images/postman.png b/Khmer/images/postman.png new file mode 100644 index 000000000..18a4d6a15 Binary files /dev/null and b/Khmer/images/postman.png differ diff --git a/Khmer/images/python_versio.png b/Khmer/images/python_versio.png new file mode 100644 index 000000000..14e0ea3a0 Binary files /dev/null and b/Khmer/images/python_versio.png differ diff --git a/Khmer/images/regex.png b/Khmer/images/regex.png new file mode 100644 index 000000000..c7116b4dd Binary files /dev/null and b/Khmer/images/regex.png differ diff --git a/Khmer/images/request_response_header.png b/Khmer/images/request_response_header.png new file mode 100644 index 000000000..b3322ba51 Binary files /dev/null and b/Khmer/images/request_response_header.png differ diff --git a/Khmer/images/running_python_script.png b/Khmer/images/running_python_script.png new file mode 100644 index 000000000..b880b9232 Binary files /dev/null and b/Khmer/images/running_python_script.png differ diff --git a/Khmer/images/strftime.png b/Khmer/images/strftime.png new file mode 100644 index 000000000..863b9531a Binary files /dev/null and b/Khmer/images/strftime.png differ diff --git a/Khmer/images/string_index.png b/Khmer/images/string_index.png new file mode 100644 index 000000000..bf4c3f156 Binary files /dev/null and b/Khmer/images/string_index.png differ diff --git a/Khmer/images/try_except.png b/Khmer/images/try_except.png new file mode 100644 index 000000000..8983d4b21 Binary files /dev/null and b/Khmer/images/try_except.png differ diff --git a/Khmer/images/tuple_negative_indexing.png b/Khmer/images/tuple_negative_indexing.png new file mode 100644 index 000000000..364bb8641 Binary files /dev/null and b/Khmer/images/tuple_negative_indexing.png differ diff --git a/Khmer/images/tuples_index.png b/Khmer/images/tuples_index.png new file mode 100644 index 000000000..641c325a3 Binary files /dev/null and b/Khmer/images/tuples_index.png differ diff --git a/Khmer/images/vscode.png b/Khmer/images/vscode.png new file mode 100644 index 000000000..724fc109d Binary files /dev/null and b/Khmer/images/vscode.png differ diff --git a/Khmer/images/vscode_ui.png b/Khmer/images/vscode_ui.png new file mode 100644 index 000000000..7210a088e Binary files /dev/null and b/Khmer/images/vscode_ui.png differ diff --git a/Khmer/images/writing_string_on_shell.png b/Khmer/images/writing_string_on_shell.png new file mode 100644 index 000000000..c2d5c498d Binary files /dev/null and b/Khmer/images/writing_string_on_shell.png differ