From 62a0ea9d51057a743168a5b1db14794c05ed74ea Mon Sep 17 00:00:00 2001 From: Rasbin Rijal Date: Thu, 21 Nov 2019 12:55:05 +0200 Subject: [PATCH 01/27] minor typos fix --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index a148484..06c339b 100644 --- a/readme.md +++ b/readme.md @@ -363,7 +363,7 @@ num-1 ``` We will use standard python variable naming style which has been adopted by many python developers. The example below is an example of standard naming of variables, underscore when the variable name is long. - When we assign a certain data type to a variable is called variable declaration. For instance in the example below the my first name is assigned to a variable first_name. The equal sign is an assignment operator. Assigning means storing data in the variable. + When we assign a certain data type to a variable is called variable declaration. For instance in the example below my first name is assigned to a variable first_name. The equal sign is an assignment operator. Assigning means storing data in the variable. *Example:* @@ -391,7 +391,7 @@ person_info = { ```py print('Hello, World!') print('Hello',',', 'World','!') # it can take multiple arguments - print(len('Hello, World!')) # it takes only on argument + print(len('Hello, World!')) # it takes only one argument ``` Let's print and also find the length of the variables declared at the top: @@ -432,7 +432,7 @@ print('Married: ', is_married) ``` ## Data Types - Different data types in python. There are different data type in python programming. To identify the data tpe we use the type method. In this section, we will see data types in detail. + Different data types in python. There are different data type in python programming. To identify the data type we use the type method. In this section, we will see data types in detail. *Example: * ```py From 4d5421fcbd87bb6546792cec486fdc2786e48fc5 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Thu, 21 Nov 2019 19:32:48 +0200 Subject: [PATCH 02/27] day 2 bug fixes --- .DS_Store | Bin 8196 -> 0 bytes images/.DS_Store | Bin 10244 -> 0 bytes readme.md | 24 ++++++++++++------------ 3 files changed, 12 insertions(+), 12 deletions(-) delete mode 100644 .DS_Store delete mode 100644 images/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index ffe763aa765dcd565a8cd775ed67c59b38daaf1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMTWl0n82|4 zAjm+Ffgl4x2L2lvpqecjD^mBRHW-5p1R3~WW^$8T}IqdRHgEh-VHM zl^Bdc27(OSoB?rmUjiDaa1P=N&hPXf;RVt*{pB^!btxE-BHKyO!P$3sxGm$jY0{Lz z5J^)c1z2En!}kF3VD6+|biYK-nfAXOe4dy#4aaS3`xZ+|%a$xHXRLx%EU!2jo3e8; zS9LQ^x0*gKR>P`0mGI{ywr$SO)x;4)&&8G69@}zN!_w29v!Ur^a$?M|G&|RAXDrR} z_K8UaW1R80Qa3Zx-qFz#Y46-N+Y*`S>}+d^Y~6Ct>?~)i8#nLnKb<;ve&+t!2VS6n zsGf-1S5A1~5uK|(YqX(s4r3Wo&>)5-S8=u4i@NB>}g)D&$?7rfZC`hG>&yftP`XXq#LqqR_2@7T5!Qa14@QK@J{= zC*VoA2$$e8yan&UC-5nJ0bjxuxCTGKPw)%;2EW4}@F$id!wRg#I$VqEumLyWHr$Ro zaTj*s0UW?V9Ksl$z>^rq(>Q@PPGcG!oWY0i0zQh5;nVmczJxF1EBGe9gYV-9_#u9T zU*XsIz5InGc`gsib$-O_G%KX6|G<`GcO&hE z^dc+5!J-U&6<&vT;bY?775E0O!;kPY{7S4V!xgxSI2Xb@FpTT537c^PwqOT#68m-# z|9Y_x_hUbCFovTzhU0h?6Q~gbCvghT5Cb!q#T?GzgT%v!@ezEAnD`7ni_Z}kFBLGa zKhHUd_(mb~vaz&f+SVk=1zW2iO{GVrGA2q;D`A>e6X3!|l4u1*=r!`Vu?X=6-ivtP z>H-g1-U_W$22m%@|9gvn|GyPN4Ppo~5M-c82C%F**4s_WeC02+6KCxR_0!Zv6LxbF qJr^3h<2a#r94DOr!;t0?G8H~iALk^JgxWv;At0##LH!TvKl}~1l57M3 diff --git a/images/.DS_Store b/images/.DS_Store deleted file mode 100644 index c85000da3baedd1e3495749dfbef91da9aaa184c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMU279T6ur~-q4+ID(o~cceCUhck0OK;1wm9OKF4O$+G?5&*`yzDdGTNPEQr6u zXMc=8pq_JQlJ0JIX$uvE+zGpPcXsZXd(Ygt!%RfPt&KWQL?RJc#6@}I3T`EZ-+7%V zbD^dV>7XxiD5<=YEqRY8E5?8^Ui~(a{$^i32gp0Bf z#oiZBkYXPMO-5tg8Bb>sso_cuzG)4?98&ufzr+{{C8ViZ+t6mrWRWqKAwdJ7O zN570$^1{d)K;|Q+9FLr5NAMo-Xaz?r!F|Gbk?l!T?}57*tvc|!w1@c@1#d5)hyJkr zW|R&GK(5ILSU|>8c?1ShTy4BFMz&GYgiH~Q^rnw@k&Eg7ZRr03&|uSbjc{`4qlj~y zbGnpKc?FGce%2iwDF@65sm32ONA(r%$8%6 z^W=Q2Bkq1Co8ByVwTJj%oHI7cBLicZL#U%YSBajE0N0`-Pcd5Tptd4^E^wvH`gloB zo$<_;IV-N_bXvNOmDuK2=qn$&AOIC~lW55_N28;n? zV5S(D_ufW4|9@Hi|Nl&JV$K=^v&Mj1Xs$Qc;B`1#KjA;m+9O;aaj~%7*h^KxjZIju u$MJaKar|nidrZlK?~NeGUaC6kRUOiw=Ku3Q14{Q?V*7s)+yBqV{{Jt3XU6jY diff --git a/readme.md b/readme.md index a148484..b529ea4 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,7 @@ ![30DaysOfPython](./images/30DaysOfPython_banner3@2x.png) +## Table of Content - [Day 1](#day-1) - [Welcome](#welcome) - [Introduction](#introduction) @@ -139,6 +140,7 @@ The python interactive shell is good to try and test small script codes but it w If you installed visual studio code, let's see how to use it. #### How to visual studio code Open the visual studio code by double clicking the visual studio icon. When you open it you will get this kind of interface. Try to interact with the labelled icons. + ![Visual studio Code](images/vscode_ui.png) Create a folder name 30DaysOfPython on your desktop. Then open it using visual studio code. @@ -203,9 +205,9 @@ In python there are several types of data types. We will get started with the mo ```py 'Asabeneh' 'Finland' -"Python" -"I love teaching" -"I hope you are enjoying the first day" +'Python' +'I love teaching' +'I hope you are enjoying the first day' ``` #### Booleans A boolean data type is either True or False value. @@ -229,7 +231,7 @@ A python dictionary object is an unordered collection of data in a key:value pa **Example:** ```py -{"name":"Asabeneh", "country":"Finland", age:250, "is_married":True} +{'name':'Asabeneh', 'country':'Finland', age:250, 'is_married':True} ``` #### Tuple A tuple is an ordered collection of different data types like list but tuples can not be modified once they are created. They are immutable. @@ -276,10 +278,8 @@ helloworld.py print(type({'name':'Asabeneh'})) #Dictionary print(type({9.8, 3.14, 2.7})) #Tuple ``` - ![Running python script](./images/running_python_script.png) - ## Exercises - Day 1 1. Check the python version you are using 2. Open the python interactive shell and do the following operations. The operands are 3 and 4. Check the example above @@ -387,7 +387,7 @@ person_info = { ``` Let's use *print()* and *len()* built in functions. Print function will take multiple arguments. An argument is a value which we pass or put inside the function parenthesis, see the example below. - *Example:* + **Example:** ```py print('Hello, World!') print('Hello',',', 'World','!') # it can take multiple arguments @@ -396,7 +396,7 @@ person_info = { Let's print and also find the length of the variables declared at the top: - *Example:* + **Example:** ```py # Printing the values stored in the variables print('First name:', first_name) @@ -412,7 +412,7 @@ print('Person information: ', person_info) ``` Variable can also be declared in one line: - *Example:* + **Example:** ```py first_name, last_name, country, age, is_married = 'Asabeneh', 'Yetayeh', 'Helsink', 250, True print(first_name, last_name, country, age, is_married) @@ -434,7 +434,7 @@ print('Married: ', is_married) ## Data Types Different data types in python. There are different data type in python programming. To identify the data tpe we use the type method. In this section, we will see data types in detail. - *Example: * + **Example:** ```py # Different python data types # Let's declare different data types @@ -452,7 +452,7 @@ print(type(3.14)) print(type(1 + 1j)) print(type(True)) print(type([1, 2,3,4])) -print(type({"name":"Asabeneh","age":250, "is_married":250})) +print(type({'name':'Asabeneh','age':250, 'is_married':250})) print(type((1,2))) print(type(zip([1,2],[3,4]))) ``` @@ -513,7 +513,7 @@ print(weight, 'N') ## Boolean ## Exercises - Day 2 -1. Create a folder called day_2. Inside this folder create a file name called variables.py +1. Inside 30DaysOfPython create a folder called day_2. Inside this folder create a file name called variables.py 2. Writ a python comment saying 'Day 2: 30 Days of python programming' 3. Declare a first name variable and assign a value to it 4. Declare a last name variable and assign a value to it From 77eef5b6a48026fa91f2320025e7ad655d6a0691 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Thu, 21 Nov 2019 20:04:18 +0200 Subject: [PATCH 03/27] day 2 bug fixes --- readme.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index ac80eaf..290f91f 100644 --- a/readme.md +++ b/readme.md @@ -308,7 +308,7 @@ helloworld.py # Day 2 ## Built in functions -In python we have lots of built in functions. Built-in functions are globally available for your use. Some of the most frequently python built-in functions are the following: *print()*, *len()*, *type()*, *int()*, *float()*, *str()*, *input()*, *list()*, *dict()*, *min()*, *max()*, *sum()*,*sorted()*, *open()*,*file()*, *help()*, *dir*. In the following table you will see an exhaustive list of python built in functions taken from [python documentation](https://docs.python.org/2/library/functions.html). +In python we have lots of built in functions. Built-in functions are globally available for your use. Some of the most commonly used python built-in functions are the following: *print()*, *len()*, *type()*, *int()*, *float()*, *str()*, *input()*, *list()*, *dict()*, *min()*, *max()*, *sum()*, *sorted()*, *open()*, *file()*, *help()*, *dir*. In the following table you will see an exhaustive list of python built in functions taken from [python documentation](https://docs.python.org/2/library/functions.html). ![Built in Functions](images/builtin-functions.png) @@ -396,6 +396,7 @@ person_info = { Let's print and also find the length of the variables declared at the top: + **Example:** ```py # Printing the values stored in the variables @@ -414,7 +415,7 @@ print('Person information: ', person_info) **Example:** ```py - first_name, last_name, country, age, is_married = 'Asabeneh', 'Yetayeh', 'Helsink', 250, True +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) @@ -423,7 +424,7 @@ print('Age: ', age) print('Married: ', is_married) ``` Getting user input using the *input()* built-in function. Let's assign the data we get from a user into first_name and age variables. - *Example:* + **Example:** ```py first_name = input('What is your name: ') age = input('How old are you? ') @@ -457,10 +458,21 @@ print(type((1,2))) print(type(zip([1,2],[3,4]))) ``` ### Number - 1. Integers - 2. Floating Numbers + 1. Integers: Integer(negative, zero and positive) numbers + + Example: + ... -3, -2, -1, 0, 1, 2, 3 ... + 2. Floating Numbers(Decimal numbers) + + Example: + ... -3.5, -2.25, -1.0, 0.0, 1.1, 2.2, 3.5 ... 3. Complex Numbers + Example: + 1 + j, 2 + 4j, 1 - 1j + + + Numbers are python data types. Arithmetic Operators: +, -, *, / ```py From dbd62212e7763e07b3c5433c057b1450a31bc3db Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Fri, 22 Nov 2019 01:21:32 +0200 Subject: [PATCH 04/27] day 3 --- images/arithmetic_operators.png | Bin 0 -> 43349 bytes images/assignmet_operators.png | Bin 0 -> 60389 bytes images/comparison_operators.png | Bin 0 -> 39661 bytes images/identity_operators.png | Bin 0 -> 33339 bytes images/logical_operators.png | Bin 0 -> 44739 bytes readme.md | 392 +++++++++++++++++++++++++------- 6 files changed, 304 insertions(+), 88 deletions(-) create mode 100644 images/arithmetic_operators.png create mode 100644 images/assignmet_operators.png create mode 100644 images/comparison_operators.png create mode 100644 images/identity_operators.png create mode 100644 images/logical_operators.png diff --git a/images/arithmetic_operators.png b/images/arithmetic_operators.png new file mode 100644 index 0000000000000000000000000000000000000000..9287c02fd348cdb71885d328dcd76ddb15cf418d GIT binary patch literal 43349 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

C36VN%@_h9l*kkk}adwPM6 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 literal 0 HcmV?d00001 diff --git a/images/assignmet_operators.png b/images/assignmet_operators.png new file mode 100644 index 0000000000000000000000000000000000000000..045b36e0401336edbd387bd168f006de7613066e GIT binary patch literal 60389 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 literal 0 HcmV?d00001 diff --git a/images/comparison_operators.png b/images/comparison_operators.png new file mode 100644 index 0000000000000000000000000000000000000000..306c9dd2f1b620c7ff8e9be17bb55580dbbeda19 GIT binary patch literal 39661 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

fvvg;SzTOi8#U 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 literal 0 HcmV?d00001 diff --git a/images/identity_operators.png b/images/identity_operators.png new file mode 100644 index 0000000000000000000000000000000000000000..b223221a31111966bbc1e8ef27482df007933b30 GIT binary patch literal 33339 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 JDz5MI{{WfYR?q+d literal 0 HcmV?d00001 diff --git a/images/logical_operators.png b/images/logical_operators.png new file mode 100644 index 0000000000000000000000000000000000000000..815428efc3918de3ff0b06663f91d3f0371ebe8e GIT binary patch literal 44739 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 QSO@ 2) # True, because 3 is greater than 2 +print(3 >= 2) # True, because 3 is greater than 2 +print(3 < 2) # False, because 3 is greater than 2 +print(2 < 3) # True, because 2 is less than 3 +print(2 <= 3) # True, because 2 is less than 3 +print(3 == 2) # False, because 3 is not equal to 2 +print(3 != 2) # True, because 3 is not equal to 2 +print(len('mango') == len('avocado')) # False +print(len('mango') != len('avocado')) # True +print(len('mango') < len('avocado')) # False +print(len('milk') != len('meat')) # False +print(len('milk') == len('meat')) # False +print(len('tomato') == len('potato')) # True +print(len('python') > len('dragon')) + + + + +# Comparing something give either a True or 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) + + +``` +In addition to the above comparison operator python uses: +* *is*: Returns true if both variables are the same object(x is y) +* *is not*: Returns true if both variables are not the same object(x is not y) +* *in*: Returns True if a list with the a certain element(x in y) +* *not in*: Returns True if a list doesn't have the a certain element(x in y) + +```py +print('1 is 1', 1 is 1) # True - because the data values are the same +print('1 is not 2', 1 is not 2) # True - because 1 is not 2 +print('A in Asabeneh', 'A' in 'Asabeneh') # True - A found in the string +print('B in Asabeneh', 'B' in 'Asabeneh') # False -there is lowercase be in the string but not uppercase B +print('coding' in 'coding for all') # True - because the coding for all has the word coding +print('a in an:', 'a' in 'an') # True +print('4 is 2 ** 2:', 4 is 2 **2) # True + + +``` +### Logical Operators +Unlike other programming languages python uses the key word *and*, *or* and *not* for logical operator. Logical operators are used to combine conditional statements: + +![Logical Operators](./images/logical_operators.png) + +```py +print(3 > 2 and 4 > 3) # True - because both statements are true +print(3 > 2 and 4 < 3) # False - because the second statement is false +print(3 < 2 and 4 < 3) # False - because both statements are false +print(3 > 2 or 4 > 3) # True - because both statements are true +print(3 > 2 or 4 < 3) # True - because one of the statement is true +print(3 < 2 or 4 < 3) # False - because both statements are false +print(not 3 > 2) # False - because 3 > 2 is true, then not True gives False +print(not True) # False - Negation, the not operator turns true to false +print(not False) # True +print(not not True) # True +print(not not False) # False + +``` + +## Exercises - Day 3 +### Part 1 +1. Declare your age as integer variable +2. Declare your height as a float variable +3. Declare a complex number variable +4. Calculate an area of a triangle (area = 0.5 x b x h) +5. Calculate the perimeter of triangle (perimeter = a + b + c) +6. Calculate an of area rectangle (area = length x width) +7. Calculate the perimeter of rectangle (perimeter = 2 x (length + width)) +8. Calculate the area of a circle (area = 3.14 x r x r) +9. Calculate the circumference of a circle(c = 2 x pi x r) where pi = 3.14. +10. Calculate the slope, x-intercept and y-intercept of y = 2x -2 +11. Slope is (m = y2-y1/x2-x1). Find the slope between point (2, 2) and point(6,10) +12. Calculate the value of y (y = x2 + 6x + 9). Try to use different x value and figure out at what x value y is 0. +13. Compare the slope of q10 and 11 +14. Find the length of python and jargon and make a falsy comparison statment. +15. Use and operator to check if 'on' is found in both python and jargon +16. *I hope this course is not full of jargon*. Use *in* operator to check if *jargon* is in the sentence. +17. There is no 'on' in both dragon and python +18. Find the length of the text *python* and convert the value to float and convert it to string +19. Even numbers are divisible by 2 and the remainder is zero. How do you check if a number is even or not using python? + + + + From da95ee6c940c3a15dea55650751d7f27d4a783e6 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Fri, 22 Nov 2019 01:38:56 +0200 Subject: [PATCH 05/27] day 3 --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index d0c3d08..4e7616b 100644 --- a/readme.md +++ b/readme.md @@ -767,6 +767,7 @@ print(not not False) # False 17. There is no 'on' in both dragon and python 18. Find the length of the text *python* and convert the value to float and convert it to string 19. Even numbers are divisible by 2 and the remainder is zero. How do you check if a number is even or not using python? +20. The floor divison of 7 by 3 is equal to the int converted value of 2.7. From 6034178b17c2a8d99f993c7d506f2d0aa083b1b2 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Fri, 22 Nov 2019 08:16:08 +0200 Subject: [PATCH 06/27] Typo fixes --- readme.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index 4e7616b..7612903 100644 --- a/readme.md +++ b/readme.md @@ -145,7 +145,7 @@ The python interactive shell is good to try and test small script codes but it w [![Visual Studio Code](./images/vscode.png)](https://code.visualstudio.com/) If you installed visual studio code, let's see how to use it. -#### How to visual studio code +#### How to use visual studio code Open the visual studio code by double clicking the visual studio icon. When you open it you will get this kind of interface. Try to interact with the labelled icons. ![Visual studio Code](images/vscode_ui.png) @@ -206,7 +206,7 @@ In python there are several types of data types. We will get started with the mo Example 1 + j, 2 + 4j #### String - A collection of one or more characters under in single or double quote. If a string is more than one sentence we use triple quote. + A collection of one or more characters under a single or double quote. If a string is more than one sentence we use triple quote. **Example:** ```py @@ -217,7 +217,7 @@ In python there are several types of data types. We will get started with the mo 'I hope you are enjoying the first day' ``` #### Booleans -A boolean data type is either True or False value. +A boolean data type is either a True or False value. **Example:** ```python @@ -229,8 +229,8 @@ Python list is an ordered collection which allows to store of different data typ **Example:** ```py - ['Banana', 'Orange', 'Mango', 'Avocado'] # all the same data type in the list - ['Banana', 10, False, 9.81] # different data types in the list + ['Banana', 'Orange', 'Mango', 'Avocado'] # all the same data type in the list + ['Banana', 10, False, 9.81] # different data types in the list ``` #### Dictionary @@ -335,8 +335,8 @@ I believe, by now you are familiar with built-in functions. Let's do one more pr ## Variables -Variables are store data in a computer memory. Mnemonic variables recommend to use in many programming languages. A variable refers to an address in which a data is stored. -Number at the beginning, special character, hyphen are not allowed. A variable can have a short name (like x,y,z) or a more descriptive name (firstname, lastname, age, country). +Variables store data in a computer memory. Mnemonic variables are recommend to use in many programming languages. A variable refers to an a memory address in which a data is stored. +Number at the beginning, special character, hyphen are not allowed. A variable can have a short name (like x,y,z) but a more descriptive name (firstname, lastname, age, country) is highly recommended . Python Variable Name Rules - A variable name must start with a letter or the underscore character From 87bfe4860a5399eebeb2fcb8963f249c414faf7d Mon Sep 17 00:00:00 2001 From: Rijal Rasbin Date: Fri, 22 Nov 2019 10:14:57 +0200 Subject: [PATCH 07/27] Minor typo fixes on day 3 --- readme.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 7612903..8a526fb 100644 --- a/readme.md +++ b/readme.md @@ -561,7 +561,7 @@ print(True) print(False) ``` ## Operators: -Python language supports several types of operators. In this section, we will focus on few them. +Python language supports several types of operators. In this section, we will focus on few of them. ### Arithmetic Operators: * Addition(+): a + b * Subtraction(-): a -b @@ -619,7 +619,7 @@ remainder = a % b floor_division = a // b exponential = a ** b -# I should have used sum instead of total but sum is a built-in function try to avoid over ridding builtin functions +# I should have used sum instead of total but sum is a built-in function try to avoid overriding builtin functions print(total) # if you don't label your print with some string, you never know from where is the result is coming print('a + b = ', total) print('a - b = ', diff) @@ -719,7 +719,7 @@ In addition to the above comparison operator python uses: print('1 is 1', 1 is 1) # True - because the data values are the same print('1 is not 2', 1 is not 2) # True - because 1 is not 2 print('A in Asabeneh', 'A' in 'Asabeneh') # True - A found in the string -print('B in Asabeneh', 'B' in 'Asabeneh') # False -there is lowercase be in the string but not uppercase B +print('B in Asabeneh', 'B' in 'Asabeneh') # False -there is lowercase b in the string but not uppercase B print('coding' in 'coding for all') # True - because the coding for all has the word coding print('a in an:', 'a' in 'an') # True print('4 is 2 ** 2:', 4 is 2 **2) # True @@ -753,7 +753,7 @@ print(not not False) # False 3. Declare a complex number variable 4. Calculate an area of a triangle (area = 0.5 x b x h) 5. Calculate the perimeter of triangle (perimeter = a + b + c) -6. Calculate an of area rectangle (area = length x width) +6. Calculate an area of rectangle (area = length x width) 7. Calculate the perimeter of rectangle (perimeter = 2 x (length + width)) 8. Calculate the area of a circle (area = 3.14 x r x r) 9. Calculate the circumference of a circle(c = 2 x pi x r) where pi = 3.14. @@ -762,7 +762,7 @@ print(not not False) # False 12. Calculate the value of y (y = x2 + 6x + 9). Try to use different x value and figure out at what x value y is 0. 13. Compare the slope of q10 and 11 14. Find the length of python and jargon and make a falsy comparison statment. -15. Use and operator to check if 'on' is found in both python and jargon +15. Use *and* operator to check if 'on' is found in both python and jargon 16. *I hope this course is not full of jargon*. Use *in* operator to check if *jargon* is in the sentence. 17. There is no 'on' in both dragon and python 18. Find the length of the text *python* and convert the value to float and convert it to string From ee90c761eb35e617c458198a8ac4640a8f8727ca Mon Sep 17 00:00:00 2001 From: Rijal Rasbin Date: Fri, 22 Nov 2019 10:21:07 +0200 Subject: [PATCH 08/27] Correction in few comparison results --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 8a526fb..dbcfce3 100644 --- a/readme.md +++ b/readme.md @@ -691,11 +691,11 @@ print(3 == 2) # False, because 3 is not equal to 2 print(3 != 2) # True, because 3 is not equal to 2 print(len('mango') == len('avocado')) # False print(len('mango') != len('avocado')) # True -print(len('mango') < len('avocado')) # False +print(len('mango') < len('avocado')) # True print(len('milk') != len('meat')) # False -print(len('milk') == len('meat')) # False +print(len('milk') == len('meat')) # True print(len('tomato') == len('potato')) # True -print(len('python') > len('dragon')) +print(len('python') > len('dragon')) # False From eb3c6d96f0889b4b92af047945d0ce2dbf285052 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Fri, 22 Nov 2019 13:25:59 +0200 Subject: [PATCH 09/27] bug fixes --- readme.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 7612903..3618e10 100644 --- a/readme.md +++ b/readme.md @@ -490,7 +490,7 @@ print(num_str) # '10' # str to int num_str = '10.6' print('num_int', int(num_str)) # 10 -print('num_float', float(num_str)) # 11 +print('num_float', float(num_str)) # 10.6 # str to list first = 'Asabeneh' @@ -698,8 +698,6 @@ print(len('tomato') == len('potato')) # True print(len('python') > len('dragon')) - - # Comparing something give either a True or False print('True == True: ', True == True) print('True == False: ', True == False) From 227b0521d2b9e10428d5bcdb1081ba2deb3a3fb8 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Fri, 22 Nov 2019 23:06:09 +0200 Subject: [PATCH 10/27] some questions added to day 3 --- images/assignment_operators.png | Bin 0 -> 52829 bytes readme.md | 49 ++++++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 images/assignment_operators.png diff --git a/images/assignment_operators.png b/images/assignment_operators.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6bbd314a180142fc0924de069e14e5fc7b7572 GIT binary patch literal 52829 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 Date: Fri, 22 Nov 2019 23:07:51 +0200 Subject: [PATCH 11/27] some questions added to day 3 --- readme.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/readme.md b/readme.md index fda6feb..f913fc1 100644 --- a/readme.md +++ b/readme.md @@ -41,8 +41,6 @@ - [Comparison Operators](#comparison-operators) - [Logical Operators](#logical-operators) - [Exercises - Day 3](#exercises---day-3) - - [Part 1](#part-1) - - [Part 2](#part-2) # Day 1 ## Welcome @@ -751,7 +749,6 @@ print(not not False) # False ``` ## Exercises - Day 3 -### Part 1 1. Declare your age as integer variable 2. Declare your height as a float variable 3. Declare a complex number variable @@ -772,24 +769,18 @@ print(not not False) # False 18. Find the length of the text *python* and convert the value to float and convert it to string 19. Even numbers are divisible by 2 and the remainder is zero. How do you check if a number is even or not using python? 20. The floor division of 7 by 3 is equal to the int converted value of 2.7. - -### Part 2 21. Check if type of '10' is equal to 10 22. Check if int('9.8') is equal to 10 23. Writ a script that prompt a user to enters hours and rate per hour. Calculate pay of the person? ```py Enter hours: 40 Enter rate per hour: 28 - Your weekly earning is 1120 - ``` 24. Write a script that prompt the user to enter number of years. Calculate the number of seconds a person can live. Assume some one lives just hundred years ```py Enter number of yours you live: 100 You lived 3153600000 seconds. - - ``` 25. Write a python script that display the following table ```py From bac4c5b41ca137552570cc2a69129b90b70c13f5 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sat, 23 Nov 2019 04:06:13 +0200 Subject: [PATCH 12/27] day 4 --- readme.md | 362 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 338 insertions(+), 24 deletions(-) diff --git a/readme.md b/readme.md index f913fc1..b0c4d5b 100644 --- a/readme.md +++ b/readme.md @@ -41,6 +41,14 @@ - [Comparison Operators](#comparison-operators) - [Logical Operators](#logical-operators) - [Exercises - Day 3](#exercises---day-3) +- [Day 4](#day-4) + - [String](#string-1) + - [Creating a string](#creating-a-string) + - [String Concatenation](#string-concatenation) + - [Python strings as sequences of characters](#python-strings-as-sequences-of-characters) + - [Skipping character while splitting Python strings](#skipping-character-while-splitting-python-strings) + - [String Methods](#string-methods) + - [Exercises - Day 4](#exercises---day-4) # Day 1 ## Welcome @@ -447,20 +455,20 @@ print('Married: ', is_married) # Different python data types # Let's declare different data types -first_name = 'Asabeneh' # str -last_name = 'Yetayeh' # str -country = 'Finland' # str -city= 'Helsinki' # str -age = 250 # int, it is not my real age, don't worry about it +first_name = 'Asabeneh' # str +last_name = 'Yetayeh' # str +country = 'Finland' # str +city= 'Helsinki' # str +age = 250 # int, it is not my real age, don't worry about it # Printing out types -print(type('Asabeneh')) # 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('Asabeneh')) # 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 @@ -472,32 +480,32 @@ When we do arithmetic operations string numbers should be first converted to int # int to float num_int = 10 -print('num_int',num_int) # 10 +print('num_int',num_int) # 10 num_float = float(num_int) -print('num_float:', num_float) # 10.0 +print('num_float:', num_float) # 10.0 # float to int gravity = 9.81 -print(int(gravity)) # 9 +print(int(gravity)) # 9 # int to str num_int = 10 -print(num_int) # 10 +print(num_int) # 10 num_str = str(num_int) -print(num_str) # '10' +print(num_str) # '10' # str to int num_str = '10.6' -print('num_int', int(num_str)) # 10 -print('num_float', float(num_str)) # 10.6 +print('num_int', int(num_str)) # 10 +print('num_float', float(num_str)) # 10.6 # str to list first = 'Asabeneh' print(first_name) -print(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'] +print(first_name_to_list) # ['A', 's', 'a', 'b', 'e', 'n', 'e', 'h'] ``` @@ -517,7 +525,6 @@ print(first_name_to_list) # ['A', 's', 'a', 'b', 'e', 'n', 'e', 'h Example: 1 + j, 2 + 4j, 1 - 1j - ## Exercises - Day 2 1. Inside 30DaysOfPython create a folder called day_2. Inside this folder create a file name called variables.py 2. Writ a python comment saying 'Day 2: 30 Days of python programming' @@ -550,7 +557,6 @@ print(first_name_to_list) # ['A', 's', 'a', 'b', 'e', 'n', 'e', 'h 19. Use the built-in input function to get first name, last name, country and age from a user and store the value to their corresponding variable names 20. Run help('keywords') on python shell or in your file check the reserved words - # Day 3 ## Boolean @@ -680,7 +686,6 @@ weight = mass * gravity print(weight, 'N') # Adding unit to the weight ``` - ### Comparison Operators In programming we compare values, we use comparison operators to compare two values. We check if a value is greater or less or equal to other value. The following table shows python comparison operators which was taken from [w3shool](https://www.w3schools.com/python/python_operators.asp). @@ -791,6 +796,315 @@ Your weekly earning is 1120 5 1 5 25 125 ``` +# Day 4 +## String +Text is a string data type. Any data type written as text is a string. Any data under single or double quote are strings. There are different string methods and built-in functions to deal with string data types. To check the length of a string use the len() method. + +### Creating a string +```py +lang ="Python" +task ="scraping" +greeting = "Hello Python ninjas" + +print(lang) +print(task) +print(greeting) +``` +Multiline string is created by using triple ''' or quotes.See the example below. +```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) +# Another way of doing the same thing +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 +We can connect to strings together. Merging or connecting to strings together is called concatenation.See the example below +```py +first_name = 'Asabeneh' +last_name = 'Yetayeh' +space = ' ' +full_name = first_name + space + last_name +print(full_name) # Asabeneh Yetayeh +# Checking length of a string using len() builtin function +print(len(first_name)) # 8 +print(len(last_name)) # 7 +print(len(first_name) > len(last_name)) # True +print(len(full_name)) # 15 +``` +### Python strings as sequences of characters +Python strings are sequences of characters, and share their basic methods of access with those other Python sequences – 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 +``` +language = 'Python' +a,b,c,d,e,f = lang # 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 + In programming counting starts from zero. Therefore the first letter of a string is at zero index and the last letter of a string is the length of a string minus one. +```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 + +``` +If we want to start from right end we can use negative indexing. -1 is the last index. +```py + language = 'Python' + last_letter = language[-1] + print(last_letter) # n + second_last = language[-2] + print(second_last) # o + + ``` +* Slicing Python Strings + In python we can slice substrings from a string. + ```py + language = 'Python' + first_three = language[0,3] # starts at zero index and up to 3 but not include 3 + 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 + + ``` +### Skipping character while splitting Python strings +It is possible to skip characters while slicing by passing step argument to slice method. +```py +language = 'Python' +pto = language[0,6:2] # +print(pto) # pto + +``` + + +### String Methods +There are many string methods which allow us to format strings. See some of the string methods in the following example: + +* capitalize(): Converts the first character the string to Capital Letter +```py + challenge = 'thirty days of python' + print(challenge.capitalize()) # 'Thirty days of python' +``` +* count(): returns occurrences of substring in 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(): Checks if a string ends with a specified ending +```py + challenge = 'thirty days of python' + print(challenge.endswith('on')) # True + print(challenge.endswith('tion')) # False +``` +* expandtabs(): Replaces tab character with spaces, default tab size is 8. It takes tab size argument +```py + challenge = 'thirty\tdays\tof\tpython' + print(challenge.expandtabs()) # 'thirty days of python' + print(challenge.expandtabs(10)) # 'thirty days of python' + +``` + +* find(): Returns the index of first occurrence of substring +```py + challenge = 'thirty days of python' + print(challenge.find('y')) # 5 + print(challenge.find('th')) # 0 +``` +* format() formats string into nicer output + More about string formating check this [link](https://www.programiz.com/python-programming/methods/string/format) +```py +first_name = 'Asabeneh' +last_name = 'Yetayeh' +job = 'teacher' +country = 'Finland' +sentence = 'I am {} {}. I am a {}. I live in {}.'.format(first_name, last_name, job, country) +print(sentence) # I am Asabeneh Yetayeh. I am a teacher. I live in Finland. + +radius = 10 +pi = 3.14 +area = pi * radius ** 2 +result = 'The area of circle with {} is {}'.format(str(radius), str(area)) +print(result) # The area of circle with 10 is 314.0 +``` +* index(): Returns the index of substring +```py + challenge = 'thirty days of python' + print(challenge.find('y')) # 5 + print(challenge.find('th')) # 0 +``` +* isalnum(): Checks alphanumeric character +```py + challenge = 'ThirtyDaysPython' + print(challenge.isalnum()) # True + + challenge = '30DaysPython' + print(challenge.isalnum()) # True + + challenge = 'thirty days of python' + print(challenge.isalnum()) # False + + challenge = 'thirty days of python 2019' + print(challenge.isalnum()) # False +``` +* isalpha(): Checks if all characters are alphabets +```py + challenge = 'thirty days of python' + print(challenge.isalpha()) # True + num = '123' + print(num.isalpha()) # False +``` +* isdecimal(): Checks Decimal Characters +```py + challenge = 'thirty days of python' + print(challenge.find('y')) # 5 + print(challenge.find('th')) # 0 +``` +* isdigit(): Checks Digit Characters +```py + challenge = 'Thirty' + print(challenge.isdigit()) # False + challenge = '30' + print(challenge.digit()) # True +``` +* isdecimal():Checks decimal characters +```py + num = '10' + print(num.isdecimal()) # True + num = '10.5' + print(num.isdecimal()) # False +``` + +* isidentifier():Checks for valid identifier means it check if a string is a valid variable name +```py + challenge = '30DaysOfPython' + print(challenge.isidentifier()) # False, because it starts with a number + challenge = 'thirty_days_of_python' + print(challenge.isidentifier()) # True +``` + +* islower():Checks if all alphabets in a string are lowercase +```py + challenge = 'thirty days of python' + print(challenge.islower()) # True + challenge = 'Thirty days of python' + print(challenge.islower()) # False +``` +* isupper(): returns if all characters are uppercase characters +```py + challenge = 'thirty days of python' + print(challenge.isupper()) # False + challenge = 'THIRTY DAYS OF PYTHON' + print(challenge.isupper()) # True +``` + +* isnumeric():Checks numeric characters +```py + num = '10' + print(num.isnumeric()) # True + print('ten'.isnumeric()) # False +``` +* join(): Returns a concatenated string +```py + web_tech = ['HTML', 'CSS', 'JavaScript', 'React'] + result = '#, '.join(web_tech) + print(result) # 'HTML# CSS# JavaScript# React' + +``` +* strip(): Removes both leading and trailing characters +```py + challenge = ' thirty days of python ' + print(challenge.strip('y')) # 5 +``` +* replace(): Replaces substring inside +```py + challenge = 'thirty days of python' + print(challenge.replace('python', 'coding')) # 'thirty days of coding' + +``` +* split():Splits String from Left +```py + challenge = 'thirty days of python' + print(challenge.split()) # ['thirty', 'days', 'of', 'python'] +``` +* title(): Returns a Title Cased String +```py + challenge = 'thirty days of python' + print(challenge.title()) # Thirty Days Of Python + +``` +* swapcase(): Checks if String Starts with the Specified String + The string swapcase() method converts all uppercase characters to lowercase and all lowercase characters to uppercase characters of the given string, and returns it. +```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(): Checks if String Starts with the Specified String +```py + challenge = 'thirty days of python' + print(challenge.startswith('thirty)) # True + + challenge = '30 days of python' + print(challenge.startswith('thirty)) # False +``` + + +## Exercises - Day 4 +1. Concatenate the string 'Thirty', 'Days', 'Of', 'Python' to a single string, 'Thirty Days Of Python' +2. Concatenate the string 'Coding', 'For' , 'All' to a single string, 'Coding For All' +3. Declare a variable name company and assign it to an initial value "Coding For All". +4. Print company using *print()* +5. Print the length of the company string using *len()* method and *print()* +6. Change all the characters to capital letters using *upper()* method +7. Change all the characters to lowercase letters using *lower()* method +8. Use capitalize(), title(), swapcase() methods to format the value the string *Coding For All*. +9. Cut(slice) out the first word of *Coding For All* string +10. Check if *Coding For All* string contains a word Coding using the method index, find or other methods. +11. Replace the word coding in the string 'Coding For All' to Python. +12. Change Python for Everyone to Python for All using the replace method or other methods +13. Split the string 'Coding For All' at the space using split() method +14. "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" split the string at the comma +15. What character is at index 10 in "Coding For All" string. +16. Create an acronym or an abbreviation for the name 'Python For Everyone' +17. Create an acronym or an abbreviation for the name 'Coding For All' +18. Use index to determine the position of the first occurrence of C in Coding For All. +19. Use index to determine the position of the first occurrence of F in Coding For All +20. Use rfind to determine the position of the last occurrence of l in Coding For All People. +21. Use index or find to find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +22. Use rindex to find the position of the last occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +23. Slice out the phrase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +24. Find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +25. Slice out the phase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +26. Does Coding For All startswith() with a substring Coding? +27. Does Coding For All endswith() with a substring coding? +28. ' Coding For All ' from the left and right trailing spaces in the given string. +29. Which one of the following variable return True when we use the method isidentifier() + * 30DaysOfPython + * thirty_days_of_pythn + + + From cad5cf0ea0e96721de75e6bc7825fcf35d145bcd Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sat, 23 Nov 2019 11:17:18 +0200 Subject: [PATCH 13/27] Day 4 fixes --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index b0c4d5b..c7c804a 100644 --- a/readme.md +++ b/readme.md @@ -1096,9 +1096,9 @@ print(result) # The area of circle with 10 is 314.0 23. Slice out the phrase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' 24. Find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' 25. Slice out the phase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -26. Does Coding For All startswith() with a substring Coding? -27. Does Coding For All endswith() with a substring coding? -28. ' Coding For All ' from the left and right trailing spaces in the given string. +26. Does Coding For All with a substring Coding? +27. Does Coding For All with a substring coding? +28. ' Coding For All ' remove the left and right trailing spaces in the given string. 29. Which one of the following variable return True when we use the method isidentifier() * 30DaysOfPython * thirty_days_of_pythn From 03b8767270f03f4b773374bbc843b786a4bfc900 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sat, 23 Nov 2019 12:55:19 +0200 Subject: [PATCH 14/27] day 4 typo fixes --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index c7c804a..6b15e91 100644 --- a/readme.md +++ b/readme.md @@ -1096,8 +1096,8 @@ print(result) # The area of circle with 10 is 314.0 23. Slice out the phrase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' 24. Find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' 25. Slice out the phase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -26. Does Coding For All with a substring Coding? -27. Does Coding For All with a substring coding? +26. Does Coding For All starts with a substring *Coding*? +27. Does Coding For All ends with a substring *coding*? 28. ' Coding For All ' remove the left and right trailing spaces in the given string. 29. Which one of the following variable return True when we use the method isidentifier() * 30DaysOfPython From 0ad1fa4c6a07961c06c0ace66f286192e5aa42e4 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sat, 23 Nov 2019 13:43:37 +0200 Subject: [PATCH 15/27] restructuring and typo fixes --- readme.md | 103 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 60 insertions(+), 43 deletions(-) diff --git a/readme.md b/readme.md index 6b15e91..bddd361 100644 --- a/readme.md +++ b/readme.md @@ -178,7 +178,7 @@ Congratulations, you have finished setting up the development environment. Let's ### Python Syntax A python script can be written on python interactive shell or on code editor. A python file has an extension .py. ### Python Indentation -Indentation in many languages used to increase code readability, however python uses indentation to create block of codes. In other programming languages curly bracket used instead of indentation. One of the common bug when you write a python code will be wrong indentation. +An indentation is a white space in a text. Indentation in many languages used to increase code readability, however python uses indentation to create block of codes. In other programming languages curly bracket used to create block of codes instead of indentation. One of the common bug when you write a python code will be wrong indentation. ![Indentation Error](images/indentation.png) ### Comment @@ -295,6 +295,7 @@ helloworld.py ``` ![Running python script](./images/running_python_script.png) + ## Exercises - Day 1 1. Check the python version you are using 2. Open the python interactive shell and do the following operations. The operands are 3 and 4. Check the example above @@ -303,8 +304,8 @@ helloworld.py - multiplication(*) - modulus(%) - division(/) - - exponential - - floor division operator(//). + - exponential(**) + - floor division operator(//) 1. Write strings on the python interactive shell. The strings are the following: - Your name - Your family name @@ -323,7 +324,7 @@ helloworld.py # Day 2 ## Built in functions -In python we have lots of built in functions. Built-in functions are globally available for your use. Some of the most commonly used python built-in functions are the following: *print()*, *len()*, *type()*, *int()*, *float()*, *str()*, *input()*, *list()*, *dict()*, *min()*, *max()*, *sum()*, *sorted()*, *open()*, *file()*, *help()*, *dir*. In the following table you will see an exhaustive list of python built in functions taken from [python documentation](https://docs.python.org/2/library/functions.html). +In python we have lots of built in functions. Built-in functions are globally available for your use. Some of the most commonly used python built-in functions are the following: *print()*, *len()*, *type()*, *int()*, *float()*, *str()*, *input()*, *list()*, *dict()*, *min()*, *max()*, *sum()*, *sorted()*, *open()*, *file()*, *help()*, and *dir()*. In the following table you will see an exhaustive list of python built in functions taken from [python documentation](https://docs.python.org/2/library/functions.html). ![Built in Functions](images/builtin-functions.png) @@ -337,14 +338,14 @@ Let's practice more by using different built-in functions As you can see from the above terminal, python has reserved words. We do not use reserved words to declare variables or functions. We will cover variables in the next section. -I believe, by now you are familiar with built-in functions. Let's do one more practice of built-in functions and we will move on to the next section +I believe, by now you are familiar with built-in functions. Let's do one more practice of built-in functions and we will move on to the next section ![Min Max Sum](images/builtin-functional-final.png) ## Variables -Variables store data in a computer memory. Mnemonic variables are recommend to use in many programming languages. A variable refers to an a memory address in which a data is stored. -Number at the beginning, special character, hyphen are not allowed. A variable can have a short name (like x,y,z) but a more descriptive name (firstname, lastname, age, country) is highly recommended . +Variables store data in a computer memory. Mnemonic variables are recommend to use in many programming languages. A variable refers to an a memory address in which a data is stored. +Number at the beginning, special character, hyphen are not allowed. A variable can have a short name (like x,y,z) but a more descriptive name (firstname, lastname, age, country) is highly recommended . Python Variable Name Rules - A variable name must start with a letter or the underscore character @@ -363,7 +364,6 @@ first_name last_name capital_city _if # if we want to use reserved word as a variable -first_name year_2019 year2019 current_year_2019 @@ -414,6 +414,7 @@ person_info = { **Example:** ```py # Printing the values stored in the variables + print('First name:', first_name) print('First name length:', len(first_name)) print('Last name: ', last_name) @@ -621,7 +622,7 @@ Let's declare a variable and assign a number data type. I am going to use single a = 3 # a is a variable name and 3 is an integer data type b = 2 # b is a variable name and 3 is an integer data type -# Arithmetic operations and assigning the result to a avariable +# Arithmetic operations and assigning the result to a variable total = a + b diff = a - b product = a * b @@ -709,6 +710,7 @@ print(len('python') > len('dragon')) # False # Comparing something give either a True or False + print('True == True: ', True == True) print('True == False: ', True == False) print('False == False:', False == False) @@ -723,13 +725,13 @@ In addition to the above comparison operator python uses: * *not in*: Returns True if a list doesn't have the a certain element(x in y) ```py -print('1 is 1', 1 is 1) # True - because the data values are the same -print('1 is not 2', 1 is not 2) # True - because 1 is not 2 -print('A in Asabeneh', 'A' in 'Asabeneh') # True - A found in the string -print('B in Asabeneh', 'B' in 'Asabeneh') # False -there is lowercase b in the string but not uppercase B -print('coding' in 'coding for all') # True - because the coding for all has the word coding -print('a in an:', 'a' in 'an') # True -print('4 is 2 ** 2:', 4 is 2 **2) # True +print('1 is 1', 1 is 1) # True - because the data values are the same +print('1 is not 2', 1 is not 2) # True - because 1 is not 2 +print('A in Asabeneh', 'A' in 'Asabeneh') # True - A found in the string +print('B in Asabeneh', 'B' in 'Asabeneh') # False -there is lowercase b in the string but not uppercase B +print('coding' in 'coding for all') # True - because the coding for all has the word coding +print('a in an:', 'a' in 'an') # True +print('4 is 2 ** 2:', 4 is 2 **2) # True ``` @@ -757,26 +759,36 @@ print(not not False) # False 1. Declare your age as integer variable 2. Declare your height as a float variable 3. Declare a complex number variable -4. Calculate an area of a triangle (area = 0.5 x b x h) -5. Calculate the perimeter of triangle (perimeter = a + b + c) -6. Calculate an area of rectangle (area = length x width) -7. Calculate the perimeter of rectangle (perimeter = 2 x (length + width)) -8. Calculate the area of a circle (area = 3.14 x r x r) -9. Calculate the circumference of a circle(c = 2 x pi x r) where pi = 3.14. -10. Calculate the slope, x-intercept and y-intercept of y = 2x -2 -11. Slope is (m = y2-y1/x2-x1). Find the slope between point (2, 2) and point(6,10) -12. Calculate the value of y (y = x2 + 6x + 9). Try to use different x value and figure out at what x value y is 0. -13. Compare the slope of q10 and 11 -14. Find the length of python and jargon and make a falsy comparison statement. -15. Use *and* operator to check if 'on' is found in both python and jargon -16. *I hope this course is not full of jargon*. Use *in* operator to check if *jargon* is in the sentence. -17. There is no 'on' in both dragon and python -18. Find the length of the text *python* and convert the value to float and convert it to string -19. Even numbers are divisible by 2 and the remainder is zero. How do you check if a number is even or not using python? -20. The floor division of 7 by 3 is equal to the int converted value of 2.7. -21. Check if type of '10' is equal to 10 -22. Check if int('9.8') is equal to 10 -23. Writ a script that prompt a user to enters hours and rate per hour. Calculate pay of the person? +4. Write a script that prompt the user to enter base and height of the triangle and calculate an area of a triangle (area = 0.5 x b x h). +```py +Enter base: 20 +Enter height: 10 +The area of the triangle is 50 +``` +1. Write a script that prompt the user to enter side a, side b, and side c of the triangle and and calculate the perimeter of triangle (perimeter = a + b + c) +```py +Enter side a: 5 +Enter side b: 4 +Enter side c: 3 +The perimeter of the triangle is 12 +``` +6. Get length and width using prompt and calculate an area of rectangle (area = length x width and the perimeter of rectangle (perimeter = 2 x (length + width)) +1. Calculate the area of a circle (area = 3.14 x r x r) +2. Calculate the circumference of a circle(c = 2 x pi x r) where pi = 3.14. +3. Calculate the slope, x-intercept and y-intercept of y = 2x -2 +4. Slope is (m = y2-y1/x2-x1). Find the slope between point (2, 2) and point(6,10) +5. Compare the slope of q10 and 11 +6. Calculate the value of y (y = x^2 + 6x + 9). Try to use different x values and figure out at what x value y is 0. +7. Find the length of python and jargon and make a falsy comparison statement. +8. Use *and* operator to check if 'on' is found in both python and jargon +9. *I hope this course is not full of jargon*. Use *in* operator to check if *jargon* is in the sentence. +10. There is no 'on' in both dragon and python +11. Find the length of the text *python* and convert the value to float and convert it to string +12. Even numbers are divisible by 2 and the remainder is zero. How do you check if a number is even or not using python? +13. The floor division of 7 by 3 is equal to the int converted value of 2.7. +14. Check if type of '10' is equal to 10 +15. Check if int('9.8') is equal to 10 +16. Writ a script that prompt a user to enters hours and rate per hour. Calculate pay of the person? ```py Enter hours: 40 Enter rate per hour: 28 @@ -802,13 +814,17 @@ Text is a string data type. Any data type written as text is a string. Any data ### Creating a string ```py -lang ="Python" -task ="scraping" -greeting = "Hello Python ninjas" +letter = 'P' # A string could be a single character or a bunch of texts +print(letter) # P +print(len(letter)) # 1 +greeting = 'Hello, World!' # String could be in a single quote or double quote,"Hello, World!" +print(greeting) # Hello, World! +print(len(greeting)) # 13 +sentence = "I hope you are enjoying 30 days of python challenge" +print(sentence) + + -print(lang) -print(task) -print(greeting) ``` Multiline string is created by using triple ''' or quotes.See the example below. ```py @@ -1101,7 +1117,8 @@ print(result) # The area of circle with 10 is 314.0 28. ' Coding For All ' remove the left and right trailing spaces in the given string. 29. Which one of the following variable return True when we use the method isidentifier() * 30DaysOfPython - * thirty_days_of_pythn + * thirty_days_of_python +30. The following are some of python libraries list, ['Django', 'Flask', 'Bottle', 'Pyramid', 'Falcon']. Join the list with a hash with space string. From 2074d4cea49554ca5cfcef2ef5529520c949454f Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sat, 23 Nov 2019 16:31:25 +0200 Subject: [PATCH 16/27] restructuring and typo fixes --- day_3/day-3.py | 123 +++++++++++++ day_4/day_4.py | 248 +++++++++++++++++++++++++ readme.md | 489 ++++++++++++++++++++++++++----------------------- 3 files changed, 632 insertions(+), 228 deletions(-) create mode 100644 day_3/day-3.py create mode 100644 day_4/day_4.py diff --git a/day_3/day-3.py b/day_3/day-3.py new file mode 100644 index 0000000..995474c --- /dev/null +++ b/day_3/day-3.py @@ -0,0 +1,123 @@ +# Arithmetic Operations in Python +# Integers + +print('Addition: ', 1 + 2) +print('Subtraction: ', 2 - 1) +print('Multiplication: ', 2 * 3) +print ('Division: ', 4 / 2) # Division in python gives floating number +print('Division: ', 6 / 2) +print('Division: ', 7 / 2) +print('Division without the remainder: ', 7 // 2) # gives without the floating number or without the remaining +print('Modulus: ', 3 % 2) # Gives the remainder +print ('Division without the remainder: ',7 // 3) +print('Exponential: ', 3 ** 2) # it means 3 * 3 + +# Floating numbers +print('Floating Number,PI', 3.14) +print('Floating Number, gravity', 9.81) + +# Complex numbers +print('Complex number: ', 1+1j) +print('Multiplying complex number: ',(1+1j) * (1-1j)) + +# Declaring the variable at the top first + +a = 3 # a is a variable name and 3 is an integer data type +b = 2 # b is a variable name and 3 is an integer data type + +# Arithmetic operations and assigning the result to a variable +total = a + b +diff = a - b +product = a * b +division = a / b +remainder = a % b +floor_division = a // b +exponential = a ** b + +# I should have used sum instead of total but sum is a built-in function try to avoid overriding builtin functions +print(total) # if you don't label your print with some string, you never know from where is the result is coming +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) + +# Declaring values and organizing them together +num_one = 3 +num_two = 4 + +# Arithmetic operations +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 + +# Printing values with label +print('total: ', total) +print('difference: ', diff) +print('product: ', product) +print('division: ', div) +print('remainder: ', remainder) + + +# Calculating area of a circle +radius = 10 # radius of a circle +area_of_circle = 3.14 * radius ** 2 # two * sign means exponent or power +print('Area of a circle:', area_of_circle) + +# Calculating area of a rectangle +length = 10 +width = 20 +area_of_rectangle = length * width +print('Area of rectangle:', area_of_width) + +# Calculating a weight of an object +mass = 75 +gravity = 9.81 +weight = mass * gravity +print(weight, 'N') + +print(3 > 2) # True, because 3 is greater than 2 +print(3 >= 2) # True, because 3 is greater than 2 +print(3 < 2) # False, because 3 is greater than 2 +print(2 < 3) # True, because 2 is less than 3 +print(2 <= 3) # True, because 2 is less than 3 +print(3 == 2) # False, because 3 is not equal to 2 +print(3 != 2) # True, because 3 is not equal to 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 + +# Boolean comparison +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) +# Another way comparison +print('1 is 1', 1 is 1) # True - because the data values are the same +print('1 is not 2', 1 is not 2) # True - because 1 is not 2 +print('A in Asabeneh', 'A' in 'Asabeneh') # True - A found in the string +print('B in Asabeneh', 'B' in 'Asabeneh') # False -there is no uppercase B +print('coding' in 'coding for all') # True - because coding for all has the word 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 - because both statements are true +print(3 > 2 and 4 < 3) # False - because the second statement is false +print(3 < 2 and 4 < 3) # False - because both statements are false +print(3 > 2 or 4 > 3) # True - because both statements are true +print(3 > 2 or 4 < 3) # True - because one of the statement is true +print(3 < 2 or 4 < 3) # False - because both statements are false +print(not 3 > 2) # False - because 3 > 2 is true, then not True gives False +print(not True) # False - Negation, the not operator turns true to false +print(not False) # True +print(not not True) # True +print(not not False) # False \ No newline at end of file diff --git a/day_4/day_4.py b/day_4/day_4.py new file mode 100644 index 0000000..0976a9a --- /dev/null +++ b/day_4/day_4.py @@ -0,0 +1,248 @@ + +# Single line comment +letter = 'P' # A string could be a single character or a bunch of texts +print(letter) # P +print(len(letter)) # 1 +greeting = 'Hello, World!' # String could be a single or double quote,"Hello, World!" +print(greeting) # Hello, World! +print(len(greeting)) # 13 +sentence = "I hope you are enjoying 30 days of python challenge" +print(sentence) + +# 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) +# Another way of doing the same thing +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 +first_name = 'Asabeneh' +last_name = 'Yetayeh' +space = ' ' +full_name = first_name + space + last_name +print(full_name) # Asabeneh Yetayeh +# Checking length of a string using len() builtin function +print(len(first_name)) # 8 +print(len(last_name)) # 7 +print(len(first_name) > len(last_name)) # True +print(len(full_name)) # 15 + +#### 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 +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 + +# If we want to start from right end we can use negative indexing. -1 is the last index +language = 'Python' +last_letter = language[-1] +print(last_letter) # n +second_last = language[-2] +print(second_last) # o + +# Slicing + +language = 'Python' +first_three = language[0,3] # starts at zero index and up to 3 but not include 3 +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 + +# Skipping character while splitting Python strings +language = 'Python' +pto = language[0,6:2] # +print(pto) # pto + +# Escape sequence +print('I hope every one enjoying the python challenge.\nDo you ?') # line break +print('Days\tTopics\tExercises') +print('Day 1\t3\t5') +print('Day 2\t3\t5') +print('Day 3\t3\t5') +print('Day 4\t3\t5') +print('This is a back slash symbol (\\)') # To write a back slash +print('In every programming language it starts with \"Hello, World!\"') + +## String Methods +# capitalize(): Converts the first character the string to Capital Letter + +challenge = 'thirty days of python' +print(challenge.capitalize()) # 'Thirty days of python' + +# count(): returns occurrences of substring in string, count(substring, start=.., end=..) + +challenge = 'thirty days of python' +print(challenge.count('y')) # 3 +print(challenge.count('y', 7, 14)) # 1 +print(challenge.count('th')) # 2` + +# endswith(): Checks if a string ends with a specified ending + +challenge = 'thirty days of python' +print(challenge.endswith('on')) # True +print(challenge.endswith('tion')) # False + +# expandtabs(): Replaces tab character with spaces, default tab size is 8. It takes tab size argument + +challenge = 'thirty\tdays\tof\tpython' +print(challenge.expandtabs()) # 'thirty days of python' +print(challenge.expandtabs(10)) # 'thirty days of python' + +# find(): Returns the index of first occurrence of substring + +challenge = 'thirty days of python' +print(challenge.find('y')) # 5 +print(challenge.find('th')) # 0 + +# format() formats string into nicer output +first_name = 'Asabeneh' +last_name = 'Yetayeh' +job = 'teacher' +country = 'Finland' +sentence = 'I am {} {}. I am a {}. I live in {}.'.format(first_name, last_name, job, country) +print(sentence) # I am Asabeneh Yetayeh. I am a teacher. I live in Finland. + +radius = 10 +pi = 3.14 +area = pi # radius ## 2 +result = 'The area of circle with {} is {}'.format(str(radius), str(area)) +print(result) # The area of circle with 10 is 314.0 + +# index(): Returns the index of substring +challenge = 'thirty days of python' +print(challenge.find('y')) # 5 +print(challenge.find('th')) # 0 + +# isalnum(): Checks alphanumeric character + +challenge = 'ThirtyDaysPython' +print(challenge.isalnum()) # True + +challenge = '30DaysPython' +print(challenge.isalnum()) # True + +challenge = 'thirty days of python' +print(challenge.isalnum()) # False + +challenge = 'thirty days of python 2019' +print(challenge.isalnum()) # False + +# isalpha(): Checks if all characters are alphabets + +challenge = 'thirty days of python' +print(challenge.isalpha()) # True +num = '123' +print(num.isalpha()) # False + +# isdecimal(): Checks Decimal Characters + +challenge = 'thirty days of python' +print(challenge.find('y')) # 5 +print(challenge.find('th')) # 0 + +# isdigit(): Checks Digit Characters + +challenge = 'Thirty' +print(challenge.isdigit()) # False +challenge = '30' +print(challenge.digit()) # True + +# isdecimal():Checks decimal characters + +num = '10' +print(num.isdecimal()) # True +num = '10.5' +print(num.isdecimal()) # False + + +# isidentifier():Checks for valid identifier means it check if a string is a valid variable name + +challenge = '30DaysOfPython' +print(challenge.isidentifier()) # False, because it starts with a number +challenge = 'thirty_days_of_python' +print(challenge.isidentifier()) # True + + +# islower():Checks if all alphabets in a string are lowercase + +challenge = 'thirty days of python' +print(challenge.islower()) # True +challenge = 'Thirty days of python' +print(challenge.islower()) # False + +# isupper(): returns if all characters are uppercase characters + +challenge = 'thirty days of python' +print(challenge.isupper()) # False +challenge = 'THIRTY DAYS OF PYTHON' +print(challenge.isupper()) # True + + +# isnumeric():Checks numeric characters + +num = '10' +print(num.isnumeric()) # True +print('ten'.isnumeric()) # False + +# join(): Returns a concatenated string + +web_tech = ['HTML', 'CSS', 'JavaScript', 'React'] +result = '#, '.join(web_tech) +print(result) # 'HTML# CSS# JavaScript# React' + +# strip(): Removes both leading and trailing characters + +challenge = ' thirty days of python ' +print(challenge.strip('y')) # 5 + +# replace(): Replaces substring inside + +challenge = 'thirty days of python' +print(challenge.replace('python', 'coding')) # 'thirty days of coding' + +# split():Splits String from Left + +challenge = 'thirty days of python' +print(challenge.split()) # ['thirty', 'days', 'of', 'python'] + +# title(): Returns a Title Cased String + +challenge = 'thirty days of python' +print(challenge.title()) # Thirty Days Of Python + +# swapcase(): Checks if String Starts with the Specified String + +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(): Checks if String Starts with the Specified String + +challenge = 'thirty days of python' +print(challenge.startswith('thirty')) # True +challenge = '30 days of python' +print(challenge.startswith('thirty')) # False \ No newline at end of file diff --git a/readme.md b/readme.md index bddd361..696d135 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,3 @@ - - ![30DaysOfPython](./images/30DaysOfPython_banner3@2x.png) ## Table of Contents - [Day 1](#day-1) @@ -46,15 +44,21 @@ - [Creating a string](#creating-a-string) - [String Concatenation](#string-concatenation) - [Python strings as sequences of characters](#python-strings-as-sequences-of-characters) - - [Skipping character while splitting Python strings](#skipping-character-while-splitting-python-strings) + - [Unpacking characters](#unpacking-characters) + - [Accessing characters in strings by index](#accessing-characters-in-strings-by-index) + - [Slicing Python Strings](#slicing-python-strings) + - [Skipping character while splitting Python strings](#skipping-character-while-splitting-python-strings) + - [Escape Sequences in string](#escape-sequences-in-string) - [String Methods](#string-methods) - [Exercises - Day 4](#exercises---day-4) +- [Day 5](#day-5) + - [Exercises - Day 5](#exercises---day-5) # Day 1 ## Welcome **Congratulations** for deciding to participate in a ***30 days of Python*** programming challenge . In this challenge you will learn everything you need to be a python programmer and the whole concepts of programming. In the end of the challenge you will get a ***30DaysOfPython*** programming challenge certificate. [Join the telegram channel](https://t.me/ThirtyDaysOfPython) ## Introduction -Python is a high-level programming language. It is an open source. This 30 days python challenge will help you learn the latest version of Python, Python 3 step by step. The topics are broken down into 30 days, where each days contains several topics with easy-to-understand explanations, real-world examples and many hands on exercises. +Python is a high-level programming language for general-purpose programming. It is an open source. This 30 days python challenge will help you learn the latest version of Python, Python 3 step by step. The topics are broken down into 30 days, where each days contains several topics with easy-to-understand explanations, real-world examples and many hands on exercises. This challenge is designed for beginners and professionals who want to learn python programming language. ## Why Python ? @@ -83,7 +87,7 @@ python --version As you can see from the terminal, I am using *python 3.7.5* version at the moment. If you mange to see the python version, well done. Python has been installed on your machine. Continue to the next section. ### Python Shell -Python is an interpreter scripting language. It means it executes the code line by line. Python comes with a *Python Shell (Python Interactive Shell)*. It is used to execute a single python command and get the result. +Python is an interpreted scripting language,o it doesn't need to be compiled. It means it executes the code line by line. Python comes with a *Python Shell (Python Interactive Shell)*. It is used to execute a single python command and get the result. Python Shell waits for the python code from the user. When you enter the code, it interprets the code and shows the result in the next line. Open your terminal or cmd and write: @@ -196,10 +200,10 @@ Any text starts with hash(#) in python is a comment. Triple quote can be use for multiline comment if it is not assigned to a variable ```shell - """This is multiline comment - multiline comment take multiple lines. - python is eating the world - """ +"""This is multiline comment +multiline comment take multiple lines. +python is eating the world +""" ``` ### Data types In python there are several types of data types. We will get started with the most common ones. @@ -237,8 +241,8 @@ Python list is an ordered collection which allows to store of different data typ **Example:** ```py - ['Banana', 'Orange', 'Mango', 'Avocado'] # all the same data type in the list - ['Banana', 10, False, 9.81] # different data types in the list +['Banana', 'Orange', 'Mango', 'Avocado'] # all the same data type in the list +['Banana', 10, False, 9.81] # different data types in the list ``` #### Dictionary @@ -253,7 +257,7 @@ A tuple is an ordered collection of different data types like list but tuples ca **Example** ```py - ('Asabeneh', 'Brook', 'Abraham', 'Lidiya') +('Asabeneh', 'Brook', 'Abraham', 'Lidiya') ``` #### Set A set is a collection data types similar to list and tuple. Unlike list and tuple, set is not an ordered collection of items. Like in mathematics, set in python store only unique elements. @@ -262,7 +266,7 @@ In later sections, we will go in detail in each and every python data types. **Example:** ```py - {3.14, 9.81, 2.7} # order is not important in set +{3.14, 9.81, 2.7} # order is not important in set ``` ### Checking Data types To check the data type of a certain data type we use the **type** function. In the following terminal you will see the different python data types: @@ -276,22 +280,22 @@ The python interactive shell was printing without using **print** but on visual **Example:** helloworld.py ```py - # Day 1 - 30DaysOfPython Challenge - print(2 + 3) # addition(+) - print(3 - 1) # subtraction(-) - print(2 * 3) # multiplication(*) - print(3 / 2) # division(/) - print(3 ** 2) # exponential(**) - print(3 % 2) # modulus(%) - print(3 // 2) # Floor division operator(//) - # Checking data types - print(type(10)) # Int - print(type(3.14)) # Float - print(type(1 + 3j)) # Complex number - print(type('Asabeneh')) # String - print(type([1, 2, 3])) # List - print(type({'name':'Asabeneh'})) # Dictionary - print(type({9.8, 3.14, 2.7})) # Tuple +# Day 1 - 30DaysOfPython Challenge +print(2 + 3) # addition(+) +print(3 - 1) # subtraction(-) +print(2 * 3) # multiplication(*) +print(3 / 2) # division(/) +print(3 ** 2) # exponential(**) +print(3 % 2) # modulus(%) +print(3 // 2) # Floor division operator(//) +# Checking data types +print(type(10)) # Int +print(type(3.14)) # Float +print(type(1 + 3j)) # Complex number +print(type('Asabeneh')) # String +print(type([1, 2, 3])) # List +print(type({'name':'Asabeneh'})) # Dictionary +print(type({9.8, 3.14, 2.7})) # Tuple ``` ![Running python script](./images/running_python_script.png) @@ -398,7 +402,6 @@ person_info = { 'country':'Finland', 'city':'Helsinki' } - ``` Let's use *print()* and *len()* built in functions. Print function will take multiple arguments. An argument is a value which we pass or put inside the function parenthesis, see the example below. @@ -507,7 +510,6 @@ print(first_name) print(first_name) # 'Asabeneh' first_name_to_list = list(first_name) print(first_name_to_list) # ['A', 's', 'a', 'b', 'e', 'n', 'e', 'h'] - ``` @@ -693,20 +695,20 @@ In programming we compare values, we use comparison operators to compare two val ![Comparison Operators](./images/comparison_operators.png) **Example: Comparison Operators** ```py -print(3 > 2) # True, because 3 is greater than 2 -print(3 >= 2) # True, because 3 is greater than 2 -print(3 < 2) # False, because 3 is greater than 2 -print(2 < 3) # True, because 2 is less than 3 -print(2 <= 3) # True, because 2 is less than 3 -print(3 == 2) # False, because 3 is not equal to 2 -print(3 != 2) # True, because 3 is not equal to 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(3 > 2) # True, because 3 is greater than 2 +print(3 >= 2) # True, because 3 is greater than 2 +print(3 < 2) # False, because 3 is greater than 2 +print(2 < 3) # True, because 2 is less than 3 +print(2 <= 3) # True, because 2 is less than 3 +print(3 == 2) # False, because 3 is not equal to 2 +print(3 != 2) # True, because 3 is not equal to 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 # Comparing something give either a True or False @@ -728,12 +730,10 @@ In addition to the above comparison operator python uses: print('1 is 1', 1 is 1) # True - because the data values are the same print('1 is not 2', 1 is not 2) # True - because 1 is not 2 print('A in Asabeneh', 'A' in 'Asabeneh') # True - A found in the string -print('B in Asabeneh', 'B' in 'Asabeneh') # False -there is lowercase b in the string but not uppercase B -print('coding' in 'coding for all') # True - because the coding for all has the word coding -print('a in an:', 'a' in 'an') # True -print('4 is 2 ** 2:', 4 is 2 **2) # True - - +print('B in Asabeneh', 'B' in 'Asabeneh') # False -there is no uppercase B +print('coding' in 'coding for all') # True - because coding for all has the word coding +print('a in an:', 'a' in 'an') # True +print('4 is 2 ** 2:', 4 is 2 **2) # True ``` ### Logical Operators Unlike other programming languages python uses the key word *and*, *or* and *not* for logical operator. Logical operators are used to combine conditional statements: @@ -747,12 +747,11 @@ print(3 < 2 and 4 < 3) # False - because both statements are false print(3 > 2 or 4 > 3) # True - because both statements are true print(3 > 2 or 4 < 3) # True - because one of the statement is true print(3 < 2 or 4 < 3) # False - because both statements are false -print(not 3 > 2) # False - because 3 > 2 is true, then not True gives False -print(not True) # False - Negation, the not operator turns true to false -print(not False) # True -print(not not True) # True -print(not not False) # False - +print(not 3 > 2) # False - because 3 > 2 is true, then not True gives False +print(not True) # False - Negation, the not operator turns true to false +print(not False) # True +print(not not True) # True +print(not not False) # False ``` ## Exercises - Day 3 @@ -761,11 +760,11 @@ print(not not False) # False 3. Declare a complex number variable 4. Write a script that prompt the user to enter base and height of the triangle and calculate an area of a triangle (area = 0.5 x b x h). ```py -Enter base: 20 -Enter height: 10 -The area of the triangle is 50 + Enter base: 20 + Enter height: 10 + The area of the triangle is 50 ``` -1. Write a script that prompt the user to enter side a, side b, and side c of the triangle and and calculate the perimeter of triangle (perimeter = a + b + c) +5. Write a script that prompt the user to enter side a, side b, and side c of the triangle and and calculate the perimeter of triangle (perimeter = a + b + c) ```py Enter side a: 5 Enter side b: 4 @@ -773,33 +772,32 @@ Enter side c: 3 The perimeter of the triangle is 12 ``` 6. Get length and width using prompt and calculate an area of rectangle (area = length x width and the perimeter of rectangle (perimeter = 2 x (length + width)) -1. Calculate the area of a circle (area = 3.14 x r x r) -2. Calculate the circumference of a circle(c = 2 x pi x r) where pi = 3.14. -3. Calculate the slope, x-intercept and y-intercept of y = 2x -2 -4. Slope is (m = y2-y1/x2-x1). Find the slope between point (2, 2) and point(6,10) -5. Compare the slope of q10 and 11 -6. Calculate the value of y (y = x^2 + 6x + 9). Try to use different x values and figure out at what x value y is 0. -7. Find the length of python and jargon and make a falsy comparison statement. -8. Use *and* operator to check if 'on' is found in both python and jargon -9. *I hope this course is not full of jargon*. Use *in* operator to check if *jargon* is in the sentence. -10. There is no 'on' in both dragon and python -11. Find the length of the text *python* and convert the value to float and convert it to string -12. Even numbers are divisible by 2 and the remainder is zero. How do you check if a number is even or not using python? -13. The floor division of 7 by 3 is equal to the int converted value of 2.7. -14. Check if type of '10' is equal to 10 -15. Check if int('9.8') is equal to 10 -16. Writ a script that prompt a user to enters hours and rate per hour. Calculate pay of the person? +7. Get radius using prompt and calculate the area of a circle (area = pi x r x r) and circumference of a circle(c = 2 x pi x r) where pi = 3.14. +8. Calculate the slope, x-intercept and y-intercept of y = 2x -2 +9. Slope is (m = y2-y1/x2-x1). Find the slope between point (2, 2) and point(6,10) +10. Compare the slope of q10 and 11 +11. Calculate the value of y (y = x^2 + 6x + 9). Try to use different x values and figure out at what x value y is 0. +12. Find the length of python and jargon and make a falsy comparison statement. +13. Use *and* operator to check if 'on' is found in both python and jargon +14. *I hope this course is not full of jargon*. Use *in* operator to check if *jargon* is in the sentence. +15. There is no 'on' in both dragon and python +16. Find the length of the text *python* and convert the value to float and convert it to string +17. Even numbers are divisible by 2 and the remainder is zero. How do you check if a number is even or not using python? +18. The floor division of 7 by 3 is equal to the int converted value of 2.7. +19. Check if type of '10' is equal to 10 +20. Check if int('9.8') is equal to 10 +21. Writ a script that prompt a user to enters hours and rate per hour. Calculate pay of the person? ```py Enter hours: 40 Enter rate per hour: 28 Your weekly earning is 1120 ``` -24. Write a script that prompt the user to enter number of years. Calculate the number of seconds a person can live. Assume some one lives just hundred years +22. Write a script that prompt the user to enter number of years. Calculate the number of seconds a person can live. Assume some one lives just hundred years ```py - Enter number of yours you live: 100 - You lived 3153600000 seconds. +Enter number of yours you live: 100 +You lived 3153600000 seconds. ``` -25. Write a python script that display the following table +23. Write a python script that display the following table ```py 1 1 1 1 1 2 1 2 4 8 @@ -817,14 +815,12 @@ Text is a string data type. Any data type written as text is a string. Any data letter = 'P' # A string could be a single character or a bunch of texts print(letter) # P print(len(letter)) # 1 -greeting = 'Hello, World!' # String could be in a single quote or double quote,"Hello, World!" +greeting = 'Hello, World!' # String could be a single or double quote,"Hello, World!" print(greeting) # Hello, World! print(len(greeting)) # 13 sentence = "I hope you are enjoying 30 days of python challenge" print(sentence) - - ``` Multiline string is created by using triple ''' or quotes.See the example below. ```py @@ -854,10 +850,10 @@ print(len(full_name)) # 15 ``` ### Python strings as sequences of characters Python strings are sequences of characters, and share their basic methods of access with those other Python sequences – 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 +#### Unpacking characters ``` language = 'Python' -a,b,c,d,e,f = lang # unpacking sequence characters into variables +a,b,c,d,e,f = language # unpacking sequence characters into variables print(a) # P print(b) # y print(c) # t @@ -865,86 +861,107 @@ print(d) # h print(e) # o print(f) # n ``` -* Accessing characters in strings by index +#### Accessing characters in strings by index In programming counting starts from zero. Therefore the first letter of a string is at zero index and the last letter of a string is the length of a string minus one. ```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 - +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 ``` If we want to start from right end we can use negative indexing. -1 is the last index. ```py - language = 'Python' - last_letter = language[-1] - print(last_letter) # n - second_last = language[-2] - print(second_last) # o - +language = 'Python' +last_letter = language[-1] +print(last_letter) # n +second_last = language[-2] +print(second_last) # o ``` -* Slicing Python Strings +#### Slicing Python Strings In python we can slice substrings from a string. - ```py - language = 'Python' - first_three = language[0,3] # starts at zero index and up to 3 but not include 3 - 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 - - ``` -### Skipping character while splitting Python strings +```py +language = 'Python' +first_three = language[0,3] # starts at zero index and up to 3 but not include 3 +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 +``` +#### Skipping character while splitting Python strings It is possible to skip characters while slicing by passing step argument to slice method. ```py language = 'Python' pto = language[0,6:2] # print(pto) # pto +``` +### Escape Sequences in string +In python and other programming language \ followed by a character. Let's see the most common escape characters: +\n: new line +\t: Tab means(8 spaces) +\\: Back slash +\': Single quote (') +\":Double quote (") +```py +print('I hope every one enjoying the python challenge.\nDo you ?') # line break +print('Days\tTopics\tExercises') +print('Day 1\t3\t5') +print('Day 2\t3\t5') +print('Day 3\t3\t5') +print('Day 4\t3\t5') +print('This is a back slash symbol (\\)') # To write a back slash +print('In every programming language it starts with \"Hello, World!\"') + +# output +I hope every one enjoying the python challenge. +Do you ? +Days Topics Exercises +Day 1 3 5 +Day 2 3 5 +Day 3 3 5 +Day 4 3 5 +This is a back slash symbol (\) +In every programming language it starts with "Hello, World!" ``` - - ### String Methods There are many string methods which allow us to format strings. See some of the string methods in the following example: * capitalize(): Converts the first character the string to Capital Letter ```py - challenge = 'thirty days of python' - print(challenge.capitalize()) # 'Thirty days of python' +challenge = 'thirty days of python' +print(challenge.capitalize()) # 'Thirty days of python' ``` * count(): returns occurrences of substring in 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 +challenge = 'thirty days of python' +print(challenge.count('y')) # 3 +print(challenge.count('y', 7, 14)) # 1 +print(challenge.count('th')) # 2` ``` * endswith(): Checks if a string ends with a specified ending ```py - challenge = 'thirty days of python' - print(challenge.endswith('on')) # True - print(challenge.endswith('tion')) # False +challenge = 'thirty days of python' +print(challenge.endswith('on')) # True +print(challenge.endswith('tion')) # False ``` * expandtabs(): Replaces tab character with spaces, default tab size is 8. It takes tab size argument ```py - challenge = 'thirty\tdays\tof\tpython' - print(challenge.expandtabs()) # 'thirty days of python' - print(challenge.expandtabs(10)) # 'thirty days of python' - +challenge = 'thirty\tdays\tof\tpython' +print(challenge.expandtabs()) # 'thirty days of python' +print(challenge.expandtabs(10)) # 'thirty days of python' ``` - * find(): Returns the index of first occurrence of substring ```py - challenge = 'thirty days of python' - print(challenge.find('y')) # 5 - print(challenge.find('th')) # 0 +challenge = 'thirty days of python' +print(challenge.find('y')) # 5 +print(challenge.find('th')) # 0 ``` * format() formats string into nicer output More about string formating check this [link](https://www.programiz.com/python-programming/methods/string/format) @@ -964,162 +981,178 @@ print(result) # The area of circle with 10 is 314.0 ``` * index(): Returns the index of substring ```py - challenge = 'thirty days of python' - print(challenge.find('y')) # 5 - print(challenge.find('th')) # 0 +challenge = 'thirty days of python' +print(challenge.find('y')) # 5 +print(challenge.find('th')) # 0 ``` * isalnum(): Checks alphanumeric character ```py - challenge = 'ThirtyDaysPython' - print(challenge.isalnum()) # True +challenge = 'ThirtyDaysPython' +print(challenge.isalnum()) # True - challenge = '30DaysPython' - print(challenge.isalnum()) # True +challenge = '30DaysPython' +print(challenge.isalnum()) # True - challenge = 'thirty days of python' - print(challenge.isalnum()) # False +challenge = 'thirty days of python' +print(challenge.isalnum()) # False - challenge = 'thirty days of python 2019' - print(challenge.isalnum()) # False +challenge = 'thirty days of python 2019' +print(challenge.isalnum()) # False ``` * isalpha(): Checks if all characters are alphabets ```py - challenge = 'thirty days of python' - print(challenge.isalpha()) # True - num = '123' - print(num.isalpha()) # False +challenge = 'thirty days of python' +print(challenge.isalpha()) # True +num = '123' +print(num.isalpha()) # False ``` * isdecimal(): Checks Decimal Characters ```py - challenge = 'thirty days of python' - print(challenge.find('y')) # 5 - print(challenge.find('th')) # 0 +challenge = 'thirty days of python' +print(challenge.find('y')) # 5 +print(challenge.find('th')) # 0 ``` * isdigit(): Checks Digit Characters ```py - challenge = 'Thirty' - print(challenge.isdigit()) # False - challenge = '30' - print(challenge.digit()) # True +challenge = 'Thirty' +print(challenge.isdigit()) # False +challenge = '30' +print(challenge.digit()) # True ``` * isdecimal():Checks decimal characters ```py - num = '10' - print(num.isdecimal()) # True - num = '10.5' - print(num.isdecimal()) # False +num = '10' +print(num.isdecimal()) # True +num = '10.5' +print(num.isdecimal()) # False ``` * isidentifier():Checks for valid identifier means it check if a string is a valid variable name ```py - challenge = '30DaysOfPython' - print(challenge.isidentifier()) # False, because it starts with a number - challenge = 'thirty_days_of_python' - print(challenge.isidentifier()) # True +challenge = '30DaysOfPython' +print(challenge.isidentifier()) # False, because it starts with a number +challenge = 'thirty_days_of_python' +print(challenge.isidentifier()) # True ``` * islower():Checks if all alphabets in a string are lowercase ```py - challenge = 'thirty days of python' - print(challenge.islower()) # True - challenge = 'Thirty days of python' - print(challenge.islower()) # False +challenge = 'thirty days of python' +print(challenge.islower()) # True +challenge = 'Thirty days of python' +print(challenge.islower()) # False ``` * isupper(): returns if all characters are uppercase characters ```py - challenge = 'thirty days of python' - print(challenge.isupper()) # False - challenge = 'THIRTY DAYS OF PYTHON' - print(challenge.isupper()) # True +challenge = 'thirty days of python' +print(challenge.isupper()) # False +challenge = 'THIRTY DAYS OF PYTHON' +print(challenge.isupper()) # True ``` * isnumeric():Checks numeric characters ```py - num = '10' - print(num.isnumeric()) # True - print('ten'.isnumeric()) # False +num = '10' +print(num.isnumeric()) # True +print('ten'.isnumeric()) # False ``` * join(): Returns a concatenated string ```py - web_tech = ['HTML', 'CSS', 'JavaScript', 'React'] - result = '#, '.join(web_tech) - print(result) # 'HTML# CSS# JavaScript# React' - +web_tech = ['HTML', 'CSS', 'JavaScript', 'React'] +result = '#, '.join(web_tech) +print(result) # 'HTML# CSS# JavaScript# React' ``` * strip(): Removes both leading and trailing characters ```py - challenge = ' thirty days of python ' - print(challenge.strip('y')) # 5 +challenge = ' thirty days of python ' +print(challenge.strip('y')) # 5 ``` * replace(): Replaces substring inside ```py - challenge = 'thirty days of python' - print(challenge.replace('python', 'coding')) # 'thirty days of coding' - +challenge = 'thirty days of python' +print(challenge.replace('python', 'coding')) # 'thirty days of coding' ``` * split():Splits String from Left ```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(): Returns a Title Cased String ```py - challenge = 'thirty days of python' - print(challenge.title()) # Thirty Days Of Python - +challenge = 'thirty days of python' +print(challenge.title()) # Thirty Days Of Python ``` * swapcase(): Checks if String Starts with the Specified String The string swapcase() method converts all uppercase characters to lowercase and all lowercase characters to uppercase characters of the given string, and returns it. ```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 +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(): Checks if String Starts with the Specified String ```py - challenge = 'thirty days of python' - print(challenge.startswith('thirty)) # True +challenge = 'thirty days of python' +print(challenge.startswith('thirty')) # True - challenge = '30 days of python' - print(challenge.startswith('thirty)) # False +challenge = '30 days of python' +print(challenge.startswith('thirty')) # False ``` - ## Exercises - Day 4 1. Concatenate the string 'Thirty', 'Days', 'Of', 'Python' to a single string, 'Thirty Days Of Python' -2. Concatenate the string 'Coding', 'For' , 'All' to a single string, 'Coding For All' -3. Declare a variable name company and assign it to an initial value "Coding For All". -4. Print company using *print()* -5. Print the length of the company string using *len()* method and *print()* -6. Change all the characters to capital letters using *upper()* method -7. Change all the characters to lowercase letters using *lower()* method -8. Use capitalize(), title(), swapcase() methods to format the value the string *Coding For All*. -9. Cut(slice) out the first word of *Coding For All* string -10. Check if *Coding For All* string contains a word Coding using the method index, find or other methods. -11. Replace the word coding in the string 'Coding For All' to Python. -12. Change Python for Everyone to Python for All using the replace method or other methods -13. Split the string 'Coding For All' at the space using split() method -14. "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" split the string at the comma -15. What character is at index 10 in "Coding For All" string. -16. Create an acronym or an abbreviation for the name 'Python For Everyone' -17. Create an acronym or an abbreviation for the name 'Coding For All' -18. Use index to determine the position of the first occurrence of C in Coding For All. -19. Use index to determine the position of the first occurrence of F in Coding For All -20. Use rfind to determine the position of the last occurrence of l in Coding For All People. -21. Use index or find to find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -22. Use rindex to find the position of the last occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -23. Slice out the phrase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -24. Find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -25. Slice out the phase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -26. Does Coding For All starts with a substring *Coding*? -27. Does Coding For All ends with a substring *coding*? -28. ' Coding For All ' remove the left and right trailing spaces in the given string. -29. Which one of the following variable return True when we use the method isidentifier() +1. Concatenate the string 'Coding', 'For' , 'All' to a single string, 'Coding For All' +1. Declare a variable name company and assign it to an initial value "Coding For All1. +1. Print company using *print()* +1. Print the length of the company string using *len()* method and *print()* +1. Change all the characters to capital letters using *upper()* method +1. Change all the characters to lowercase letters using *lower()* method +1. Use capitalize(), title(), swapcase() methods to format the value the string *Coding For All*. +1. Cut(slice) out the first word of *Coding For All* string +1. Check if *Coding For All* string contains a word Coding using the method index, find or other methods. +1. Replace the word coding in the string 'Coding For All' to Python. +1. Change Python for Everyone to Python for All using the replace method or other methods +1. Split the string 'Coding For All' at the space using split() method +1. "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" split the string at the comma +1. What is character at index 0 in the string *Coding For All*. +1. What is the last index of the string *Coding For All* +1. What character is at index 10 in "Coding For All" string. +1. Create an acronym or an abbreviation for the name 'Python For Everyone' +1. Create an acronym or an abbreviation for the name 'Coding For All' +1. Use index to determine the position of the first occurrence of C in Coding For All. +1. Use index to determine the position of the first occurrence of F in Coding For All +1. Use rfind to determine the position of the last occurrence of l in Coding For All People. +1. Use index or find to find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +1. Use rindex to find the position of the last occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +1. Slice out the phrase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +1. Find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +1. Slice out the phase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +1. Does Coding For All starts with a substring *Coding*? +1. Does Coding For All ends with a substring *coding*? +1. '   Coding For All      '  , remove the left and right trailing spaces in the given string. +1. Which one of the following variable return True when we use the method isidentifier() * 30DaysOfPython * thirty_days_of_python -30. The following are some of python libraries list, ['Django', 'Flask', 'Bottle', 'Pyramid', 'Falcon']. Join the list with a hash with space string. +1. The following are some of python libraries list, ['Django', 'Flask', 'Bottle', 'Pyramid', 'Falcon']. Join the list with a hash with space string. +1. Use new line escape sequence to writ the following sentence. + ```py + I am enjoying this challenge. + I just wonder what is next. + ``` +1. Use a tab escape sequence to writ the following sentence. + ```py + Name Age Country + Asabeneh 250 Finland + ``` +1. Use string formatting method to display the following: +```sh +radius = 10 +area = 3.14 * radius ** 2 +The area of radius 10 is 314 meters squares. +``` +# Day 5 +## Exercises - Day 5 From d5dd2f3be09f59ac087bfc544cb63c38ffdf50f9 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sat, 23 Nov 2019 16:34:49 +0200 Subject: [PATCH 17/27] restructuring and typo fixes --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 696d135..87a7d20 100644 --- a/readme.md +++ b/readme.md @@ -922,10 +922,10 @@ print('In every programming language it starts with \"Hello, World!\"') I hope every one enjoying the python challenge. Do you ? Days Topics Exercises -Day 1 3 5 -Day 2 3 5 -Day 3 3 5 -Day 4 3 5 +Day 1 5 5 +Day 2 6 20 +Day 3 5 23 +Day 4 1 35 This is a back slash symbol (\) In every programming language it starts with "Hello, World!" From 3a4ebc9b2eb51a9d53d39e757468aec824d379bf Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sat, 23 Nov 2019 21:24:48 +0200 Subject: [PATCH 18/27] restructuring and typo fixes --- readme.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index 87a7d20..f08ee81 100644 --- a/readme.md +++ b/readme.md @@ -47,12 +47,10 @@ - [Unpacking characters](#unpacking-characters) - [Accessing characters in strings by index](#accessing-characters-in-strings-by-index) - [Slicing Python Strings](#slicing-python-strings) - - [Skipping character while splitting Python strings](#skipping-character-while-splitting-python-strings) + - [Skipping characters while slicing](#skipping-characters-while-slicing) - [Escape Sequences in string](#escape-sequences-in-string) - [String Methods](#string-methods) - [Exercises - Day 4](#exercises---day-4) -- [Day 5](#day-5) - - [Exercises - Day 5](#exercises---day-5) # Day 1 ## Welcome @@ -894,7 +892,7 @@ print(last_three) # hon last_three = language[3:] print(last_three) # hon ``` -#### Skipping character while splitting Python strings +#### Skipping characters while slicing It is possible to skip characters while slicing by passing step argument to slice method. ```py language = 'Python' @@ -903,11 +901,11 @@ print(pto) # pto ``` ### Escape Sequences in string In python and other programming language \ followed by a character. Let's see the most common escape characters: -\n: new line -\t: Tab means(8 spaces) -\\: Back slash -\': Single quote (') -\":Double quote (") +* \n: new line +* \t: Tab means(8 spaces) +* \\\\: Back slash +* \\': Single quote (') +* \\":Double quote (") ```py print('I hope every one enjoying the python challenge.\nDo you ?') # line break print('Days\tTopics\tExercises') @@ -1151,8 +1149,8 @@ area = 3.14 * radius ** 2 The area of radius 10 is 314 meters squares. ``` -# Day 5 -## Exercises - Day 5 + + From 4c4af058d369d2ead75d52d709ace73d92fd5763 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sat, 23 Nov 2019 22:45:34 +0200 Subject: [PATCH 19/27] restructuring and typo fixes --- readme.md | 241 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 177 insertions(+), 64 deletions(-) diff --git a/readme.md b/readme.md index f08ee81..d086bcd 100644 --- a/readme.md +++ b/readme.md @@ -43,14 +43,23 @@ - [String](#string-1) - [Creating a string](#creating-a-string) - [String Concatenation](#string-concatenation) + - [Escape Sequences in string](#escape-sequences-in-string) + - [String formating](#string-formating) + - [“Old Style” String Formatting (% Operator)](#old-style-string-formatting--operator) + - [“New Style” String Formatting (str.format)](#new-style-string-formatting-strformat) +- [Strings only](#strings-only) + - [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) - - [Escape Sequences in string](#escape-sequences-in-string) - [String Methods](#string-methods) - [Exercises - Day 4](#exercises---day-4) +- [Day 5](#day-5) + - [Conditionals](#conditionals) + - [If](#if) # Day 1 ## Welcome @@ -846,6 +855,114 @@ print(len(last_name)) # 7 print(len(first_name) > len(last_name)) # True print(len(full_name)) # 15 ``` +### Escape Sequences in string +In python and other programming language \ followed by a character. Let's see the most common escape characters: +* \n: new line +* \t: Tab means(8 spaces) +* \\\\: Back slash +* \\': Single quote (') +* \\":Double quote (") +```py +print('I hope every one enjoying the python challenge.\nDo you ?') # line break +print('Days\tTopics\tExercises') +print('Day 1\t3\t5') +print('Day 2\t3\t5') +print('Day 3\t3\t5') +print('Day 4\t3\t5') +print('This is a back slash symbol (\\)') # To write a back slash +print('In every programming language it starts with \"Hello, World!\"') + +# output +I hope every one enjoying the python challenge. +Do you ? +Days Topics Exercises +Day 1 5 5 +Day 2 6 20 +Day 3 5 23 +Day 4 1 35 +This is a back slash symbol (\) +In every programming language it starts with "Hello, World!" + +``` +### String formating +#### “Old Style” String Formatting (% Operator) +In python there many ways of formating string. In this section we will cover some of them. +The "%" operator is used to format a set of variables enclosed in a "tuple" (a fixed size list), together with a format string, which contains normal text together with "argument specifiers", special symbols like "%s", "%d", "%f", "%.f". +* %s - String (or any object with a string representation, like numbers) +* %d - Integers +* %f - Floating point numbers +* %.f - Floating point numbers with a fixed amount of digits to the right of the dot. + +```py +# Strings only +first_name = 'Asabeneh' +last_name = 'Yetayeh' +language = 'Python' +formatted_string = 'I am %s %s. I teach %s' %(first_name, last_name, language) +print(formatted) + +# Strings and numbers +radius = 10 +pi = 3.14 +area = pi * radius ** 2 +formatted_string = 'The area of radius %d is %.2f.' %(radius, area) # 2 refers the 2 significant digits after the point + +python_libraries = ['Django', 'Flask', 'Numpy', 'Pandas'] +formatted_string = 'The following are python libraries:' % python_libraries +print(formatted_string) # "The following are python libraries:['Django', 'Flask', 'Numpy', 'Pandas']" +``` +#### “New Style” String Formatting (str.format) +This is formating is introduced in python version 3. +# Strings only +```py +first_name = 'Asabeneh' +last_name = 'Yetayeh' +language = 'Python' +formatted_string = 'I am {} {}. I teach {}'.format(first_name, last_name, language) +print(formatted) +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)) # limits it to two digits after decimal +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 + +# Strings and numbers +radius = 10 +pi = 3.14 +area = pi * radius ** 2 +formatted_string = 'The area of radius {} is {:.2f}.'.format(radius, area) # 2 digits after decimal +print(formatted_string) + + +``` +#### String Interpolation / f-Strings (Python 3.6+) +Another new string formatting is string interpolation, f-strings. String started with f and we can inject the data in their corresponding positions. +```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 are sequences of characters, and share their basic methods of access with those other Python sequences – 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 @@ -892,6 +1009,13 @@ print(last_three) # hon last_three = language[3:] print(last_three) # hon ``` +#### Reversing a string +We can easily reverse string in python. +```py +greeting = 'Hello, World!' +print(greeting[::-1]) # !dlroW ,olleH +``` + #### Skipping characters while slicing It is possible to skip characters while slicing by passing step argument to slice method. ```py @@ -899,35 +1023,7 @@ language = 'Python' pto = language[0,6:2] # print(pto) # pto ``` -### Escape Sequences in string -In python and other programming language \ followed by a character. Let's see the most common escape characters: -* \n: new line -* \t: Tab means(8 spaces) -* \\\\: Back slash -* \\': Single quote (') -* \\":Double quote (") -```py -print('I hope every one enjoying the python challenge.\nDo you ?') # line break -print('Days\tTopics\tExercises') -print('Day 1\t3\t5') -print('Day 2\t3\t5') -print('Day 3\t3\t5') -print('Day 4\t3\t5') -print('This is a back slash symbol (\\)') # To write a back slash -print('In every programming language it starts with \"Hello, World!\"') -# output -I hope every one enjoying the python challenge. -Do you ? -Days Topics Exercises -Day 1 5 5 -Day 2 6 20 -Day 3 5 23 -Day 4 1 35 -This is a back slash symbol (\) -In every programming language it starts with "Hello, World!" - -``` ### String Methods There are many string methods which allow us to format strings. See some of the string methods in the following example: @@ -1099,56 +1195,73 @@ print(challenge.startswith('thirty')) # False ## Exercises - Day 4 1. Concatenate the string 'Thirty', 'Days', 'Of', 'Python' to a single string, 'Thirty Days Of Python' -1. Concatenate the string 'Coding', 'For' , 'All' to a single string, 'Coding For All' -1. Declare a variable name company and assign it to an initial value "Coding For All1. -1. Print company using *print()* -1. Print the length of the company string using *len()* method and *print()* -1. Change all the characters to capital letters using *upper()* method -1. Change all the characters to lowercase letters using *lower()* method -1. Use capitalize(), title(), swapcase() methods to format the value the string *Coding For All*. -1. Cut(slice) out the first word of *Coding For All* string -1. Check if *Coding For All* string contains a word Coding using the method index, find or other methods. -1. Replace the word coding in the string 'Coding For All' to Python. -1. Change Python for Everyone to Python for All using the replace method or other methods -1. Split the string 'Coding For All' at the space using split() method -1. "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" split the string at the comma -1. What is character at index 0 in the string *Coding For All*. -1. What is the last index of the string *Coding For All* -1. What character is at index 10 in "Coding For All" string. -1. Create an acronym or an abbreviation for the name 'Python For Everyone' -1. Create an acronym or an abbreviation for the name 'Coding For All' -1. Use index to determine the position of the first occurrence of C in Coding For All. -1. Use index to determine the position of the first occurrence of F in Coding For All -1. Use rfind to determine the position of the last occurrence of l in Coding For All People. -1. Use index or find to find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -1. Use rindex to find the position of the last occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -1. Slice out the phrase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -1. Find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -1. Slice out the phase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' -1. Does Coding For All starts with a substring *Coding*? -1. Does Coding For All ends with a substring *coding*? -1. '   Coding For All      '  , remove the left and right trailing spaces in the given string. -1. Which one of the following variable return True when we use the method isidentifier() +2. Concatenate the string 'Coding', 'For' , 'All' to a single string, 'Coding For All' +3. Declare a variable name company and assign it to an initial value "Coding For All1. +4. Print company using *print()* +5. Print the length of the company string using *len()* method and *print()* +6. Change all the characters to capital letters using *upper()* method +7. Change all the characters to lowercase letters using *lower()* method +8. Use capitalize(), title(), swapcase() methods to format the value the string *Coding For All*. +9. Cut(slice) out the first word of *Coding For All* string +10. Check if *Coding For All* string contains a word Coding using the method index, find or other methods. +11. Replace the word coding in the string 'Coding For All' to Python. +12. Change Python for Everyone to Python for All using the replace method or other methods +13. Split the string 'Coding For All' at the space using split() method +14. "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" split the string at the comma +15. What is character at index 0 in the string *Coding For All*. +16. What is the last index of the string *Coding For All* +17. What character is at index 10 in "Coding For All" string. +18. Create an acronym or an abbreviation for the name 'Python For Everyone' +19. Create an acronym or an abbreviation for the name 'Coding For All' +20. Use index to determine the position of the first occurrence of C in Coding For All. +21. Use index to determine the position of the first occurrence of F in Coding For All +22. Use rfind to determine the position of the last occurrence of l in Coding For All People. +23. Use index or find to find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +24. Use rindex to find the position of the last occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +25. Slice out the phrase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +26. Find the position of the first occurrence of the word because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +27. Slice out the phase because because because in the following sentence:'You cannot end a sentence with because because because is a conjunction' +28. Does Coding For All starts with a substring *Coding*? +29. Does Coding For All ends with a substring *coding*? +30. '   Coding For All      '  , remove the left and right trailing spaces in the given string. +31. Which one of the following variable return True when we use the method isidentifier() * 30DaysOfPython * thirty_days_of_python -1. The following are some of python libraries list, ['Django', 'Flask', 'Bottle', 'Pyramid', 'Falcon']. Join the list with a hash with space string. -1. Use new line escape sequence to writ the following sentence. +32. The following are some of python libraries list: ['Django', 'Flask', 'Bottle', 'Pyramid', 'Falcon']. Join the list with a hash with space string. +33. Use new line escape sequence to writ the following sentence. ```py I am enjoying this challenge. I just wonder what is next. ``` -1. Use a tab escape sequence to writ the following sentence. +34. Use a tab escape sequence to writ the following sentence. ```py Name Age Country Asabeneh 250 Finland ``` -1. Use string formatting method to display the following: +35. Use string formatting method to display the following: ```sh radius = 10 area = 3.14 * radius ** 2 The area of radius 10 is 314 meters squares. - ``` +36. Make the following using string formatting methods: +```sh +8 + 6 = 14 +8 - 6 = 2 +8 * 6 = 48 +8 / 6 = 1.33 +8 % 6 = 2 +8 // 6 = 1 +8 ** 6 = 262144 +``` +# Day 5 +## Conditionals +We use conditional statement in python perform different computations or actions depending on whether a specific boolean constraint evaluates to true or false. Conditional statements are handled by IF statements in Python. +### If +If condition will be evaluated only if the condition is true. See the example below: +```py + +`` From d87ef2bea1bd1108b88c996e8671bddd51c31e97 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sat, 23 Nov 2019 22:47:57 +0200 Subject: [PATCH 20/27] restructuring and typo fixes --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index d086bcd..c6bc14f 100644 --- a/readme.md +++ b/readme.md @@ -47,7 +47,6 @@ - [String formating](#string-formating) - [“Old Style” String Formatting (% Operator)](#old-style-string-formatting--operator) - [“New Style” String Formatting (str.format)](#new-style-string-formatting-strformat) -- [Strings only](#strings-only) - [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) @@ -913,8 +912,9 @@ print(formatted_string) # "The following are python libraries:['Django', 'Flask' ``` #### “New Style” String Formatting (str.format) This is formating is introduced in python version 3. -# Strings only + ```py + first_name = 'Asabeneh' last_name = 'Yetayeh' language = 'Python' From 9bd49f4a9161cc49cd91b73e7e95f24453205de6 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sun, 24 Nov 2019 04:05:13 +0200 Subject: [PATCH 21/27] day 5 --- day_5/day_5.py | 179 +++++++++++++++++++++ readme.md | 422 ++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 580 insertions(+), 21 deletions(-) create mode 100644 day_5/day_5.py diff --git a/day_5/day_5.py b/day_5/day_5.py new file mode 100644 index 0000000..971b4e1 --- /dev/null +++ b/day_5/day_5.py @@ -0,0 +1,179 @@ +empty_list = list() # this is an empty list, no item in the list +print(len(empty_list)) # 0 + +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'] + +# Print the lists and it length +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('Number of countries:', len(countries)) + +# Modifying list + +fruits = ['banana', 'orange', 'mango', 'lemon'] +first_fruit = fruits[0] # we are accessing the first item using its index +print(first_fruit) # banana +second_fruit = fruits[1] +print(second_fruit) # orange +last_fruit = fruits[3] +print(last_fruit) # lemon +# Last index +last_index = len(fruits) - 1 +last_fruit = fruits[last_index] + +# Accessing itmes +fruits = ['banana', 'orange', 'mango', 'lemon'] +last_fruit = fruits[-1] +second_last = fruits[-2] +print(last_fruit) # lemon +print(second_last) # mango + +# Slicing items +fruits = ['banana', 'orange', 'mango', 'lemon'] +all_fruits = fruits[0:4] # it returns all the fruits +# this is also give the same result as the above +all_fruits = fruits[0:] # if we don't set where to stop it takes all the rest +orange_and_mango = fruits[1:3] # it does not include the end index +orange_mango_lemon = fruits[1:] + +fruits = ['banana', 'orange', 'mango', 'lemon'] +all_fruits = fruits[-4:] # it returns all the fruits +# this is also give the same result as the above +orange_and_mango = fruits[-3:-1] # it does not include the end index +orange_mango_lemon = fruits[-3:] + + +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) +fruits[last_index] = 'lime' +print(fruits) # ['avocado', 'apple', 'mango', 'lime'] + +# checking items +fruits = ['banana', 'orange', 'mango', 'lemon'] +does_exist = 'banana' in fruits +print(does_exist) # True +does_exist = 'lime' in fruits +print(does_exist) # False + +# Append +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) + +# insert +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.insert(2, 'apple') # insert apple between orange and mango +print(fruits) # ['banana', 'orange', 'apple', 'mango', 'lemon'] +fruits.list(3, 'lime') # ['banana', 'orange', 'apple', 'mango', 'lime','lemon',] +print(fruits) + +# remove +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.remove('banana') +print(fruits) # ['orange', 'mango', 'lemon'] +fruits.remove('lemon') +print(fruits) # ['orange', 'mango'] + +# pop +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.remove() +print(fruits) # ['banana', 'orange', 'mango'] + +fruits.remove(0) +print(fruits) # ['orange', 'mango'] + +# del +fruits = ['banana', 'orange', 'mango', 'lemon'] +del fruits[0] +print(fruits) # ['orange', 'mango', 'lemon'] + +del fruits[1] +print(fruits) # ['orange', 'lemon'] +del fruits +print(fruits) # This should give: NameError: name 'fruits' is not defined + +# clear +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.clear() +print(fruits) # [] + +# copying a lits + +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits_copy = fruits.copy() +print(fruits_copy) # ['banana', 'orange', 'mango', 'lemon'] + +# join +positive_numbers = [1, 2, 3,4,5] +zero = [0] +negative_numbers = [-5,-4,-3,-2,-1] +integers = negative_numbers + zero + positive_numbers +print(integers) +fruits = ['banana', 'orange', 'mango', 'lemon'] +vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot'] +fruits_and_vegetables = fruits + vegetables +print(fruits_and_vegetables ) + +# join with extend +num1 = [0, 1, 2, 3] +num2= [4, 5,6] +num1.extend(num2) +print('Numbers:', num1) +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) +fruits = ['banana', 'orange', 'mango', 'lemon'] +vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot'] +fruits.extend(vegetables) +print('Fruits and vegetables:', fruits ) + +# count +fruits = ['banana', 'orange', 'mango', 'lemon'] +print(fruits.count('orange')) # 1 +ages = [22, 19, 24, 25, 26, 24, 25, 24] +print(ages.count(24)) # 3 + +# index +fruits = ['banana', 'orange', 'mango', 'lemon'] +print(fruits.index('orange')) # 1 +ages = [22, 19, 24, 25, 26, 24, 25, 24] +print(ages.index(24)) +# Reverse +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.reverse() +print(fruits.reverse()) +ages = [22, 19, 24, 25, 26, 24, 25, 24] +ages.reverse() +print(ages.reverse()) + +# sort +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.sort() +print(fruits) +fruits.sort(reverse=True) +print(fruits) +ages = [22, 19, 24, 25, 26, 24, 25, 24] +ages.sort() +print(ages) +ages.sort(reverse=True) +print(ages) \ No newline at end of file diff --git a/readme.md b/readme.md index c6bc14f..fd6fdb2 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,4 @@ ![30DaysOfPython](./images/30DaysOfPython_banner3@2x.png) -## Table of Contents - [Day 1](#day-1) - [Welcome](#welcome) - [Introduction](#introduction) @@ -45,8 +44,8 @@ - [String Concatenation](#string-concatenation) - [Escape Sequences in string](#escape-sequences-in-string) - [String formating](#string-formating) - - [“Old Style” String Formatting (% Operator)](#old-style-string-formatting--operator) - - [“New Style” String Formatting (str.format)](#new-style-string-formatting-strformat) + - [Old Style String Formatting (% Operator)](#old-style-string-formatting--operator) + - [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) @@ -57,8 +56,26 @@ - [String Methods](#string-methods) - [Exercises - Day 4](#exercises---day-4) - [Day 5](#day-5) - - [Conditionals](#conditionals) - - [If](#if) + - [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) + - [Slicing items from list](#slicing-items-from-list) + - [Modifying list](#modifying-list) + - [Check items in a list](#check-items-in-a-list) + - [Adding item in a list](#adding-item-in-a-list) + - [Inserting item in to a list](#inserting-item-in-to-a-list) + - [Removing item from list](#removing-item-from-list) + - [Removing item using pop](#removing-item-using-pop) + - [Removing item using del](#removing-item-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) + - [Exercises: Day 5](#exercises-day-5) # Day 1 ## Welcome @@ -266,7 +283,7 @@ A tuple is an ordered collection of different data types like list but tuples ca ('Asabeneh', 'Brook', 'Abraham', 'Lidiya') ``` #### Set -A set is a collection data types similar to list and tuple. Unlike list and tuple, set is not an ordered collection of items. Like in mathematics, set in python store only unique elements. +A set is a collection data types similar to list and tuple. Unlike list and tuple, set is not an ordered collection of items. Like in mathematics, set in python store only unique items. In later sections, we will go in detail in each and every python data types. @@ -614,7 +631,9 @@ print('Exponential: ', 3 ** 2) # it means 3 * 3 # Floating numbers print('Floating Number,PI', 3.14) print('Floating Number, gravity', 9.81) - +``` +**Example:Complex numbers** +```py # Complex numbers print('Complex number: ', 1+1j) print('Multiplying complex number: ',(1+1j) * (1-1j)) @@ -622,9 +641,7 @@ print('Multiplying complex number: ',(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 variable. Variable names should be all the time mnemonic. **Example:** - ```python - # Declaring the variable at the top first a = 3 # a is a variable name and 3 is an integer data type @@ -729,8 +746,8 @@ print('True or False:', True or False) In addition to the above comparison operator python uses: * *is*: Returns true if both variables are the same object(x is y) * *is not*: Returns true if both variables are not the same object(x is not y) -* *in*: Returns True if a list with the a certain element(x in y) -* *not in*: Returns True if a list doesn't have the a certain element(x in y) +* *in*: Returns True if a list with the a certain item(x in y) +* *not in*: Returns True if a list doesn't have the a certain item(x in y) ```py print('1 is 1', 1 is 1) # True - because the data values are the same @@ -884,7 +901,7 @@ In every programming language it starts with "Hello, World!" ``` ### String formating -#### “Old Style” String Formatting (% Operator) +#### Old Style String Formatting (% Operator) In python there many ways of formating string. In this section we will cover some of them. The "%" operator is used to format a set of variables enclosed in a "tuple" (a fixed size list), together with a format string, which contains normal text together with "argument specifiers", special symbols like "%s", "%d", "%f", "%.f". * %s - String (or any object with a string representation, like numbers) @@ -910,7 +927,7 @@ python_libraries = ['Django', 'Flask', 'Numpy', 'Pandas'] formatted_string = 'The following are python libraries:' % python_libraries print(formatted_string) # "The following are python libraries:['Django', 'Flask', 'Numpy', 'Pandas']" ``` -#### “New Style” String Formatting (str.format) +#### New Style String Formatting (str.format) This is formating is introduced in python version 3. ```py @@ -947,7 +964,6 @@ area = pi * radius ** 2 formatted_string = 'The area of radius {} is {:.2f}.'.format(radius, area) # 2 digits after decimal print(formatted_string) - ``` #### String Interpolation / f-Strings (Python 3.6+) Another new string formatting is string interpolation, f-strings. String started with f and we can inject the data in their corresponding positions. @@ -1196,12 +1212,12 @@ print(challenge.startswith('thirty')) # False ## Exercises - Day 4 1. Concatenate the string 'Thirty', 'Days', 'Of', 'Python' to a single string, 'Thirty Days Of Python' 2. Concatenate the string 'Coding', 'For' , 'All' to a single string, 'Coding For All' -3. Declare a variable name company and assign it to an initial value "Coding For All1. +3. Declare a variable name company and assign it to an initial value "Coding For All. 4. Print company using *print()* 5. Print the length of the company string using *len()* method and *print()* 6. Change all the characters to capital letters using *upper()* method 7. Change all the characters to lowercase letters using *lower()* method -8. Use capitalize(), title(), swapcase() methods to format the value the string *Coding For All*. +8. Use capitalize(), title(), swapcase() methods to format the value the string *Coding For All*. 9. Cut(slice) out the first word of *Coding For All* string 10. Check if *Coding For All* string contains a word Coding using the method index, find or other methods. 11. Replace the word coding in the string 'Coding For All' to Python. @@ -1255,13 +1271,377 @@ The area of radius 10 is 314 meters squares. 8 ** 6 = 262144 ``` # Day 5 -## Conditionals -We use conditional statement in python perform different computations or actions depending on whether a specific boolean constraint evaluates to true or false. Conditional statements are handled by IF statements in Python. -### If -If condition will be evaluated only if the condition is true. See the example below: +## Lists +The are four collection data types in python : +* List: is a collection which is ordered and changeable(modifiable). Allows duplicate members. +* Tuple: is a collection which is ordered and unchangeable or unmodifiable(immutable). Allows duplicate members. +* Set: is a collection which is unordered and unindexed. No duplicate members. +* Dictionary: is a collection which is unordered, changeable(modifiable) and indexed. No duplicate members. + +A list is collection of different data types which is ordered and modifiable(mutable). A list can be empty or it may have different data type items or items +### How to create a list +In python we can create list in two ways: +* Using list builtin function +```py +lst = list() +``` +```py +empty_list = list() # this is an empty list, no item in the list +print(len(empty_list)) # 0 +``` +* Using square brackets, [] +```py +lst = [] +``` +```py +empty_list = [] # this is an empty list, no item in the list +print(len(empty_list)) # 0 +``` + +List with initial values. We use *len()* to find the length of a 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'] + +# Print the lists and it length +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('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 +Number of countries: 5 +``` +* List can have items of different data types +```py + lst = ['Asabeneh', 250, True, {'country':'Finland', 'city':'Helsinki'}] # list containing different data types +``` +### Accessing list items using positive indexing +We access each item in a list using their index. A list index start from 0. +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +first_fruit = fruits[0] # we are accessing the first item using its index +print(first_fruit) # banana +second_fruit = fruits[1] +print(second_fruit) # orange +last_fruit = fruits[3] +print(last_fruit) # lemon +# Last index +last_index = len(fruits) - 1 +last_fruit = fruits[last_index] +``` +### Accessing list items using negative indexing +Negative indexing means beginning from the end, -1 refers to the last item, -2 refers to the second last item. +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +last_fruit = fruits[-1] +second_last = fruits[-2] +print(last_fruit) # lemon +print(second_last) # mango +``` +### Slicing items from list +* Positive Indexing: We can specify a range of positive indexes by specifying the starting and the ending, the return value will be a new list. +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +all_fruits = fruits[0:4] # it returns all the fruits +# this is also give the same result as the above +all_fruits = fruits[0:] # if we don't set where to stop it takes all the rest +orange_and_mango = fruits[1:3] # it does not include the end index +orange_mango_lemon = fruits[1:] +``` +* Negative Indexing: We can specify a range of negative indexes by specifying the starting and the ending, the return value will be a new list. +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +all_fruits = fruits[-4:] # it returns all the fruits +# this is also give the same result as the above +orange_and_mango = fruits[-3:-1] # it does not include the end index +orange_mango_lemon = fruits[-3:] +``` +### Modifying list +List is a mutable or modifiable ordered collection of items or items. Lets modify the 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) +fruits[last_index] = 'lime' +print(fruits) # ['avocado', 'apple', 'mango', 'lime'] +``` +### Check items in a list +```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 item in a list +To add item to the end of an existing list we use the method +```py +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 item in to a list +Use insert() method to insert a single item at a specified index in a list. Note that other items are shifted to the right. +```py +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.list(3, 'lime') # ['banana', 'orange', 'apple', 'mango', 'lime','lemon',] +print(fruits) +``` +### Removing item from list +The remove method remove a specified item from a list +```py +lst = ['item1', 'item2'] +lst.remove(item) +``` +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.remove('banana') +print(fruits) # ['orange', 'mango', 'lemon'] +fruits.remove('lemon') +print(fruits) # ['orange', 'mango'] +``` +### Removing item using pop +The pop() method removes the specified index, (or the last item if index is not specified): +```py +lst = ['item1', 'item2'] +lst.pop() # last item +lst.pop(index) +``` +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.remove() +print(fruits) # ['banana', 'orange', 'mango'] + +fruits.remove(0) +print(fruits) # ['orange', 'mango'] +``` +### Removing item using del +The del keyword removes the specified index and it can be also use to delete the list completely + ```py -`` +lst = ['item1', 'item2'] +del lst[index] # only a single item +del lst # to delete the list completely +``` +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +del fruits[0] +print(fruits) # ['orange', 'mango', 'lemon'] + +del fruits[1] +print(fruits) # ['orange', 'lemon'] +del fruits +print(fruits) # This should give: NameError: name 'fruits' is not defined +``` +### Clearing list items +The clear() method empties the list: +```py +lst = ['item1', 'item2'] +lst.clear() +``` +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.clear() +print(fruits) # [] + +``` +### Copying a list +It is possible to copy a list by reassigning to a new variable in the following way list2 = list1. Now, list2 is a reference of list1, any changes we make in list2 will also modify the original, list2. But there are lots of case in which we do not like to modify the original instead we like to have a different copy. One of way avoid the above problem is using *copy()*. +```py +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 +There are several ways to join, or concatenate, two or more lists in Python. + +* Plus Operator (+) +```py +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) +fruits = ['banana', 'orange', 'mango', 'lemon'] +vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot'] +fruits_and_vegetables = fruits + vegetables +print(fruits_and_vegetables ) + +``` +```py +# output +[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5] +['banana', 'orange', 'mango', 'lemon', 'Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] +``` + * Joining using extend() method + +```py +list3 = list1.extend(list2) +``` +```py +num1 = [0, 1, 2, 3] +num2= [4, 5,6] +num1.extend(num2) +print('Numbers:', num1) +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) +fruits = ['banana', 'orange', 'mango', 'lemon'] +vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot'] +fruits.extend(vegetables) +print('Fruits and vegetables:', fruits ) + +``` +```py +Numbers: [0, 1, 2, 3, 4, 5, 6] +Integers: [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5] +Fruits and vegetables: ['banana', 'orange', 'mango', 'lemon', 'Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] +``` + +### Counting Items in a list +The count() method returns the number of times an item appears in a list: +```py +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 count() method returns the index of an item in the list: +```py +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, the first occurrence +``` +### Reversing a list +The reverse() method reverse the order of a list. +```py +lst = ['item1', 'item2'] +lst.reverse() + +``` +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.reverse() +print(fruits.reverse()) +ages = [22, 19, 24, 25, 26, 24, 25, 24] +ages.reverse() +print(ages.reverse()) +``` +```py +['lemon', 'mango', 'orange', 'banana'] +[24, 25, 24, 26, 25, 24, 19, 22] +``` +### Sorting list items +The sort() method reorder the list items in ascending order. If a reverse is equal to true it arrange in descending order. +```py +lst = ['item1', 'item2'] +lst.sort() +lst.sort(reverse=True) +``` +```py +fruits = ['banana', 'orange', 'mango', 'lemon'] +fruits.sort() +print(fruits) +fruits.sort(reverse=True) +print(fruits) +ages = [22, 19, 24, 25, 26, 24, 25, 24] +ages.sort() +print(ages) +ages.sort(reverse=True) +print(ages) +``` +```sh +['banana', 'lemon', 'mango', 'orange'] +['orange', 'mango', 'lemon', 'banana'] +[19, 22, 24, 24, 24, 25, 25, 26] +[26, 25, 25, 24, 24, 24, 22, 19] +``` + +## Exercises: Day 5 +1. Declare an empty list +2. Declare a list with more than 5 number of items +3. Find the length of your list +4. Get the first item, the middle item and the last item of the list +5. Declare a list called mixed_data_types,put your(name, age, height, marital status, address) +6. Declare a list variable name it_companies and assign initial values Facebook, Google, Microsoft, Apple, IBM, Oracle and Amazon. +7. Print the list using print() +8. Print the number of companies in the list +9. Print the first, middle and last company +10. Print modify any of the companies +11. Add an IT company to it_companies +12. Change on of the it_companies item to uppercase +13. Join the it_companies with a string '# ' +14. Check if a certain company exists in the it_companies list. +15. Sort the list using sort() method +16. Reverse the list in descending order using reverse() method +17. Slice out the first 3 companies from the list +18. Slice out the last 3 companies from the list +19. Slice out the middle IT company or companies from the list +20. Remove the first IT company from the list +21. Remove the middle IT company or companies from the list +22. Remove the last IT company from the list +23. Remove all IT companies +24. Join the following lists: + ```py + front_end = ['HTML', 'CSS', 'JS', 'React', 'Redux'] + back-end = ['Node','Express', 'MongoDB'] + ``` + From 7b8f4836b361b1b8fad13603b7af3c2948721de2 Mon Sep 17 00:00:00 2001 From: Rasbin Rijal Date: Sun, 24 Nov 2019 14:05:24 +0200 Subject: [PATCH 22/27] Minor bug fix in string formatting --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index fd6fdb2..b0d8ed2 100644 --- a/readme.md +++ b/readme.md @@ -915,7 +915,7 @@ first_name = 'Asabeneh' last_name = 'Yetayeh' language = 'Python' formatted_string = 'I am %s %s. I teach %s' %(first_name, last_name, language) -print(formatted) +print(formatted_string) # Strings and numbers radius = 10 @@ -936,7 +936,7 @@ first_name = 'Asabeneh' last_name = 'Yetayeh' language = 'Python' formatted_string = 'I am {} {}. I teach {}'.format(first_name, last_name, language) -print(formatted) +print(formatted_string) a = 4 b = 3 From df0598ddf00413fdee0cb5a8711b229de9635a9f Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sun, 24 Nov 2019 15:27:44 +0200 Subject: [PATCH 23/27] more questions added day 5 --- data/countries.py | 195 ++++++++++++++++++++++++++++++++++++++++++++++ readme.md | 43 ++++++---- 2 files changed, 224 insertions(+), 14 deletions(-) create mode 100644 data/countries.py diff --git a/data/countries.py b/data/countries.py new file mode 100644 index 0000000..f3027a3 --- /dev/null +++ b/data/countries.py @@ -0,0 +1,195 @@ +countries = [ + 'Afghanistan', + 'Albania', + 'Algeria', + 'Andorra', + 'Angola', + 'Antigua and Barbuda', + 'Argentina', + 'Armenia', + 'Australia', + 'Austria', + 'Azerbaijan', + 'Bahamas', + 'Bahrain', + 'Bangladesh', + 'Barbados', + 'Belarus', + 'Belgium', + 'Belize', + 'Benin', + 'Bhutan', + 'Bolivia', + 'Bosnia and Herzegovina', + 'Botswana', + 'Brazil', + 'Brunei', + 'Bulgaria', + 'Burkina Faso', + 'Burundi', + 'Cambodia', + 'Cameroon', + 'Canada', + 'Cape Verde', + 'Central African Republic', + 'Chad', + 'Chile', + 'China', + 'Colombi', + 'Comoros', + 'Congo (Brazzaville)', + 'Congo', + 'Costa Rica', + "Cote d'Ivoire", + 'Croatia', + 'Cuba', + 'Cyprus', + 'Czech Republic', + 'Denmark', + 'Djibouti', + 'Dominica', + 'Dominican Republic', + 'East Timor (Timor Timur)', + 'Ecuador', + 'Egypt', + 'El Salvador', + 'Equatorial Guinea', + 'Eritrea', + 'Estonia', + 'Ethiopia', + 'Fiji', + 'Finland', + 'France', + 'Gabon', + 'Gambia, The', + 'Georgia', + 'Germany', + 'Ghana', + 'Greece', + 'Grenada', + 'Guatemala', + 'Guinea', + 'Guinea-Bissau', + 'Guyana', + 'Haiti', + 'Honduras', + 'Hungary', + 'Iceland', + 'India', + 'Indonesia', + 'Iran', + 'Iraq', + 'Ireland', + 'Israel', + 'Italy', + 'Jamaica', + 'Japan', + 'Jordan', + 'Kazakhstan', + 'Kenya', + 'Kiribati', + 'Korea, North', + 'Korea, South', + 'Kuwait', + 'Kyrgyzstan', + 'Laos', + 'Latvia', + 'Lebanon', + 'Lesotho', + 'Liberia', + 'Libya', + 'Liechtenstein', + 'Lithuania', + 'Luxembourg', + 'Macedonia', + 'Madagascar', + 'Malawi', + 'Malaysia', + 'Maldives', + 'Mali', + 'Malta', + 'Marshall Islands', + 'Mauritania', + 'Mauritius', + 'Mexico', + 'Micronesia', + 'Moldova', + 'Monaco', + 'Mongolia', + 'Morocco', + 'Mozambique', + 'Myanmar', + 'Namibia', + 'Nauru', + 'Nepal', + 'Netherlands', + 'New Zealand', + 'Nicaragua', + 'Niger', + 'Nigeria', + 'Norway', + 'Oman', + 'Pakistan', + 'Palau', + 'Panama', + 'Papua New Guinea', + 'Paraguay', + 'Peru', + 'Philippines', + 'Poland', + 'Portugal', + 'Qatar', + 'Romania', + 'Russia', + 'Rwanda', + 'Saint Kitts and Nevis', + 'Saint Lucia', + 'Saint Vincent', + 'Samoa', + 'San Marino', + 'Sao Tome and Principe', + 'Saudi Arabia', + 'Senegal', + 'Serbia and Montenegro', + 'Seychelles', + 'Sierra Leone', + 'Singapore', + 'Slovakia', + 'Slovenia', + 'Solomon Islands', + 'Somalia', + 'South Africa', + 'Spain', + 'Sri Lanka', + 'Sudan', + 'Suriname', + 'Swaziland', + 'Sweden', + 'Switzerland', + 'Syria', + 'Taiwan', + 'Tajikistan', + 'Tanzania', + 'Thailand', + 'Togo', + 'Tonga', + 'Trinidad and Tobago', + 'Tunisia', + 'Turkey', + 'Turkmenistan', + 'Tuvalu', + 'Uganda', + 'Ukraine', + 'United Arab Emirates', + 'United Kingdom', + 'United States', + 'Uruguay', + 'Uzbekistan', + 'Vanuatu', + 'Vatican City', + 'Venezuela', + 'Vietnam', + 'Yemen', + 'Zambia', + 'Zimbabwe', +]; \ No newline at end of file diff --git a/readme.md b/readme.md index fd6fdb2..fac1ccd 100644 --- a/readme.md +++ b/readme.md @@ -1619,28 +1619,43 @@ print(ages) 4. Get the first item, the middle item and the last item of the list 5. Declare a list called mixed_data_types,put your(name, age, height, marital status, address) 6. Declare a list variable name it_companies and assign initial values Facebook, Google, Microsoft, Apple, IBM, Oracle and Amazon. -7. Print the list using print() +7. Print the list using *print()* 8. Print the number of companies in the list 9. Print the first, middle and last company 10. Print modify any of the companies 11. Add an IT company to it_companies -12. Change on of the it_companies item to uppercase -13. Join the it_companies with a string '# ' -14. Check if a certain company exists in the it_companies list. -15. Sort the list using sort() method -16. Reverse the list in descending order using reverse() method -17. Slice out the first 3 companies from the list -18. Slice out the last 3 companies from the list -19. Slice out the middle IT company or companies from the list -20. Remove the first IT company from the list -21. Remove the middle IT company or companies from the list -22. Remove the last IT company from the list -23. Remove all IT companies -24. Join the following lists: +12. Insert an IT company in the middle of the companies list +13. Change one of the it_companies item to uppercase +14. Join the it_companies with a string '#;  ' +15. Check if a certain company exists in the it_companies list. +16. Sort the list using sort() method +17. Reverse the list in descending order using reverse() method +18. Slice out the first 3 companies from the list +19. Slice out the last 3 companies from the list +20. Slice out the middle IT company or companies from the list +21. Remove the first IT company from the list +22. Remove the middle IT company or companies from the list +23. Remove the last IT company from the list +24. Remove all IT companies item +25. Destroy the IT companies list +26. Join the following lists: ```py front_end = ['HTML', 'CSS', 'JS', 'React', 'Redux'] back-end = ['Node','Express', 'MongoDB'] ``` +27. After joining the lists in question 25. Copy the joined list and assigned it to a variable full_stack. Then insert, Python and SQL after Redux. +28. The following is a list of 10 students ages: +```sh +ages = [19, 22, 19, 24, 20, 25, 26, 24, 25, 24] +``` + * Sort the list and find the min and max age + * Add the min age and the max age + * Find the median age(two middle items divided by two) + * Find the average age(all items divided by number of items) + * Find the range of the ages(max minus min) + * Compare the value of (min - average) and (max - average), use *abs()* method +29. Find the middle country(ies) in the [countries list](https://github.com/Asabeneh/30-Days-Of-Python/tree/master/data/countries.py) +30. Divide the countries list into two equal lists if it is even if not one more country for the first half. From 8b9e719a9dcb0ac642ae1991a7ca6e3dd74327b6 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sun, 24 Nov 2019 15:52:19 +0200 Subject: [PATCH 24/27] more questions added day 5 --- readme.md | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/readme.md b/readme.md index fac1ccd..714a652 100644 --- a/readme.md +++ b/readme.md @@ -1283,6 +1283,7 @@ A list is collection of different data types which is ordered and modifiable(mut In python we can create list in two ways: * Using list builtin function ```py +# syntax lst = list() ``` ```py @@ -1291,6 +1292,7 @@ print(len(empty_list)) # 0 ``` * Using square brackets, [] ```py +# syntax lst = [] ``` ```py @@ -1397,6 +1399,7 @@ print(does_exist) # False ### Adding item in a list To add item to the end of an existing list we use the method ```py +# syntax lst = list() lst.append(item) ``` @@ -1410,6 +1413,7 @@ print(fruits) ### Inserting item in to a list Use insert() method to insert a single item at a specified index in a list. Note that other items are shifted to the right. ```py +# syntax lst = ['item1', 'item2'] lst.insert(index, item) ``` @@ -1423,6 +1427,7 @@ print(fruits) ### Removing item from list The remove method remove a specified item from a list ```py +# syntax lst = ['item1', 'item2'] lst.remove(item) ``` @@ -1436,13 +1441,14 @@ print(fruits) # ['orange', 'mango'] ### Removing item using pop The pop() method removes the specified index, (or the last item if index is not specified): ```py +# syntax lst = ['item1', 'item2'] lst.pop() # last item lst.pop(index) ``` ```py fruits = ['banana', 'orange', 'mango', 'lemon'] -fruits.remove() +fruits.pop() print(fruits) # ['banana', 'orange', 'mango'] fruits.remove(0) @@ -1452,7 +1458,7 @@ print(fruits) # ['orange', 'mango'] The del keyword removes the specified index and it can be also use to delete the list completely ```py - +# syntax lst = ['item1', 'item2'] del lst[index] # only a single item del lst # to delete the list completely @@ -1470,18 +1476,19 @@ print(fruits) # This should give: NameError: name 'fruits' is not defined ### Clearing list items The clear() method empties the list: ```py +# syntax lst = ['item1', 'item2'] lst.clear() ``` ```py fruits = ['banana', 'orange', 'mango', 'lemon'] fruits.clear() -print(fruits) # [] - +print(fruits) # [] ``` ### Copying a list It is possible to copy a list by reassigning to a new variable in the following way list2 = list1. Now, list2 is a reference of list1, any changes we make in list2 will also modify the original, list2. But there are lots of case in which we do not like to modify the original instead we like to have a different copy. One of way avoid the above problem is using *copy()*. ```py +# syntax lst = ['item1', 'item2'] lst_copy = lst.copy() ``` @@ -1495,6 +1502,7 @@ There are several ways to join, or concatenate, two or more lists in Python. * Plus Operator (+) ```py +# syntax list3 = list1 +list2 ``` ```py @@ -1517,7 +1525,10 @@ print(fruits_and_vegetables ) * Joining using extend() method ```py -list3 = list1.extend(list2) +# syntax +lst1 = ['item1', 'item2'] +lst2 = ['item3', 'item4','item5'] +list1.extend(list2) ``` ```py num1 = [0, 1, 2, 3] @@ -1546,6 +1557,7 @@ Fruits and vegetables: ['banana', 'orange', 'mango', 'lemon', 'Tomato', 'Potato' ### Counting Items in a list The count() method returns the number of times an item appears in a list: ```py +# syntax lst = ['item1', 'item2'] lst.count(item) ``` @@ -1558,6 +1570,7 @@ print(ages.count(24)) # 3 ### Finding index of an item The count() method returns the index of an item in the list: ```py +# syntax lst = ['item1', 'item2'] lst.index(item) ``` @@ -1570,6 +1583,7 @@ print(ages.index(24)) # 2, the first occurrence ### Reversing a list The reverse() method reverse the order of a list. ```py +# syntax lst = ['item1', 'item2'] lst.reverse() @@ -1589,9 +1603,10 @@ print(ages.reverse()) ### Sorting list items The sort() method reorder the list items in ascending order. If a reverse is equal to true it arrange in descending order. ```py +# syntax lst = ['item1', 'item2'] -lst.sort() -lst.sort(reverse=True) +lst.sort() # ascending +lst.sort(reverse=True) # descending ``` ```py fruits = ['banana', 'orange', 'mango', 'lemon'] @@ -1641,16 +1656,16 @@ print(ages) 26. Join the following lists: ```py front_end = ['HTML', 'CSS', 'JS', 'React', 'Redux'] - back-end = ['Node','Express', 'MongoDB'] + back_end = ['Node','Express', 'MongoDB'] ``` -27. After joining the lists in question 25. Copy the joined list and assigned it to a variable full_stack. Then insert, Python and SQL after Redux. +27. After joining the lists in question 26. Copy the joined list and assigned it to a variable full_stack. Then insert, Python and SQL after Redux. 28. The following is a list of 10 students ages: ```sh ages = [19, 22, 19, 24, 20, 25, 26, 24, 25, 24] ``` * Sort the list and find the min and max age * Add the min age and the max age - * Find the median age(two middle items divided by two) + * Find the median age(one middle item or two middle items divided by two) * Find the average age(all items divided by number of items) * Find the range of the ages(max minus min) * Compare the value of (min - average) and (max - average), use *abs()* method From d9397d969f78b4d7fecaf2099b1ecef876c10a23 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sun, 24 Nov 2019 16:15:03 +0200 Subject: [PATCH 25/27] some fixes --- images/list_index.png | Bin 0 -> 12849 bytes images/string_index.png | Bin 0 -> 10542 bytes readme.md | 8 +++++++- 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 images/list_index.png create mode 100644 images/string_index.png diff --git a/images/list_index.png b/images/list_index.png new file mode 100644 index 0000000000000000000000000000000000000000..355324e18cf25596f0dfc7cb4b559f04f2307fa0 GIT binary patch literal 12849 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 literal 0 HcmV?d00001 diff --git a/images/string_index.png b/images/string_index.png new file mode 100644 index 0000000000000000000000000000000000000000..bf4c3f156dd321017e6cad3fa2d67d10fa356f45 GIT binary patch literal 10542 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 literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 4d9bd51..ad4bdf5 100644 --- a/readme.md +++ b/readme.md @@ -994,6 +994,9 @@ print(f) # n ``` #### Accessing characters in strings by index In programming counting starts from zero. Therefore the first letter of a string is at zero index and the last letter of a string is the length of a string minus one. + + ![String index](./images/string_index.png) + ```py language = 'Python' first_letter = language[0] @@ -1336,7 +1339,8 @@ Number of countries: 5 lst = ['Asabeneh', 250, True, {'country':'Finland', 'city':'Helsinki'}] # list containing different data types ``` ### Accessing list items using positive indexing -We access each item in a list using their index. A list index start from 0. +We access each item in a list using their index. A list index start from 0. The picture below show clearly where the index starts +![List index](./images/list_index.png) ```py fruits = ['banana', 'orange', 'mango', 'lemon'] first_fruit = fruits[0] # we are accessing the first item using its index @@ -1672,6 +1676,8 @@ ages = [19, 22, 19, 24, 20, 25, 26, 24, 25, 24] 29. Find the middle country(ies) in the [countries list](https://github.com/Asabeneh/30-Days-Of-Python/tree/master/data/countries.py) 30. Divide the countries list into two equal lists if it is even if not one more country for the first half. +['banana', 'orange', 'mango', 'lemon'] + From f804a81e54ee69c67af3531711f666dfb46d7bb3 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sun, 24 Nov 2019 16:27:25 +0200 Subject: [PATCH 26/27] some fixes --- images/list_negative_indexing.png | Bin 0 -> 12478 bytes readme.md | 8 ++++++-- 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 images/list_negative_indexing.png diff --git a/images/list_negative_indexing.png b/images/list_negative_indexing.png new file mode 100644 index 0000000000000000000000000000000000000000..771c2a1a62d3532b7414124bd79edfe44c7ef9ba GIT binary patch literal 12478 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 literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index ad4bdf5..8233fab 100644 --- a/readme.md +++ b/readme.md @@ -1355,10 +1355,14 @@ last_fruit = fruits[last_index] ``` ### Accessing list items using negative indexing Negative indexing means beginning from the end, -1 refers to the last item, -2 refers to the second last item. + +![List negative indexing](./images/list_negative_indexing.png) ```py -fruits = ['banana', 'orange', 'mango', 'lemon'] +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 ``` @@ -1676,7 +1680,7 @@ ages = [19, 22, 19, 24, 20, 25, 26, 24, 25, 24] 29. Find the middle country(ies) in the [countries list](https://github.com/Asabeneh/30-Days-Of-Python/tree/master/data/countries.py) 30. Divide the countries list into two equal lists if it is even if not one more country for the first half. -['banana', 'orange', 'mango', 'lemon'] + From 60b7f423d1521e9f8095850b05f9df9fff263ef5 Mon Sep 17 00:00:00 2001 From: Asabeneh Date: Sun, 24 Nov 2019 21:48:26 +0200 Subject: [PATCH 27/27] day 6 --- images/tuple_negative_indexing.png | Bin 0 -> 12250 bytes images/tuples_index.png | Bin 0 -> 12753 bytes readme.md | 225 ++++++++++++++++++++++++++++- 3 files changed, 223 insertions(+), 2 deletions(-) create mode 100644 images/tuple_negative_indexing.png create mode 100644 images/tuples_index.png diff --git a/images/tuple_negative_indexing.png b/images/tuple_negative_indexing.png new file mode 100644 index 0000000000000000000000000000000000000000..364bb864172a5050564c7d4bc05fdb0217ade8b4 GIT binary patch literal 12250 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 JTEaN^e*us9>4*RT literal 0 HcmV?d00001 diff --git a/images/tuples_index.png b/images/tuples_index.png new file mode 100644 index 0000000000000000000000000000000000000000..641c325a3ec17a44439e555508d856144300d981 GIT binary patch literal 12753 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