Interactive tutorial of Python programming language for beginners
- Install Jupyter Notebook from this link.
- Welcome to Python
- Download and Installation
- Math Basics
- Input/Output
- Data Types
- Loops
- Flow Control
- Comments
- Functions
- Modules
- Exception
- Classes and Objects
- Inheritance
- Multiple Inheritance
- Threading
- Bitwise Operators
Python is a programming language which can be used to make computer games, cross platform softwares, website applications and much more.
Visit the offical website - https://www.python.org/
# Addition
3 + 4
7
# Multiplication
5 * 20
100
# Bodmas
8 + 2 * 10
28
# Paranthesis
(8 + 2) * 10
100
# Float Division
# Returns the actual division output
18 / 4
4.5
# Integral Division
# Returns the integer part of the division
18 // 4
4
# Remainder
18 % 4
2
# Exponent
5 ** 3
125
# Takes some input from the user
x = input('Input : ')
# Prints out the same as output
print('Output : ' + x)
Input : 123abc!@#
Output : 123abc!@#
x = 5
y = 5
x + y
10
5 ** x
3125
'String is comprised of characters in quotes'
'String is comprised of characters in quotes'
"It also works in double quotes"
'It also works in double quotes'
# 'I don't think if this works'
# Escaping character
'I don\'t think this will create any problem.'
"I don't think this will create any problem."
# Use double quotes to remove this type of problem
"Just don't use single quotes!!"
"Just don't use single quotes!!"
# Formatting Characters
# Tab - '\t'
# Newline - '\n'
print('C:\Desktop\newfolder')
C:\Desktop
ewfolder
# Use r to consider the raw string i.e. without any formatting
print(r'C:\Desktop\newfolder')
C:\Desktop\newfolder
# String multiplication
x = 'String '
x * 5
'String String String String String '
# String Concatenation
'Rajat ' + 'Goyal'
'Rajat Goyal'
# Integer to String Conversion
quantity = 5
denomination = " Rupees"
str(quantity) + denomination
'5 Rupees'
name = 'Rajat Goyal'
# Substring of a string by defining the range
name[3:8]
'at Go'
# Substring by defining the start index
name[6:]
'Goyal'
# Substring by defining the end index
name[:8]
'Rajat Go'
# Substring without any index specified will return the original string
name[:]
'Rajat Goyal'
# Print function which outputs the value on the console screen
print("Hello World")
Hello World
# Length of a string - Blankspace also counts as a character
len("Hello World")
11
name = "Rajat Goyal"
# Access characters of string which is 0-indexed using square brackets
name[0]
'R'
# Access characters from the last using -1 indexing
name[-1]
'l'
# Define a list of primitive data types
marks = [49, 53, 87, 65, 71]
# Access the list which is 0-indexed i.e. (0, 1, 2, ... , n-1)
marks[0]
49
# Change any value in the list
marks[2] = 57
marks
[49, 53, 57, 65, 71]
# Add new elements to the list
updatedMarks = marks + [84, 68]
updatedMarks
[49, 53, 57, 65, 71, 84, 68]
# Add elements one at a time
marks.append(91)
marks
[49, 53, 57, 65, 71, 91]
# Sublist of a list
marks[:2]
[49, 53]
# Change sublist to a new list
marks[:2] = [0]
marks
[0, 57, 65, 71, 91]
Sets do not contain any element twice
subjects = {'Mathematics', 'Physics', 'Chemistry', 'English', 'Economics'}
print(subjects)
{'Chemistry', 'Mathematics', 'Physics', 'Economics', 'English'}
if 'Physics' in subjects:
print("It's gonna be fun!!")
else:
print('-_-')
It's gonna be fun!!
Dictionary is a set of key value pair
students = {59:'Rajat', 64:'Rohan', 66:'Rohit'}
print(students)
print(students[64])
{59: 'Rajat', 64: 'Rohan', 66: 'Rohit'}
Rohan
# Iterate over all elements of the dictionary
for key, value in students.items():
print(str(key) + " : " + value)
59 : Rajat
64 : Rohan
66 : Rohit
age = 27
if age >= 18:
print("I can vote now!")
I can vote now!
name = "Rajat"
if name is "Rajat":
print('Hello Lord!')
else:
print("I don't know ya")
Hello Lord!
num = 18
if num % 15 == 0:
print("FooBar")
elif num % 5 == 0:
print("Foo")
elif num % 3 == 0:
print("Bar")
else:
print("Nothing")
Bar
foods = ['bacon', 'tuna', 'ham', 'beef']
for f in foods:
print(f)
print(len(f))
bacon
5
tuna
4
ham
3
beef
4
# 1 argument - [0,n-1]
for x in range(5):
print(x)
0
1
2
3
4
# 2 arguments - [a, b-1]
for x in range(1, 6):
print(x)
1
2
3
4
5
# 3 arguments - arithmetic progression with 3rd argument as the difference
for x in range(0, 25, 5):
print(x)
0
5
10
15
20
num = 5
while num < 10:
print("Num :", num)
num += 1
Num : 5
Num : 6
Num : 7
Num : 8
Num : 9
number = 5
for n in range(11):
if n is number:
print("Found the number!!")
break
print('-')
-
-
-
-
-
Found the number!!
number = 5
for n in range(11):
if n is number:
print("Skip the number!!")
continue
print(n)
0
1
2
3
4
Skip the number!!
6
7
8
9
10
# This is a single line comment
print('Hello')
'''
Triple quotes are used for
- multi
- line
- comments
'''
print('world')
Hello
world
# Defining a function
def sayHello():
print('Hello World!')
# Calling the function
sayHello()
Hello World!
# Single Parameter
def feet_to_inches(feet):
inches = 12 * feet
print(str(feet) + " feet = " + str(inches) + " inches")
feet_to_inches(5)
feet_to_inches(6.2)
5 feet = 60 inches
6.2 feet = 74.4 inches
# Multiple Parameters
def calculateSimpleInterest(amount, rate, time):
interest = (amount * rate * time) / 100
print(interest)
calculateSimpleInterest(1250, 5, 3)
187.5
# Return statement
def calculatePercentage(obtainedMarks, totalMarks):
percentage = (obtainedMarks / totalMarks) * 100
return percentage
print('I scored ' + str(calculatePercentage(323, 400)) + "%")
I scored 80.75%
a = 25 # Global variable
def funcA():
b = 30 # Local variable
print(a) # Prints out the global variable
print(b) # Prints out the local variable
def funcB():
print(a) # Prints out the global variable
# print(b) # Variable b is not accessible here
funcA()
funcB()
25
30
25
# Default value for the parameter 'sex' is 'Unknown'
# This means that if no value is passed for the parameter 'sex', default value will be taken
def get_gender(sex='Unknown'):
if sex is 'm':
sex = 'Male'
elif sex is 'f':
sex = 'Female'
print(sex)
get_gender('m')
get_gender('f')
get_gender()
Male
Female
Unknown
# Default value of 'time' is '1 year'
# With the help of keyword arguments, we can change specific arguments also
def calculateSimpleInterest(amount=1000, rate=2, time=1):
interest = (amount * rate * time) / 100
print(interest)
calculateSimpleInterest() # Default arguments
calculateSimpleInterest(1200, 5, 2)
calculateSimpleInterest(time=2) # Specific value for parameter 'time' only
calculateSimpleInterest(time=2, rate=5) # No need to maintain the correct order
20.0
120.0
40.0
100.0
# Use asterisk(*) to specify unknown number of arguments
def add_numbers(*args):
total = 0
for a in args:
total += a
print(total)
add_numbers()
add_numbers(3)
add_numbers(1, 2, 3, 4, 5)
0
3
15
# Asterisk(*) does the unpacking of list into arguments
def calculateSimpleInterest(amount=1000, rate=2, time=1):
interest = (amount * rate * time) / 100
print(interest)
data = [1200, 5, 2]
calculateSimpleInterest(data[0], data[1], data[2])
calculateSimpleInterest(*data)
120.0
120.0
With the help of modules, there is no need to rewrite functions over and over again.
# Create a file test.py which acts as a module
# Import the module(thus importing all functions in it)
import test
# Call the function using the module name
test.hello()
Hello World
import random
x = random.randrange(1, 1000)
print(x)
220
# From 'test' module, import specific function 'hello'
from test import hello
hello()
Hello World
import urllib.request
def download_web_image(url):
urllib.request.urlretrieve(url, 'images/image.png')
download_web_image("https://www.python.org/static/opengraph-icon-200x200.png")
fw = open('sample.txt', 'w')
for i in range(5):
fw.write(str(i) + '\n')
fw.close()
fr = open('sample.txt', 'r')
data = fr.read()
print(data)
fr.close()
0
1
2
3
4
while True:
try:
x = int(input('\nEnter a number \n'))
print(50/x)
break
except ValueError:
# If input contains anything other than digits
print('Oops! Please enter a number only.')
except ZeroDivisionError:
# If input is equal to zero
print("Don't pick zero")
except:
# All other errors will be caught by this method
break
finally:
# This is called in every case
print('Loop complete')
Enter a number
abc
Oops! Please enter a number only.
Loop complete
Enter a number
0
Don't pick zero
Loop complete
Enter a number
123
0.4065040650406504
Loop complete
class Class:
variable = 10
def incrementVariable(self):
self.variable += 1
def decrementVariable(self):
self.variable -= 1
def printVariable(self):
print(self.variable)
# Creating an object
obj = Class()
# Calling the member functions of the class using the object
obj.printVariable()
obj.incrementVariable()
obj.printVariable()
obj.decrementVariable()
obj.printVariable()
10
11
10
# Different objects have different memory blocks associated for class member variables
obj1 = Class()
obj2 = Class()
obj1.incrementVariable()
obj2.decrementVariable()
obj1.printVariable()
obj2.printVariable()
11
9
class Class:
# Constructor helps in constructing objects
def __init__(self, x=10):
self.variable = x
def printVariable(self):
print(self.variable)
# Initiating an object will first call the constructor i.e init function
obj = Class()
obj1 = Class(32)
obj.printVariable()
obj1.printVariable()
10
32
class Girl:
# Class variables are shared by all instances of the class
gender = 'female'
def __init__(self, name):
# For each object of the class, instance variables are different
self.name = name
r = Girl('name1')
s = Girl('name2')
print(r.gender)
print(s.gender)
print(r.name)
print(s.name)
female
female
name1
name2
class Parent():
def print_last_name(self):
print('Last Name')
class Child(Parent):
def print_first_name(self):
print('First Name')
child = Child()
child.print_first_name()
# We can call the parent class functions also on any object of child class
child.print_last_name()
First Name
Last Name
class Parent():
def print_last_name(self):
print('Last Name')
class Child(Parent):
def print_first_name(self):
print('First Name')
# Overriding a function already present in the parent class
def print_last_name(self):
print('Another Last Name')
child = Child()
child.print_first_name()
# New function defined in child class overrides the parent function
child.print_last_name()
First Name
Another Last Name
Inherting the functions from two or more classes
class A():
def funcA(self):
print('Function of class A')
class B():
def funcB(self):
print('Function of class B')
# Multiple inheritance
class C(A, B):
# If no function or class variable in present in class, we have to write the keyword 'pass'
pass
c = C()
c.funcA()
c.funcB()
Function of class A
Function of class B
import threading
class Messenger(threading.Thread):
def run(self):
for _ in range(10):
print(threading.currentThread().getName())
x = Messenger(name = 'Send out messages')
y = Messenger(name = 'Receive messages')
x.start()
y.start()
Send out messagesReceive messages
Receive messages
Send out messagesReceive messages
details = ['Rajat', 'Goyal', 20]
# Unpacking a list into different variables
first_name, last_name, age = details
print(first_name)
print(last_name)
print(age)
Send out messagesReceive messages
Send out messagesReceive messages
Receive messagesSend out messages
Receive messagesSend out messages
Receive messagesSend out messages
Receive messagesSend out messages
Receive messagesSend out messages
Send out messages
Rajat
Goyal
20
# In the above example, we knew the number of elements(attributes) present in the list
# We can use asterisk(*) to store the remaining elements of the list
marks = [23, 26, 76, 45, 59, 38, 94, 43]
first, *remaining, last = marks
print(first)
print(remaining)
print(last)
23
[26, 76, 45, 59, 38, 94]
43
Attach two lists together
first = ['Bruce', 'Tom', 'Taylor']
last = ['Wayne', 'Hanks', 'Swift']
names = zip(first, last)
for a, b in names:
print(a, b)
Bruce Wayne
Tom Hanks
Taylor Swift
function_name = lambda parameter: computation
answer = lambda x: x*5
print(answer(5))
25
marks = {
'physics' : 93,
'mathematics' : 95,
'chemistry' : 93,
'english' : 90,
'physical education' : 98
}
# Minimum according to the alphabetical order of keys
print(min(zip(marks.keys(), marks.values())))
# Minimum according to the numerical value
print(min(zip(marks.values(), marks.keys())))
# Maximum of all the values
print(max(zip(marks.values(), marks.keys())))
# Sorted list of tuples
print(sorted(zip(marks.values(), marks.keys())))
('chemistry', 93)
(90, 'english')
(98, 'physical education')
[(90, 'english'), (93, 'chemistry'), (93, 'physics'), (95, 'mathematics'), (98, 'physical education')]
from struct import *
# Store as bytes data
packed_data = pack('iif', 6, 19, 4.73)
print(packed_data)
b'\x06\x00\x00\x00\x13\x00\x00\x00)\\\x97@'
print(unpack('iif', packed_data))
(6, 19, 4.730000019073486)
income = [10, 30, 75]
def double_money(money):
return money * 2
new_income = list(map(double_money, income))
print(new_income)
[20, 60, 150]
a = 50 # 110010
b = 25 # 011001
c = a & b # 010000
print(c)
16
a = 50 # 110010
b = 25 # 011001
c = a | b # 111011
print(c)
59
a = 240 # 11110000
# Left shift
b = a << 2 # 1111000000
print(b)
# Right shift
b = a >> 2 # 00111100
print(b)
960
60
import heapq
grades = [32, 43, 654, 34, 132, 66, 99, 532]
print(heapq.nlargest(3, grades))
[654, 532, 132]
stocks = [
{'ticker': 'AAPL', 'price': 201},
{'ticker': 'GOOG', 'price': 800},
{'ticker': 'F', 'price': 54},
{'ticker': 'MSFT', 'price': 313},
{'ticker': 'YHOO', 'price': 68},
]
print(heapq.nsmallest(2, stocks, key=lambda stock: stock['price']))
[{'ticker': 'F', 'price': 54}, {'ticker': 'YHOO', 'price': 68}]
from collections import Counter
text = "Python can be easy to pick up whether you're a first time programmer or you're experienced with other languages. The following pages are a useful first step to get on your way writing programs with Python!"
words = text.split()
counter = Counter(words)
top_three = counter.most_common(3)
print(top_three)
[('to', 2), ("you're", 2), ('a', 2)]