Cheatsheets are good when you want to revise some of the concepts but not an idle way to start learning.

Theory

VSCODE extension:

Making a virtual env:

Why Virtual env?

Because managing python dependencies is a mess, this will install dependencies for that project only instead of globally.

Comments in python

# single line comments
'''
This is a example of 
Multiline comment.
'''

Data Types:

Naming conventions:

Printing in Python:

print("")

Numbers in Python:

print(1+2) # Addition
print(3-2) # Subtraction
print(3*2) # Multiplication
print(3/2) # Division
print(3%2) # Mod.
print(3**2) # Power
print((3 + 10) * 15) # Using Braces.

Using with variables:

a = 10
print(a)
# TO check the type:
print(type(a))

Variables make it easy to understands the code.

my_income = 100
tax_rate = 0.1
my_taxes = my_income*tax_rate
print("My income tax is",my_taxes)

Strings in Python:

String is nothing but ordered seq. of characters. Note: Strings are immutable

Using directly with print:

print("Simple String")
print('Add quotes inside the  "string" by using single quote.')
print("concat string "+"like this")

Taking Input

greeting = "Hello"
name = input("Enter your name: ")
print(greeting + ' ' + name)

Use , instead of + This will auto seprate them by spaces.

print(greeting,name)

Escape characters in python:

print("Hello\nWorld")
# or
print("""
 ---
Hello
world\
Yeahh!!
"Quotes"
'Single quote'
 ---
""")

Check the length of the string:

print(len("Hey"))

String indexing

a = "Hello"
a[0] Will return H

String Slicing

a[start:end:step]
a[0:2] # Start from 0th index till 2(excluding)
a[::2] # Step will be 2.
# We can use this to print a string backwards
s[::-1]

String methods:

# Multiply Strings
a = 'H' * 10
# Upper Case a string
s.upper()
# Lower case
s.lower()
# Splitting
s.split('W')
s.split() # split via whitespace.

Formatting strings:

print('The {2} {1} {0}'.format('fox','brown','quick'))
print('First Object: {a}, Second Object: {b}, Third Object: {c}'.format(a=1,b='Two',c=12.3))
num = 23.45
print("My 10 character, four decimal number is:{0:10.4f}".format(num))
print(f"My 10 character, four decimal number is:{num:10.4f}")

String Print alignment

left_alignment = "Left Text"
center_alignment = "Centered Text"
right_alignment = "Right Text"
print(f"{left_alignment : <20}|{center_alignment : ^15}|{right_alignment : >20}")
More about this: https://pyformat.info/

Lists in Python:

Basic Usage

# Supports dynamic types, as it is python :)
my_list = [100,2.5,"Mohit"]
# len(my_list) for length
# Change objs:
my_list[0]=1000

Slicing is same as String slicing

Concat

a = [1,2,3]
b = [4,5]
c = a + b

Append the list

my_list.append(10.8)

Poping objs

my_list.pop(index) # default index is -1, returns popped element.

Sorting

a = [1,2,3]
a.sort() # in-place sort, it will modify the list, returns None
# Tip: use sorted(a) it will return the value instead of in-place

Reverse

a = [1,2,3]
a.reverse() # also in-place

Nested list

a = [1, 2, 3, [4,5,]]
print(a[3][1]) # Returns 5.

Dictionaries in Python

Unordered key-value mappings, basically you can have custom keys </br>Think it like, you can use this to make dynamic variables, where key will be the variable name. </br>Like list value can be any data type.

Basic Usage

prices = {"apple":10, "orange":20.5}
print(prices)
print(prices["apple"])
print(prices.keys()) # get keys
print(prices.values()) # get values
print(prices.items()) # get items, return tuples with keys and values
print(prices.pop("apple")) # Pop the object
print(prices)
print(prices.clear()) # Clear All
print(prices)
print(prices.get("banana")) # it will check if it is present, return None if not.
print(prices.__contains__("apple")) # Returns true/false

Tuples in Python

Same as a list, but immutable.

Basic Usage

a = (1,2,2,4)
print(a)
# Interesting Fact: tuple supports only two methods:
a.count(2) # This can be use with list as well.
a.index(3) # This can be use with list as well.

Sets in Python

Sets are an unordered collection of unique elements.

a = set()
a.add(1)
a.add(1)
a.add(1)
print(a) # {1}

Convert list to set

a = [1,1,2,2,2,3,3,3]
a = set(a)

File IO with Python

init file obj

file = open("file.txt")

read contents

contents = file.read()
print(contents)

move the cursor/pointer

file.seek(0)

read line by line

contents = file.readlines() # returns list of lines.

close the file

file.close()

Using context manager

with open("file.txt") as file:
    print(file.read())

different modes for file

Chaining comparison operators:

To chain ==, != <, >, >=, <= and is these operators, we have these logical operators

if 2 > 3 and 2 > 5:
    print("I am inevitable")
if "hello" is "world" or "india" is "country":
    print("Yeah!!")
if not 10 == 10:
    print("Tough luck!" )

Python Statements:

Indentation is important in python.

if, elif, else

loc = 'Bank'

if loc == 'Auto Shop':
    print('Welcome to the Auto Shop!')
elif loc == 'Bank':
    print('Welcome to the bank!')
else:
    print('Where are you?')

for loops

# iterate list/string/tuple
l = [1,2,3]
for item in l:
    print(item)
# extraction made easy
list2 = [(2,4),(6,8),(10,12)]
for t1,t2 in list2: # Same as dict. t1 will be key, t2 will be value.
    print(t1) # will print 2,6,10
# Protip about dict: use .value() and .keys() for looping Values/keys.

white loops

in python we can use python with else statement.

x = 1
while x < 3:
    print(f"x is {x}")
    x = x + 1
else:
    print("Uhhoo! x > 3")

Statement in python

def future_method():
    # Todo: implement it later.
    pass
while True:
    break
for i in range(10):
    if i == 5:
        #omit
        continue 
    print(i)

Some useful operators

range()

range is a generator. <br/> Syntax: range(start,end,step) <br/> Use directly with loops for iteration.

a = list(range(0,11,2)) # returns 0,2,4,..10

enumerate()

with help of this we can keep track of index and value.

a = [20,100,5,3,6]
for index,value in enumerate(a):
    print(f"{index}\t{value}")

zip()

zip multiple lists.
a = [1,2,3]
b = [4,5,6]
for item in zip(a,b):
    print(item)

in operator:

a = [1,2,3]
print(3 in a) # True

min and max:

a = [1,2,3]
print(min(a)) # 1
print(max(a)) # 3

List Comprehensions

Quicker and unique way to create lists.

# Grab every letter in string
lst = [x for x in 'word']

# Square numbers in range and turn into list
lst = [x**2 for x in range(0,11)]

# Check for even numbers in a range
lst = [x for x in range(11) if x % 2 == 0]

help function in python

if you are lazy like me, want to learn documentation about specific inbuilt method via terminal, you can use help()

a = [1,2,3]
help(a.insert) # will print info about this method

Functions in python

Basic function with argument and default value

# def keyword to define functions.
def say_hello(name="world"):
    print(f"Hello {name}!")
    # or return f"Hello {name}!" if you want to return it.

*args and **kwargs

def total_income(*args, **kwargs):
    print(f"Income for month, {kwargs['month']} is : {sum(args)}")
total_income(10,20,300,month="July")

lamda, filter and map

#map
def square(num):
    return num**2
my_nums = [1,2,3,4,5]
map(square,my_nums) # 1, 4, 9, 16, 25

# filter
def check_even(num):
    return num % 2 == 0
nums = [0,1,2,3,4,5,6,7,8,9,10]
filter(check_even, nums) # 0, 2, 4, 6, 8, 10

# lets convert each of the above function to lambda.
map(lambda num:num**2,my_nums)
filter(lambda num:num%2==0, nums) 

Classes in python

Basic implementation

class Circle:
    pi = 3.14

    # Circle gets instantiated with a radius (default is 1)
    def __init__(self, radius=1):
        self.radius = radius 
        self.area = radius * radius * Circle.pi

    # Method for resetting Radius
    def setRadius(self, new_radius):
        self.radius = new_radius
        self.area = new_radius * new_radius * self.pi

    # Method for getting Circumference
    def getCircumference(self):
        return self.radius * self.pi * 2


c = Circle()

print('Radius is: ',c.radius)
print('Area is: ',c.area)
print('Circumference is: ',c.getCircumference())

Inheritance

class Animal:
    def __init__(self):
        print("Animal created")

    def whoAmI(self):
        print("Animal")

    def eat(self):
        print("Eating")


class Dog(Animal):
    def __init__(self):
        Animal.__init__(self)
        print("Dog created")

    def whoAmI(self):
        print("Dog")

    def bark(self):
        print("Woof!")

Polymorphism

class Animal:
    def __init__(self, name):    # Constructor of the class
        self.name = name

    def speak(self):              # Abstract method, defined by convention only
        raise NotImplementedError("Subclass must implement abstract method")


class Dog(Animal):
    
    def speak(self):
        return self.name+' says Woof!'
    
class Cat(Animal):

    def speak(self):
        return self.name+' says Meow!'
    
fido = Dog('Fido')
isis = Cat('Isis')

print(fido.speak())
print(isis.speak())

Using Special methods

Just like __init__ we have more special methods.

class Book:
    def __init__(self, title, author, pages):
        print("A book is created")
        self.title = title
        self.author = author
        self.pages = pages

    def __str__(self):
        return "Title: %s, author: %s, pages: %s" %(self.title, self.author, self.pages)

    def __len__(self):
        return self.pages

    def __del__(self):
        print("A book is destroyed")


book = Book("Python Rocks!", "Jose Portilla", 159)

#Special Methods
print(book)
print(len(book))
del book

Exception Handling

try, except, finally, and else.

def askint():
    while True:
        try:
            val = int(input("Please enter an integer: "))
        except:
            # You can also expect specific error like TypeError or generic type Exception
            print("Looks like you did not enter an integer!")
            continue
        else:
            print("Yep that's an integer!")
            break
        finally:
            print("Finally, I executed!")
        print(val)

Decorators

def new_decorator(func):

    def wrap_func():
        print("Code would be here, before executing the func")

        func()

        print("Code here will execute after the func()")

    return wrap_func

@new_decorator
def func_needs_decorator():
    print("This function is in need of a Decorator")

func_needs_decorator()
# Code would be here, before executing the func
# This function is in need of a Decorator
# Code here will execute after the func()

Generators

# Without generator
def get_me_cubes(n):
    output_list = []
    for i in range(n):
        output_list.append(i**3)
    return output_list

print(get_me_cubes(10))
# With generator
def generate_cubes(n):
    for i in range(n):
        yield i**3

print(generate_cubes(10))

Useful Python modules you should look.

Working with CSVs in python

# don't forget to install csv
import csv
data = open('example.csv',encoding="utf-8")
# passing encoding is important otherwise you will get the Unicode error.
csv_data = csv.reader(data)
# reading
data_lines = list(csv_data)
# writing 
file_to_output = open('to_save_file.csv','w',newline='')
# use 'a' for append
csv_writer = csv.writer(file_to_output,delimiter=',')
csv_writer.writerow(['a','b','c'])
file_to_output.close()

Working with pdfs in python

# don't forget to use PyPDF2
import PyPDF2
f = open('Working_Business_Proposal.pdf','rb')
# we need to pass rb for binary files.
pdf_text = []

pdf_reader = PyPDF2.PdfFileReader(f)

for p in range(pdf_reader.numPages):
    page = pdf_reader.getPage(p)
    pdf_text.append(page.extractText())

Sending Emails with python

import smtplib
smtp_object = smtplib.SMTP('smtp.gmail.com',587)
email = "[email protected]"
password = "yourpassword"
# Tip: search about how you generate app passwords.
smtp_object.login(email,password)
from_address = "[email protected]"
to_address = "[email protected]"
subject = "Subject"
message = "Message"
msg = "Subject: " + subject + '\n' + message
smtp_object.sendmail(from_address,to_address,msg)
smtp_object.quit()

That’s it.

I would recommend you to learn in-depth from this course: Udemy Course

If you can self learn, then you can refer to this Repository: Github