Python Basics

In [ ]:
Beginner friendly, simple to read, Interpreted, Dynamically typed
In [ ]:
Python Hello World
In [1]:
print ("Hello world")
Hello world

Python variables

In [4]:
a=3
In [139]:
print (a)
True
In [7]:
print ("Type of a -> ", type(a))
Type of a ->  <class 'int'>
In [ ]:
Maximum possible value of an integer in python?
In [140]:
a = 10000000000000000000000000000000000000000000
b = 1
a+b
Out[140]:
10000000000000000000000000000000000000000001
In [8]:
b = 4.555
print (b)
4.555
In [9]:
print ("Type of b -> ", type(b))
Type of b ->  <class 'float'>
In [10]:
c = "Python"
print (c)
Python
In [11]:
print ("Type of c -> ", type(c))
Type of c ->  <class 'str'>
In [22]:
d = 'p'
print (d)
p
In [23]:
print ("Type of d -> ", type(d))
Type of d ->  <class 'str'>
In [71]:
d = 3+8j
print (d)
(3+8j)
In [72]:
print ("Type of d -> ", type(d))
Type of d ->  <class 'complex'>
In [69]:
e = True
print ("Type of e -> ", type(e))
Type of e ->  <class 'bool'>

Python Math operators

+ -> Addition: adds two operands

In [141]:
a = 9
b = 8
a+b
Out[141]:
17
In [142]:
a = "Python"
b = "Programming"
a+b
Out[142]:
'PythonProgramming'
In [143]:
a = 3
b = "python"
a+b
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-143-6e8d2664dc48> in <module>()
      1 a = 3
      2 b = "python"
----> 3 a+b

TypeError: unsupported operand type(s) for +: 'int' and 'str'
In [144]:
a = 9.8
b = 9
a+b
Out[144]:
18.8
In [145]:
a = "python"
c = 'l'
a+c
Out[145]:
'pythonl'

- -> Subtraction: subtracts two operands

In [146]:
a = 9
b = 8
a-b
Out[146]:
1
In [147]:
a = "PythonProgramming"
b = "Python"
a-b
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-147-f693bab7eb86> in <module>()
      1 a = "PythonProgramming"
      2 b = "Python"
----> 3 a-b

TypeError: unsupported operand type(s) for -: 'str' and 'str'
In [148]:
a = 0.333333
b = 4.222221
a-b
Out[148]:
-3.888888

* -> Multiplication: multiplies two operands

In [149]:
a = 3.4444
b = 3
a*b
Out[149]:
10.3332
In [150]:
a = "python"
b = "programming"
a*b
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-150-41081f0d5590> in <module>()
      1 a = "python"
      2 b = "programming"
----> 3 a*b

TypeError: can't multiply sequence by non-int of type 'str'
In [151]:
a = 3
b = "python"
a*b
Out[151]:
'pythonpythonpython'
In [152]:
a = "python"
b = 3
a*b
Out[152]:
'pythonpythonpython'

/ -> Division (float): divides the first operand by the second

In [153]:
a = 9
b = 4
a/b
Out[153]:
2.25

// Division (floor): divides the first operand by the second

In [154]:
a = 9
b = 4
a//b
Out[154]:
2

% Modulus: returns the remainder when first operand is divided by the second

In [156]:
a = 17
b = 5
a%b
Out[156]:
2
In [155]:
a = 17.9
b = 5
a%b
Out[155]:
2.8999999999999986

** -> Exponent

In [204]:
a = 5
b = 2
a**2
Out[204]:
25
In [206]:
a = 9.6
b = 0.9
a**b
Out[206]:
7.656743697665163
In [205]:
a = "hi"
b = 2
a**b
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-205-e843df7360da> in <module>()
      1 a = "hi"
      2 b = 2
----> 3 a**b

TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

Relational Operators

In [49]:
a = 80
b = 90
print ("a>b : ", a>b)
print ("a<b : ", a<b)
a>b :  False
a<b :  True
In [157]:
a = "python"
b = "programming"
a>b
Out[157]:
True
In [ ]:
Strings are compared lexicographically
In [ ]:
== -> Equal to: True if both operands are equal
In [158]:
a = 90
b = 90
print (a==b)
a = "hi"
b = "hi"
c = b
print (a==c)
a = "hi"
b = "Hi"
print (a==b)
a = 90.999997
b = 90.999998
print (a==b)
a = 9.9999999999999999993
b = 9.9999999999999999994
print (a==b)
True
True
False
False
True
In [66]:
a = "python"
b = 0
print (a!=b)
True
In [67]:
a = "python"
b = 90
print (a>=b)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-67-1d22cc6400ed> in <module>()
      1 a = "python"
      2 b = 90
----> 3 print (a>=b)

TypeError: '>=' not supported between instances of 'str' and 'int'
In [68]:
a = 100
b = 100.01
print (a<=b)
True

Logical operators ( and, or , not)

In [125]:
a = True
b = False
c = 0
d = 90
e = -9
print (a and b)
print (a or b)
print (not b)
print (not c)
print (not d)
print (not e)
print (c and e)
print (d and e)
print (e and d)
print (e and not d)
False
True
True
True
False
False
0
-9
90
False

Iteration, for loop, Range

In [75]:
for i in range(10):
    print (i)
0
1
2
3
4
5
6
7
8
9
In [76]:
#Print from 5 to 9
for i in range(5,10):
    print (i)
5
6
7
8
9
In [79]:
for i in range(1,10,2):
    print (i)
1
3
5
7
9
In [83]:
for i in range(1,-10):
    print (i)
In [86]:
for i in range(1,-10, -2):
    print (i)
1
-1
-3
-5
-7
-9

Lists

In [87]:
l = [1,2,3]
print ("Type of l : ",type(l))
Type of l :  <class 'list'>
In [88]:
l = ["python", "programming", "is", "fun"]
print (l)
['python', 'programming', 'is', 'fun']
In [89]:
l = [1, "py", 3.4, True]
print (l)
[1, 'py', 3.4, True]
In [95]:
l1 = ["python", "programming", "session"]
l2 = l1
print (l2)
l2[1]="basics"
print (l1)
l1 = [0,9,8]
print ("l1 = ",l1)
print ("l2 = ", l2)
['python', 'programming', 'session']
['python', 'basics', 'session']
l1 =  [0, 9, 8]
l2 =  ['python', 'basics', 'session']

Slicing

In [133]:
l = [1,2,3,4,5,6,7,8,9,10]
l
Out[133]:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [184]:
print ("l[0:3] -> ", l[0:3])
print ("l[9:3] -> ", l[9:3])
print ("l[2:2] -> ", l[2:2])
print ("l[2:20] -> ", l[2:20])
print ("l[2:] -> ", l[2:])
print ("l[:2] -> ", l[:2])
print ("l[-1:-3] -> ", l[-1:-3])
print ("l[-3:-1] -> ", l[-3:-1])
print ("l[-4:-1] -> ", l[-4:-1])
print ("l[:-1] -> ", l[:-1])
print ("l[-1:] -> ", l[-1:])
print ("l[0:5:2] -> ", l[0:5:2])
print ("l[-6:-1:-2] -> ", l[-6:-1:-2])
print ("l[-6:-1:2] -> ", l[-6:-1:2])
print ("l[6:0:-2] -> ", l[6:0:-2])
print ("l[::2] -> ", l[::2])
l[0:3] ->  [1, 2, 3]
l[9:3] ->  []
l[2:2] ->  []
l[2:20] ->  [3, 4, 5, 6, 7, 8, 9]
l[2:] ->  [3, 4, 5, 6, 7, 8, 9]
l[:2] ->  [1, 2]
l[-1:-3] ->  []
l[-3:-1] ->  [7, 8]
l[-4:-1] ->  [6, 7, 8]
l[:-1] ->  [1, 2, 3, 4, 5, 6, 7, 8]
l[-1:] ->  [9]
l[0:5:2] ->  [1, 3, 5]
l[-6:-1:-2] ->  []
l[-6:-1:2] ->  [4, 6, 8]
l[6:0:-2] ->  [7, 5, 3]
l[::2] ->  [1, 3, 5, 7, 9]
In [ ]:
Assignment using slicing
In [164]:
l = [9,8,7,6,5,4,3,2,1]
l[0]=99
l
Out[164]:
[99, 8, 7, 6, 5, 4, 3, 2, 1]
In [165]:
l[0:2]=90,80
l
Out[165]:
[90, 80, 7, 6, 5, 4, 3, 2, 1]
In [166]:
l[-3:-1] = [30,20]
l
Out[166]:
[90, 80, 7, 6, 5, 4, 30, 20, 1]
In [167]:
l[4:6]=90
l
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-167-b9f73dc13a2b> in <module>()
----> 1 l[4:6]=90
      2 l

TypeError: can only assign an iterable
In [168]:
l[2:3]="p"
l
Out[168]:
[90, 80, 'p', 6, 5, 4, 30, 20, 1]
In [169]:
l[3:6]=[]
l
Out[169]:
[90, 80, 'p', 30, 20, 1]
In [172]:
l[-1] = 10
l
Out[172]:
[90, 80, 'p', 30, 20, 10]

List Iteration

In [174]:
l = [1,2,3,4,5,6,7,8,9]
#Add all elements in the list
acc = 0
for i in range(len(l)):
    acc += l[i]
acc
Out[174]:
45
In [175]:
l = [1,2,3,4,5,6,7,8,9]
#Add all elements in the list
acc = 0
for i in l:
    acc += i
acc
Out[175]:
45
In [176]:
l = [1,2,3,4,5,6,7,8,9]
#Add all elements in the list
acc = 0
for i in l[0:5]:
    acc += i
acc
Out[176]:
15
In [177]:
#Print alternate elements
l = [1,2,3,4,5,6,7,8,9]
for i in l[0::2]:
    print (i)
1
3
5
7
9

List Comprehension

In [191]:
l1 = []
for i in range(10):
    l1.append(i)
l1
Out[191]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [193]:
l2 = [i for i in range(10)]
l2
Out[193]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

List Comprehension with conditions

In [195]:
#Get a list of integers divisible by 3 
l3 = [i for i in range(10) if i%3==0]
l3
Out[195]:
[0, 3, 6, 9]
In [196]:
#Using if else
l = ['d','g','r','e','s','j','q','t','i']
vowels = ['a', 'e', 'i', 'o', 'u']
l4 = ["Vowel" if i in vowels else "Consonant" for i in l]
l4
Out[196]:
['Consonant',
 'Consonant',
 'Consonant',
 'Vowel',
 'Consonant',
 'Consonant',
 'Consonant',
 'Consonant',
 'Vowel']
In [197]:
l1 = [1,2,3]
l2 = [4,5,6]
#Multiply both the list using for loops
l3 = []
for i in l1:
    for j in l2:
        l3.append(i*j)
l3
Out[197]:
[4, 5, 6, 8, 10, 12, 12, 15, 18]
In [199]:
#Nested List comprehension
l1 = [1,2,3]
l2 = [4,5,6]
l3 = [i*j for j in l1 for i in l2]
l3
Out[199]:
[4, 5, 6, 8, 10, 12, 12, 15, 18]
In [203]:
#Nested List comprehension
l1 = [[1,2,3], [4,5,6], [7,8,9]]
#print all the elements as single list
l2 = [i for j in l1 for i in j]
l2
Out[203]:
[1, 2, 3, 4, 5, 6, 7, 8, 9]