Python Evening 24/2

Python Evening 24/2

# print("Hello World!")

# print(11)  # prints 11
# 100.34 + 2  # some float

# print(type(100 + 2))

# print((2 + 4) * 3.2 + (10 / 2.5))


x = 100.34 + 2
y = 100

# print(type(y))

result = 1456

print(result)

exam_scores = 0

result2 = -90

score = result + result2



-------------------

# name: str = "John Doe"
# age: int = 25


name: str = "John Doe says, 'hello'"
age = 25


print(type(name))

name = True

print(type(name))
# print(age)

print(age)


message: str = "hello world"


twitter_handle = None
message = 'Linus at FOSSConf, "Talk is cheap. Show me the code."'
alan_turing = "'Machines' take me by surprise with great frequency"

message = "Hello World, 'Universe'"


message = 'Hello World, "Universe"'
message = "Hello World, 'Universe'"

# >>> message = 'Linus at FOSSConf, 'Talk is cheap. Show me the code.''
#   File "<stdin>", line 1
#     message = 'Linus at FOSSConf, 'Talk is cheap. Show me the code.''
#                                    ^
# SyntaxError: invalid syntax
# >>>
# >>>
# >>>
# >>>
# >>>
# >>>
# >>>
# >>> message = 'Hello World, \'Universe\''
# >>>
# >>>
# >>>
# >>> message
# "Hello World, 'Universe'"
# >>>
# >>>
# >>>
# >>> message = "Hello \n World"
# >>>
# >>> message
# 'Hello \n World'
# >>>
# >>> print(message)
# Hello
#  World
# >>>
# >>> message = "Hello \t World"
# >>>
# >>> print(message)
# Hello    World
# >>> message = "Hello \t\t\t\t\t World"
# >>>
# >>> print(message)
# Hello                                    World
# >>> message = "Hello \t\t\t World, \n\n\n\n\t\t\tUniverse"
# >>>
# >>>
# >>> message
# 'Hello \t\t\t World, \n\n\n\n\t\t\tUniverse'
# >>> print(message)
# Hello                    World,


#                         Universe
# >>> message = "Hello \v\v\v World"
# >>>
# >>> print(message)
# Hello


#  World
# >>> message = "Hello \\ World,Universe"
# >>>
# >>> print(message)
# Hello \ World,Universe
# >>> message = "Hello \ World"
# >>>
# >>> print(message)
# Hello \ World
# >>> message = "Hello \World\,Universe""
#   File "<stdin>", line 1
#     message = "Hello \World\,Universe""
#                                        ^
# SyntaxError: EOL while scanning string literal
# >>>
# >>> message = "Hello \World\,Universe"
# >>>
# >>> print(message)
# Hello \World\,Universe
# >>>
# >>> message = "Hello \north country"
# >>>
# >>> print(message)
# Hello
# orth country
# >>> message = "Hello \\north country"
# >>>
# >>>
# >>> print(message)
# Hello \north country

# >>> first_name = "john"
# >>> last_name = "doe"
# >>>
# >>> first_name + last_name
# 'johndoe'
# >>>
# >>> first_name + " " + last_name + "."
# 'john doe.'
# >>>
# >>>
# >>> first_name + 10
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: can only concatenate str (not "int") to str
# >>>
# >>>
# >>> first_name + "10"
# 'john10'
# >>>
# >>>
# >>> "10" + "\t\t\t\t" + "10"
# '10\t\t\t\t10'
# >>> print("10" + "\t\t\t\t" + "10")
# 10                              10


# >>> al
# 'n'
# >>> name
# 'john doe'
# >>>
# >>> type(name)
# <class 'str'>
# >>> type(al)
# <class 'str'>
# >>>
# >>>
# >>>
# >>> "john"[0]
# 'j'
# >>> "john"[5]
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# IndexError: string index out of range
# >>>
# >>>
# >>> name[4]
# ' '
# >>> name[3]
# 'n'
# >>> name[2]
# 'h'
# >>> name[8]
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# IndexError: string index out of range
# >>> name[6]
# 'o'
# >>> name[7]
# 'e'
# >>>
# >>>
# >>>
# >>>
# >>>
# >>> "10" + "20"
# '1020'
# >>>
# >>> int("10") + int("20")
# 30
# >>>
# >>> int("ten")
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# ValueError: invalid literal for int() with base 10: 'ten'
# >>>
# >>>
# >>>
# >>> str(True)
# 'True'
# >>>
# >>>
# >>> float(110)
# 110.0
# >>> int(1002.3223)
# 1002
# >>>
# >>>
# >>> int(10.2)
# 10
# >>> int("10.2")
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# ValueError: invalid literal for int() with base 10: '10.2'
# >>>
# >>>
# >>> float("10.2")
# 10.2


name = "John Doe"
name.upper()  # 'JOHN DOE'
name.lower()  # 'john doe'
name.capitalize()  # 'John doe'
name.swapcase()  # 'jOHN dOE'

name = "    john doe         "
name.strip()  # 'john doe'
name.rstrip()
name.lstrip()

name.split()  # LATER


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

name.replace("John", "Jack")
# 'Jack Doe'

name.startswith("j")  # False
name.endswith("e")  # True
name.count("e")  # 1

"".join()  # LATER
# https://rstforum.net/whitepaper/python-evening-24-2/


# # print("Enter the amount in USD. Please only enter an integer.")
# usd = input("Enter the amount in USD:       ")

# print(f"{usd} USD in INR is {int(usd) * 74}")


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

# if name.lower() == "mark zuckerberg":
#     print("Facebook")
#     print("Hello World")
# elif name.lower() == "jack dorsey":
#     print("Twitter")
# elif name.lower() == "sundar pichai":
#     print("Google")
# else:
#     print("Someone I don't know")


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

# if (age >= 18 and age < 21) and city == "delhi":
#     print("You are allowed to enter but not drink.")
# elif age >= 21 and age < 65:
#     print("You are allowed to enter and drink.")
# elif age >= 65:
#     print("You are allowed and drink for free.")
# else:
#     print("You are not allowed")


# if age > 18:
#     if age < 21:
#         print("You are allowed to enter but not drink")
#     else:
#         print("GO HOME!")
# else:
#     print("You are not allowed")


print("ROCK PAPER SCISSOR")

player1 = input("Please enter player1's choice: ")
player2 = input("Please enter player2's choice: ")


if (
    (player1 == "rock" and player2 == "scissor")
    or (player1 == "scissor" and player2 == "paper")
    or (player1 == "paper" and player2 == "rock")
):
    print("Player 1 wins")
elif (
    (player2 == "rock" and player1 == "scissor")
    or (player2 == "scissor" and player1 == "paper")
    or (player2 == "paper" and player1 == "rock")
):
    print("Player 2 wins")
elif player1 == player2:
    print("It's a tie")
else:
    print("Something went wrong")
print("ROCK PAPER SCISSOR")

player1 = input("Please enter player1's choice: ").lower()
player2 = input("Please enter player2's choice: ").lower()


# player1 = player1
# player2 = player2


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



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

# odd_nums = list(range(1, 50, 2))
# print(odd_nums)

# if odd_nums[-1 + 1] in odd_nums:
#     print("YESSSS")
# else:
#     print("NOOOO")


# tasks = []

# print(len(tasks))
# nums = [1, 2, 3, 4, 5, 6, 7, 8]

# # for num in nums:
# #     print("Hello World")


# # for num in nums:
# #     print(f"{num ** 2}: Hello World")


# nums_doubled = []


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


# print(nums_doubled)


for letter in "eod nhoj":
    print(letter, end="\n")


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

# r = range(1, 100)

# for num in r:
#     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} - Even")
#     else:
#         print(f"{num} - Odd")


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


# while secret_password != "balony1":
#     secret_password = input("Incorrect! Enter password again: ")


# print("Welcome to the secret place!")


# movies = ["inception", "titanic", "fight club", "avengers"]

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

# for movie in movies:
#     print(movie)


# num = 0
# while num < 11:
#     print(num)
#     num += 1
#     # num = num + 1

# movie = 0
# while movie < len(movies):
#     print(movies[movie])
#     movie += 1


# while True:
#     command = input("Type 'exit' to exit: ")

#     if command == "exit":
#         break


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

# nums_squared = []

# for num in nums:
#     nums_squared.append(num * num)


# print(nums)
# print(nums_squared)


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


# [1, 4, ]


# [print(num * num, end=" ") for num in nums]


# [num * num for num in nums]


# for num in range(3):
#     # print("Hello World")
#     for nu in range(5):
#         print(nu)


# count = 0
# while count < 3:
#     print("Hello World")
#     count += 1


# for num in range(1, 6):
#     # print(num)
#     print("Hello")


# for val in range(3):
#     print("Hello World")
#     for num in range(1, 6):
#         print(num)
#     print("\n\n")


# for num in range(1, 6):
#     print("Hello")
#     for num2 in range(3):
#         print("\tWorld")


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

for lst in nested_list:
    print(lst)
# num: int = 100
# num = num / 3
# # print(num)
# print("Hello World,\n\n this is a message.")
# print('Linus says,\t "Show \\me the code"')

# print("Hello World, this is a message.")
# print("Hello World, this is a message.")
# nums = list(range(10))
# nums[12]

# print(nums)
# print("Hello World, this is a message.")
# print("Hello World, this is a message.")
# print("Hello World, this is a message.")
# print("Hello World, this is a message.")


# product1 = ["AMD Threadripper 4900X", "AMD", "This is some description", 300000]
# product2 = ["AMD", "This is some description", 300000, "AMD Threadripper 4900X"]
# product3 = ["AMD Threadripper 4900X", "AMD", "This is some description", 300000]

# print(product1[1])
# print(product1[3])
# print(product1[2])

# print(product2[1])
# print(product2[3])
# print(product2[2])


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

# song = {
#     "name": "In the end",
#     "artist": "Linkin park",
#     "duration": 3.52,
#     "year": 2002,
#     "album": "Meteora",
#     "song": "https://spotify.com/media?play",
#     "10": True,
# }

# print(song["name"])
# print(song[10])


# my_playlist = [
#     {
#         "name": "In the end",
#         "artist": "Linkin park",
#         "duration": 3.52,
#         "year": 2002,
#         "album": "Meteora",
#         "song": "https://spotify.com/media?play",
#     },
#     {
#         "name": "In the end",
#         "artist": "Linkin park",
#         "duration": 3.52,
#         "year": 2002,
#         "album": "Meteora",
#         "song": "https://spotify.com/media?play",
#     },
#     {
#         "name": "In the end",
#         "artist": "Linkin park",
#         "duration": 3.52,
#         "year": 2002,
#         "album": "Meteora",
#         "song": "https://spotify.com/media?play",
#     },
# ]

# print(product["name"])
# print(product["unlocked"])
# print(product["price"])


# song = {
#     "name": "In the end",
#     "artist": "Linkin park",
#     "duration": 3.52,
#     "year": 2002,
#     "album": "Meteora",
#     "song": "https://spotify.com/media?play",
#     "10": True,
# }


# for item in song.values():
#     print(item)

# for item in song.keys():
#     print(item)


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

# for bro, unbro in song.items():
#     print(f"The value of {bro} is {unbro}")

# for key, value in song.items():
#     print(f"The value of {key} is {value}")

# for k, v in song.items():
#     print(f"The value of {k} is {v}")


# song_keys = []
# song_values = []

# # for key in song.keys():
# #     song_keys.append(key)

# for key, value in song.items():
#     song_keys.append(key)
#     song_values.append(value)


# print(song_keys)
# print(song_values)


form = ["first_name", "last_name", "age", "phone", "twitter", "facebook", "aadhaar_no"]


john_profile = {}.fromkeys(form, None)


john_profile["first_name"] = "John"
john_profile["last_name"] = "Cho"
john_profile["twitter"] = "jcho"

print(john_profile)


# >>> song = {
# ...     "name": "In the end",
# ...     "artist": "Linkin park",
# ...     "duration": 3.52,
# ...     "year": 2002,
# ...     "album": "Meteora",
# ...     "song": "https://spotify.com/media?play",
# ...     "10": True,
# ... }
# >>>
# >>> song
# {'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52, 'year': 2002, 'album': 'Meteora', 'song': 'https://spotify.com/media?play', '10': True}
# >>>
# >>>
# >>>
# >>>
# >>> song["art"]
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# KeyError: 'art'
# >>>
# >>>
# >>> song.get("art")
# >>>
# >>>
# >>> song.get("name")
# 'In the end'
# >>>
# >>> song.get("artist")
# 'Linkin park'
# >>>
# >>> print(song.get("artist"))
# Linkin park
# >>>
# >>> print(song.get("asdasd"))
# None
# >>>
# >>> song
# {'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52, 'year': 2002, 'album': 'Meteora', 'song': 'https://spotify.com/media?play', '10': True}
# >>>
# >>>
# >>>
# >>> song.pop("song")
# 'https://spotify.com/media?play'
# >>>
# >>> song
# {'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52, 'year': 2002, 'album': 'Meteora', '10': True}
# >>>
# >>>
# >>> song.popitem()
# ('10', True)
# >>>
# >>> song.popitem()
# ('album', 'Meteora')
# >>> song.popitem()
# ('year', 2002)
# >>> song
# {'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52}
# >>>
# >>>
# >>>
# >>>
# >>> song
# {'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52}
# >>>
# >>>
# >>>
# >>> song2 = {"album": "Meteora", "lyricist": "Kamal R Khan"}
# >>>
# >>>
# >>> song2
# {'album': 'Meteora', 'lyricist': 'Kamal R Khan'}
# >>>
# >>>
# >>> song
# {'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52}
# >>>
# >>>
# >>> song2.update(song)
# >>>
# >>>
# >>> song2
# {'album': 'Meteora', 'lyricist': 'Kamal R Khan', 'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52}
# >>>
# >>>
# >>> song2
# {'album': 'Meteora', 'lyricist': 'Kamal R Khan', 'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52}
# >>>
# >>>
# >>> song3 = {"album": "Metora", "lyricist": "Mike Shinoda"}
# >>>
# >>> song3
# {'album': 'Metora', 'lyricist': 'Mike Shinoda'}
# >>>
# >>> song2
# {'album': 'Meteora', 'lyricist': 'Kamal R Khan', 'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52}
# >>>
# >>> song2.update(song3)
# >>>
# >>> song2
# {'album': 'Metora', 'lyricist': 'Mike Shinoda', 'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52}
# >>>
# >>>
# >>>
# >>> song2
# {'album': 'Metora', 'lyricist': 'Mike Shinoda', 'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52}
# >>>
# >>>
# >>>
# >>>
# >>>
# >>>
# >>> Python Programming
#   File "<stdin>", line 1
#     Python Programming
#            ^
# SyntaxError: invalid syntax
# >>>
# >>>
# >>>
# >>>
# >>>
# >>>
# >>> numbers = dict(first=1, second=2, third=3)
# >>>
# >>>
# >>>
# >>>
# >>> numbers
# {'first': 1, 'second': 2, 'third': 3}
# >>>
# >>>
# >>>
# >>>
# >>>
# >>>
# >>> {k:v for k,v in song}
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   File "<stdin>", line 1, in <dictcomp>
# ValueError: too many values to unpack (expected 2)
# >>>
# >>>
# >>> {k:v for k,v in song.items()}
# {'name': 'In the end', 'artist': 'Linkin park', 'duration': 3.52}
# >>>
# >>>
# >>> {k.upper():v for k,v in song.items()}
# {'NAME': 'In the end', 'ARTIST': 'Linkin park', 'DURATION': 3.52}
# >>>
# >>> {k.upper():str(v) for k,v in song.items()}
# {'NAME': 'In the end', 'ARTIST': 'Linkin park', 'DURATION': '3.52'}
# >>>
# >>>
# >>> form = ["first_name", "last_name", "age", "phone", "twitter", "facebook", "aadhaar_no"]
# >>>
# >>>
# >>>
# >>> form
# ['first_name', 'last_name', 'age', 'phone', 'twitter', 'facebook', 'aadhaar_no']
# >>>
# >>>
# >>> {key:None for item in form}
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   File "<stdin>", line 1, in <dictcomp>
# NameError: name 'key' is not defined
# >>> {key:None for key in form}
# {'first_name': None, 'last_name': None, 'age': None, 'phone': None, 'twitter': None, 'facebook': None, 'aadhaar_no': None}
# >>>
# >>>
# >>>
# >>> {prop:0 for prop in form}
# {'first_name': 0, 'last_name': 0, 'age': 0, 'phone': 0, 'twitter': 0, 'facebook': 0, 'aadhaar_no': 0}
# >>>
# >>>
# >>>
# >>>
# >>> [num * 2 for num in [1,2,3,4,5,6]]
# [2, 4, 6, 8, 10, 12]
# >>>
# >>>
# >>>
# >>> {k:v for k,v in {"name": "john", "age": 10}}
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   File "<stdin>", line 1, in <dictcomp>
# ValueError: too many values to unpack (expected 2)
# >>>
# >>>
# >>> {k:v for k,v in {"name": "john", "age": 10}.items()}
# {'name': 'john', 'age': 10}
# >>>
# >>>
# >>>
# >>> [num for num in [1,2,3,4,5,6]]
# [1, 2, 3, 4, 5, 6]
# >>>
# >>>
# >>>
# >>> {k.upper():v for k,v in {"name": "john", "age": 10}.items()}
# {'NAME': 'john', 'AGE': 10}
# >>>
# >>> {k.upper():"hello" for k in range(10)}
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   File "<stdin>", line 1, in <dictcomp>
# AttributeError: 'int' object has no attribute 'upper'
# >>>
# >>> {k:"hello" for k in range(10)}
# {0: 'hello', 1: 'hello', 2: 'hello', 3: 'hello', 4: 'hello', 5: 'hello', 6: 'hello', 7: 'hello', 8: 'hello', 9: 'hello'}
# >>>
# >>>
# >>>
# >>>
# >>> {k:k*10 for k in range(10)}
# {0: 0, 1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60, 7: 70, 8: 80, 9: 90}
# >>>
# >>> {k/2:k*10 for k in range(10)}
# {0.0: 0, 0.5: 10, 1.0: 20, 1.5: 30, 2.0: 40, 2.5: 50, 3.0: 60, 3.5: 70, 4.0: 80, 4.5: 90}
# >>>
# >>>
# >>>
# >>>
# >>>
# num = 2
# result = "even" if num % 2 == 0 else "odd"


# result = None

# if num % 2 == 0:
#     result = "even"
# else:
#     result = "odd"


# locations = {(19.10112334, 72.1233124): "Mumbai", (19.10112334, 72.1233124): "Pune"}


# def fav_actors():
#     actors = ["Keanu Reeves", "Kamal R Khan", "Tom Cruise", "Will Smith"]
#     for actor in actors:
#         print("".join(set(actor)))


# result = fav_actors()
# print(result)


# def say_hello():
#     print("LINE 1")
#     print("LINE 2")
#     print("LINE 3")
#     print("LINE 4")
#     return "Hello!"


# # result = "Hello!"

# print(say_hello())


# import random
from random import random


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


print(flip_coin())
# def add(*args):
#     print(type(args))
#     print(args)


# add(12, 32, 32, 443, 43, 4545, 45, 4545)
# add("john", "jane", "jack")


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


# print(add(12, 45, 32, -65, 14))
# print(add(10, 10))


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


# profile(name="john", age=25, occupation="programmer")


# def user_details(**kwargs):
#     for k, v in kwargs.items():
#         print(f"{k.upper()} - {str(v).upper()}")


# user_details(
#     first_name="John", last_name="Doe", age=30, occupation="Software Developer"
# )


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


# print(add(100, 200, 10, 20, 30))


# def user_details(first, last, **kwargs):
#     print(first, last)
#     for k, v in kwargs.items():
#         print(f"{k.upper()} - {str(v).upper()}")


# user_details(first="John", last="Doe", age=25, job="programmer")


# def generic(*args, **kwargs):
#     print(args)
#     print(kwargs)


# generic("John", "Doe", 25, occupation="Programmer", language="Python")


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


# print(
#     show_info(
#         1, 2, 3, 32423, 324, "jack", first_name="John", last_name="Doe", role="student"
#     )
# )


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


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

# add_all_values(*nums)


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


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

# say_name(**name)

# import time
# from time import sleep


# def print_song(song, artist, album, length):
#     print(song)
#     print(artist)
#     print(album)
#     print(length)
#     print("********************")


# my_playlist = [
#     {
#         "song": "Castle of Glass",
#         "artist": "Linkin Park",
#         "album": "Some Alb",
#         "length": 3,
#     },
#     {
#         "song": "See you again",
#         "artist": "Wiz Khalifa",
#         "album": "Other Alb",
#         "length": 4,
#     },
#     {
#         "song": "Baby",
#         "artist": "Justin Beiber",
#         "album": "Another Alb",
#         "length": 4,
#     },
# ]

# for song in my_playlist:
#     print(f"Playing {song['song']}")
#     print_song(**song)
#     # time.sleep(song["length"])
#     sleep(song["length"])


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


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


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


# # print(math(10, 3, mul))

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


# div = lambda a, b: a / b


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


# print(div(10, 5))


# # square = lambda num: num * num


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

# print(tuple(res))
# print(res2)

# def uppercase(name):
#     return name.upper()


# names = ["john", "jane", "jack", "james", "jason", "jaspreet", "justin", "jimmy"]

# res = map(lambda name: name.upper(), names)


# for name in res:
#     print(name)

# # print(list(res))


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

# # res = filter(lambda num: num % 2 == 0, nums)
# res = filter(lambda num: num % 2 == 0, range(100))

# # res2 = [num for num in nums if num % 2 == 0]

# print(list(res))
# # print(res2)


# names = ["john", "jane", "jack", "james", "jason", "jaspreet", "justin", "jimmy"]


# names2 = ["john", "ben", "brad", "james", "zaka", "lal", "nash", "jimmy"]

# # result = filter(lambda name: len(name) > 4, names)

# # result2 = filter(lambda name: name[0] == "b", names2)
# result3 = map(lambda name: name.upper() if name[0] == "b" else name.lower(), names2)

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


# print(list(result3))


names = ["john", "jane", "jack", "james", "jason", "jaspreet", "justin", "jimmy"]

# result = map(lambda name: name.upper(), filter(lambda name: len(name) == 4, names))
# res1 = map(lambda name: name.upper(), names)
# res2 = filter(lambda name: len(name) == 4, names)
# print(list(res1))
# print(list(res2))


# result = map(lambda name: name.upper(), filter(lambda name: len(name) == 4, names))
# print(list(result))


# result = list(
#     map(
#         lambda name: name.upper() if name[-1] == "e" else name,
#         filter(lambda name: len(name) == 4, names),
#     )
# )
# print(result)


print(
    list(
        map(
            lambda name: name.upper() if name[-1] == "e" else name,
            filter(lambda name: len(name) == 4, names),
        )
    )
)
# lst = [1, 2, 3]
# lst2 = ["john", "jack", "jane", "", "james"]

# my_playlist = [
#     {
#         "song": "Castle of Glass",
#         "artist": "Linkin Park",
#         "album": "Some Alb",
#         "length": 3,
#     },
#     {
#         "song": "Castle of Glass",
#         "artist": "Linkin Park",
#         "album": "Some Alb",
#         "length": 3,
#     },
#     {
#         "song": "Baby",
#         "artist": "Justin Beiber",
#         "album": "Another Alb",
#         "length": 4,
#     },
# ]

# if all(my_playlist):
#     for song in my_playlist:
#         print(song["song"])
# else:
#     print("Data Corrupted")


people = ["John", "Jack", "James", "Jason", "Jane", "Jacob"]
print(all([name[0] == "J" for name in people]))
# def say_name(first, last):
#     print(f"My name is {first} {last}")


# name = {"first": "John", "last": "Doe"}
# # say_name(first="John", last="Doe")
# say_name(**name)
# # say_name(last="doe", first="john")


# def hello_with_kwargs(**kwargs):
#     if "name" in kwargs:
#         print(kwargs["name"])
#     else:
#         print("ERROR")


# hello_with_kwargs(name="john", age=25)


def contains_john(*args):
    return any(args)


contains_john("john", "jane", "jack")

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



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


# print(divide(1, 0))


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

#     if type(text) is not str:
#         raise TypeError("Ch****, sahi type ka data daal!")

#     if type(color) is not str:
#         raise TypeError("Ch****, sahi type ka data daal!")

#     if color not in colors:
#         raise ValueError("Abe saale, yeh color tera baap bhi print nahi kar paega.")

#     # some logic
#     print(f"{text} in {color}!")


# # Func call
# # colored_output("Hello world", "red")
# colored_output([1, 2, 3], "GOLD")


# def divide(a, b):
#     # print(a / b)
#     try:
#         print(a / b)
#     except (ZeroDivisionError, TypeError) as err:
#         print("Please check the your arguments")
#         print(err)
#         # print(str(err).upper())
#         # print("You cannot divide by zero!")
#         # print("SOMETHING WENT WRONG!")


# divide(10, "hello")
# divide(10, 0)
# print("EXTRA LOGIC")


# def divide(a, b):
#     try:
#         res = a / b
#     except Exception as err:
#         print(err)
#     else:
#         print(res)
#     finally:
#         print("I WILL ALWAYS RUN!")


# # divide(10, "hello")
# divide(10, 4)

# import pdb


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

# pdb.set_trace()

# for i in range(10):
#     print(nums[i])


def make_cycle(color, material, features):
    return {
        "color": color,
        "material": material,
        "features": features,
        "peddle": lambda x: print("I am running"),
    }


john_cycle = make_cycle("red", "steel", "with gears")
# print(john_cycle)
john_cycle["peddle"](10)
print(john_cycle["color"])
print(john_cycle["material"])
print(john_cycle["features"])


class Cycle:
    def __init__(self, color, material, features):
        self.color = color
        self.material = material
        self.features = features

    def peddle(self, x):
        print("I am running")


jane_cycle = Cycle("blue", "magnesium", "with horn")
jack_cycle = Cycle("orange", "plastic", "with wheels")

jane_cycle.peddle(10)
print(jane_cycle.color)
# print(jane_cycle.material)
# print(jane_cycle.features)

print(jack_cycle.color)


# class Bank_Customer

# name
# age
# aadhar
# pan
# acc
# balance

# deposit
# withdraw
# close
# class User:
#     pass
# first_name
# last_name
# email
# phone
# groups = []

# METHODS
# login
# logout
# create_a_group
# add_as_friend


# user1 = User()
# user2 = User()

# user.login()


# Instagram

# -> User
# ATTRIBUTES (variables)
# -> username (str) -> private
# -> password (str)
# -> email (str)
# -> bio (str)
# -> followers ([User])
# -> following ([User])
# -> profile_photo (str)
# -> messages ([{msg: str, sender: User}])
# -> photos ([Photo])

# METHODS (functions)
# -> login
# -> logout
# -> update_profile
# -> update_password
# -> send_dm
# -> post_photo
# -> comment
# -> follow


# -> Photo
# ATTRIBUTES (variables)
# -> image_url (str)
# -> description (str)
# -> location (str)
# -> uploader (User)
# -> likes ([User])
# -> comments ([{comment: str, user: User, date: str}])

# METHODS
# -> edit_description
# -> remove_comment


# Story
# Reels


class User:
    def __init__(self, username, password, email):
        self.username = username
        self.password = password
        self.email = email
        self.bio = None
        # self.__followers = []  # self._User__followers
        # self.__following = []
        self.followers = []
        self.following = []
        self.photos = []
        self.profile_photo = None
        self.messages = []


user1 = User("john2021", "doe234", "john_doe@gmail.com")
user2 = User("jane2099", "doe768", "jane_doe_know@gmail.com")

# user3 = User() # error


# print(type(user1) == User)
# print(type(user2) == User)

# print(user1.username)
# print(user2.email)

# print(user1._User__followers)
# print(user2._User__following)

print(user1.username)

user1.username = "KamalKhanCoolDude"
user1.followers.append("KamalBro")

print(user1.username)
print(user1.followers)

print(user1.bio)

user1.bio = "I am Kamal"

print(user1.bio)
# def lower(a, b):
#     return a * (a < b) + b * (b <= a)

# lower = lambda a, b: a * (a < b) + b * (b <= a)


# class User:
#     total_users = 0
#     active_users = 0

#     def __init__(self, username, password, email, dob):
#         self.username = username
#         self._password = password
#         self.email = email
#         self._dob = dob
#         self.bio = None
#         self.followers = []
#         self.following = []
#         self.photos = []
#         self.profile_photo = None
#         self.messages = []
#         self.isOnline = False
#         User.total_users += 1

#     def __repr__(self):
#         return f"User - {self.username}"

#     # return f"{self.username}\nBio: {self.bio}\nFollowers: {len(self.followers)} | Following: {len(self.following)}"

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

#     def get_profile(self):
#         return {
#             "username": self.username,
#             "email": self.email,
#             "bio": self.bio,
#             "followers": self.followers,
#         }

#     def get_password(self):
#         return self._password

#     def set_password(self, new_password):
#         self._password = new_password
#         print("Your password has been changed successfully!")

#     def get_age(self):
#         age = 2021 - int(self._dob.split("/")[-1])
#         return f"{self.username} is {age} years old."

#     def login(self, password=None):
#         if password == self._password:
#             User.active_users += 1
#             self.isOnline = True
#             print(f"{self.username} has logged in")
#         else:
#             return f"Incorrect Password"

#     def logout(self):
#         if self.isOnline:
#             User.active_users -= 1
#             self.isOnline = False
#             print(f"{self.username} has logged out!")
#         else:
#             return f"Please login in first"


# user1 = User("john2021", "doe234", "john_doe@gmail.com", "12/6/2001")
# user2 = User("jane2099", "doe768", "jane_doe_know@gmail.com", "12/8/1999")

# print(user1.total_users)
# print(user2.total_users)

# print(user1.username)
# user2.email = "jane@email.com"
# print(user2.email)
# print(user1.get_profile())
# print(user2.get_password())
# user2.set_password("doe999")
# print(user2.get_password())
# print(user1.get_age())
# print(User.total_users)

# user1.login("doe234")
# user2.login("doe768")
# print(User.active_users)
# user1.logout()
# user2.logout()
# print(User.active_users)


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


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

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

#     @classmethod
#     def mul(cls, a, b):
#         return a * b


# print(Math.add(10, 20))


# user1 = User("john2021", "doe234", "john_doe@gmail.com", "12/6/2001")
# user2 = User("jane2099", "doe768", "jane_doe_know@gmail.com", "12/8/1999")

# print(user1)
# print(user2)


# Reddit


class User:
    def __init__(self, username, password):
        self.username = username
        self.password = password

    def login(self):
        print(f"{self.username} has logged in")

    def __repr__(self):
        return self.username


class Moderator:
    def __init__(self, username, password):
        self.username = username
        self.password = password
        self.priviledge = 8

    def login(self):
        print(f"{self.username} has logged in")

    def create_group(self, groupname):
        print(f"{groupname} has been created")


class Admin(User):
    pass


john = User("john99", "john@123")

jane = Admin("jane", "jane123")

print(john)
print(jane)

jane.login()
# from typing import Union

# num: int = 10
# name: str = "John"


# def divide(a: int, b: int) -> Union[int, float]:
#     result = a / b
#     return int(result)


# class User:
#     def __init__(self, username, password, level):
#         self.username = username
#         self._password = password
#         self.level = level
#         self.active = False
#         self.count = 0

#     def login(self):
#         if not self.active:
#             self.active = True
#             print(f"{self.username} has logged in")
#         else:
#             print(f"You are already logged in")

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


# user1 = User("jackma", "jack123", "beginner")


# class Moderator(User):
#     def __init__(self, username, password, age):
#         super().__init__(username, password, "expert")
#         self.age = age
#         self.groups = []


# jane = Moderator("jane99", "1234", 24)


# print(jane.__dict__)


class User:
    def __init__(self, username, password, dob):
        self.username = username
        self._password = password + " asdkjasndkjsandlkjandskjand"
        self._dob = dob
        self.active = False

    # Defined a property
    @property
    def password(self):
        unhashed = self._password.split(" ")[0]
        return unhashed

    # Defined a property setter
    @password.setter
    def password(self, new_password):
        if len(new_password) < 6:
            print("Password should be larger than 6 chars")
        else:
            self._password = new_password
            print("Password Changed")

    @property
    def age(self):
        a = 2021 - int(self._dob.split("/")[-1])
        return f"{self.username} is {a} years old."

    @age.setter
    def age(self, new_dob):
        self._dob = new_dob
        a = 2021 - int(self._dob.split("/")[-1])
        print(f"{self.username} is {a} years old.")

    # def get_password(self):
    #     return self._password

    # def set_password(self, new_password):
    #     if len(new_password) < 6:
    #         print("Password should be larger than 6 chars")
    #     else:
    #         self._password = new_password
    #         print("Password Changed")


user1 = User("jackma", "jack123", "17/5/2000")

# print(user1.get_password())
# user1.set_password("234123123")

# property
# print(user1.password)
# getter
# print(user1.get_password())

# user1.set_password("1234567")

# user1.password = "56"


# print(user1._password)
# print(user1.password)

# print(user1.age)

# user1.age = "12/5/1990"


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


class Mutant(Animal, Human):
    def __init__(self, name):
        super().__init__(name)
        self.power = "laser"

    # def speak(self):
    #     print("I'm Wolverine")


# john = Human("John Doe")
# lion = Animal("Simba")
sabertooth = Mutant("Jack")


# john.speak()
# lion.speak()
sabertooth.speak()


# print(help(sabertooth))
# class Animal:
#     def speak(self):
#         raise NotImplementedError("Subclass needs to implement this method")


# class Dog(Animal):
#     def speak(self):
#         return "bark"


# class Cat(Animal):
#     def speak(self):
#         return "meow"


# dexter = Dog()
# garfield = Cat()
# panda = Animal()

# # print(dexter.speak())
# # print(garfield.speak())
# print(panda.speak())


class Human:
    def __init__(self, first, last, age, lang):
        self.first = first
        self.last = last
        self.age = age
        self.lang = lang

    def __repr__(self):
        return f"{self.first} {self.last} aged {self.age} who speaks {self.lang}"

    def __len__(self):
        return self.age

    def __add__(self, other):
        if isinstance(other, Human):
            return Human("baby", self.last, 0, "dumb")
        else:
            print("Humans can't mate with other species you sick f***.")

    def __gt__(self, other):
        if self.age > other.age:
            return True
        else:
            return False


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

    def __repr__(self):
        return f"{self.name} aged {self.age}"


kamal = Human("kamal", "khan", 2000, "machine code")
rakhi = Human("rakhi", "sawant", 40, "bullshit")

tarzan = Animal("tarzan", "10")


# print(kamal)
# print(rakhi)

# print(len(kamal))

# baby_kamal = tarzan + kamal

# print(baby_kamal)

# len(tarzan)

print(kamal > rakhi)
# name = "john doe"  # iterable
# nums = [112, 123, 4, 12, 4, 55]  # iterable


# iterable_name = iter(name)

# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))
# print(next(iterable_name))

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

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


# def my_for(func, iterable):
#     n = iter(iterable)

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


# # my_for("john doe")
# # my_for([123, 1243, 45, 23, 23, 2345])


# my_for(lambda x: print(x.upper()), "john doe")


# range(0, 10)


# class Counter:
#     def __init__(self, start, stop, step=1):
#         self.start = start
#         self.stop = stop
#         self.step = step

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

#     def __iter__(self):
#         return self

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


# c = Counter(0, 10)

# # print(c)
# # print(iter(c))

# # for num in Counter(0, 50, 5):
# #     print(num)


# print(next(c))
# print(next(c))
# print(next(c))
# print(next(c))
# print(next(c))
# print(next(c))
# print(next(c))
# print(next(c))
# print(next(c))
# print(next(c))
# print(next(c))
# print(next(c))


# def g_count_upto(max):
#     count = 1
#     while count <= max:
#         yield count
#         count += 1


# def f_count_upto(max):
#     count = 1
#     res = []
#     while count <= max:
#         res.append(count)
#         count += 1
#     return res


# fcounter = f_count_upto(10)
# gcounter = g_count_upto(10)


# print(fcounter)
# print(list(gcounter))

# print(list(counter))

# for c in counter:
#     print(c)

# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))
# print(next(counter))


# a = [num for num in range(10)]
# b = (num for num in range(10))

# print(a)
# print(list(b))


# 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 = 1, 2
#     count = 0
#     while count < max:
#         a, b = b, a + b
#         yield a
#         count += 1


# for num in fib_list(10000000):
#     print(num)


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

import time

lc_start_time = time.time()
print(sum([num for num in range(100000000)]))
lc_total_time = time.time() - lc_start_time


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

print(f"lc_total_time = {lc_total_time}")
print(f"gen_total_time = {gen_total_time}")
# def get_multiples(num, count):
#     counter = 1
#     while counter <= count:
#         yield num * counter
#         counter += 1


# nums = list(get_multiples(10, 5))

# results = filter(lambda x: x, nums)

# for n in nums:
#     print(n)

# for n in nums:
#     print(n)

# for n in nums:
#     print(n)

# print(list(nums))


# nums = sum([num ** 2 for num in range(100000000)])
# nums = sum(num ** 2 for num in range(100000000))


# nums = (num ** 2 for num in range(100))
# nums2 = [num ** 2 for num in range(100)]

# print(nums)
# print(nums2)

# higher order function
# def math(a, b, fn):
#     return fn(a, b)


# print(math(10, 20, lambda x, y: x + y))

import random


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

    return make_message


bro = make_greet_func("kamal")
bro2 = make_greet_func("arnab")

# add = lambda x, y: x + y

# print(bro)

# print(add(10, 5))

print(bro())
print(bro2())
# import random


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

#     return make_message


# message = make_greet_func("John")

# print(message())


# class Greet:
#     def __init__(self, person):
#         self.person = person

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


# jane_msg = Greet("jane")

# print(jane_msg.message())


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

#     return wrapper


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


# @stars  # say_goodbye = stars(say_goodbye)
# def say_goodbye():
#     print("Goodbye world")


# # say_hello()

# # say_hello = stars(say_hello)
# # say_goodbye = stars(say_goodbye)

# say_hello()
# say_goodbye()

# import functools
from functools import wraps


def stars(fn):
    """Decorator function that prints stars around it's param function's value"""

    @wraps(fn)  # wrapper = wraps(wrapper)
    def wrapper(*args, **kwargs):
        """RETURNING MODIFIED WRAPPER FUNCTION"""
        print("*" * 10)
        fn(*args, **kwargs)
        print("*" * 10)

    return wrapper


@stars
def say_hello(person):
    """Function that says hello to someone"""
    print(f"Hello {person}")


@stars  # say_goodbye = stars(say_goodbye)   -> wrapper()
def say_goodbye(msg, person):
    """Function that says goodbye to someone"""
    print(f"{msg}, {person}")


@stars
def say_wassup(person, person2, person3):
    print(f"Kamal loves {person}, {person2}, {person3}")


# say_hello = stars(say_hello)
# say_goodbye("I quit", "jane")


# say_hello("rakhi")
# say_goodbye("I want a divorce", "rakhi")
# say_wassup("kamal", "money", "honey")

# print(say_hello.__doc__)


@stars  # add = stars(add)    -> wrapper
def add(a, b):
    """Function that adds two numbers and returns the result"""
    print(a + b)


# add(10, 20)
print(add.__doc__)
print(add.__name__)
# from time import time
# from functools import wraps


# # def speed_test(fn):
# #     @wraps(fn)
# #     def wrapper(*args, **kwargs):
# #         print(f"Executing {fn.__name__}")
# #         start_time = time()
# #         result = fn(*args, **kwargs)
# #         end_time = time()
# #         print(f"Time elapsed: {end_time - start_time}")
# #         return result

# #     return wrapper


# # @speed_test
# # def sum_nums_gen():
# #     return sum(num for num in range(10000000))


# # @speed_test
# # def sum_nums_list():  # sum_nums_list = speed_test(sum_nums_list)
# #     return sum([num for num in range(10000000)])


# # print(sum_nums_gen())
# # print(sum_nums_list())


# def ensure_no_kwargs(fn):
#     @wraps(fn)             # wrapper = wraps(fn)(wrapper)
#     def wrapper(*args, **kwargs):
#         # print(args)
#         # print(kwargs)
#         if kwargs:
#             raise ValueError("No Kwargs allowed")
#         else:
#             return fn(*args, **kwargs)

#     return wrapper


# @ensure_no_kwargs
# def greet(name):
#     """Greet someone"""
#     print(f"Hello, {name}")


# greet = ensure_no_kwargs(greet)

# # @ensure_no_kwargs
# # def ungreet(name):
# #     """Ungreet someone"""
# #     print(f"Goodbye, {name}")


# # greet("John")
# greet(name="John")

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


# def decorator(fn):
#     def wrapper(*args, **kwargs):
#         fn(*args, **kwargs)

#     return wrapper


# def outer(name):
#     def inner(fn):
#         def wrapper(*args, **kwargs):
#             fn(*args, **kwargs)

#         return wrapper

#     return inner


# @decorator  # func = decorator(func)
# def func(arg):
#     pass


# @decorator("John")
# def func(arg):
#     pass


# func = decorator(func)


# func = decorator("John")(func)


# # wraps(fn)(wrapper)


def enforce(*types):
    def decorator(f):
        def wrapper(*args, **kwargs):
            newargs = []
            for (a, t) in zip(args, types):
                newargs.append(t(a))
            return f(*newargs, **kwargs)

        return wrapper

    return decorator


# [("Hello World", str), ("10", int)]

# str()


@enforce(str, int)
def repeat(msg, count):
    for n in range(count):
        print(msg)


repeat("Hello World", "1A0")
# https://docs.python.org/3/py-modindex.html

# import random as kamal

# print(kamal.choice(["Ryzen 7", "Ryzen 9", "Core i7", "Core i9"]))

# p = ["Ryzen 7", "Ryzen 9", "Core i7", "Core i9"]
# kamal.shuffle(p)

# print(p)

# print(kamal.randint(50, 100))
# print(kamal.random())


# from random import choice, shuffle, randint, random

# print(randint(0, 10))
# print(random())
# print(choice(["Ryzen 7", "Ryzen 9", "Core i7", "Core i9"]))

# from random import *

# choice()
# random()


# from random import choice as c, shuffle as rshuffle, randint, random as kuchbhi

# # print(kuchbhi())


# def shuffle():
#     print("HELLO")


# print(shuffle())


# from .customs.test import custom_math


# print(add(10, 50))

# print(sub(100, 5))


# import scratchpad_23 as s23
# from .customs import cus
# from .customs.test import custom_math

# s23.enforce()

# from pyfiglet import figlet_format
# from colorama import init, Fore, Back, Style
# from termcolor import colored


# init()


# def generate_art(text, color):
#     if color not in (
#         "grey",
#         "red",
#         "green",
#         "yellow",
#         "blue",
#         "magenta",
#         "cyan",
#         "white",
#     ):
#         color = "white"

#     art = figlet_format(text)
#     print(colored(art, color))


# # text = input("Please enter your desired text: ")
# # color = input("Please enter a color: ")


# # generate_art(text, color)


# # print(colored("Hello World", "LIGHTBLACK_EX"))
# print(colored("Hello, World!", "red", "on_magenta"))

# import time


# print("Hello World")
# time.sleep(5)
# print("Hello after 5 seconds")

def enforce(name):
    def inner(*types):
        def decorator(f):
            def wrapper(*args, **kwargs):
                newargs = []
                for (a, t) in zip(args, types):
                    newargs.append(t(a))
                return f(*newargs, **kwargs)

            return wrapper

        return decorator
    return inner



@enforce("john")(str, int)              # printer = enforce("john")(str, int)(printer)
def printer(message, count):
    for i in range(count):
        print(message)


printer("Hello World", 10)



# import random


# random.choice
# file = open("text.txt")
# print(file.readlines())
# print(file.closed)
# file.close()


# with open("text.txt") as file:
#     print(file.read())
#     # file.seek(0)
#     # print(file.read())
#     print("Inside the with block/statement", file.closed)

# print("Outside the with block/statement", file.closed)

# file_content = ""

# with open("actors.txt", "w") as file:
#     file.write("Kamal Khan\n")
#     file.write("Shahrukh Khan\n")
#     file.write("Tom Cruise\n")

# # with open("actors.txt") as file:
# #     file_content = file.read()

# with open("actors.txt", "a") as file:
#     file.write("Manoj Bajpai\n")
#     file.write("Amir Khan\n")
#     file.write("Kangana Ranaut")


# print(file_content)

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


# with open("actors.txt", "w") as file:
#     file.write("Kamal Khan\n")
#     file.write("Shahrukh Khan\n")
#     file.write("Tom Cruise\n")
#     file.seek(0)
#     file.write("####")


# with open("actors.txt", "a") as file:
#     file.write("Kamal Khan\n")
#     file.write("Shahrukh Khan\n")
#     file.write("Tom Cruise\n")
#     file.seek(0)
#     file.write("####")

with open("actors.txt", "r+") as file:
    file.write("*" * 1000)
    file.seek(0)
    file.write("Welcome to your life!\n")
    file.seek(0)
    print(file.read())
    file.write("TEST ENDING MESSAGE")
    # file.seek(30)
    # file.write("\tREPLACE FROM THE START\t")
# def csv_reader(filename):
#     """Reads a CSV file and returns a list of lists

#     Args:
#         filename (str): name and location of the csv file

#     Returns:
#         [list]: list of column list
#     """
#     with open(filename) as file:
#         res = []
#         for row in file.readlines():
#             cols = row.split(",")
#             sanitized = list(map(lambda i: i.replace("\n", ""), cols))
#             res.append(sanitized)
#     return res


# res = csv_reader("house_state.csv")

# for item in res:
#     print(f"{item[0]} | {item[1]} | {item[2]} | {item[2]}")


from csv import reader, DictReader, writer, DictWriter


# with open("info.csv") as file:
#     csv_data = reader(file)
#     for row in csv_data:
#         # Each row is a list
#         print(row)


# with open("info.csv") as file:
#     csv_data = DictReader(file)
#     for row in csv_data:
#         # Each row is a list
#         print(row)


# with open("info2.csv", "w", newline="") as file:
#     csv_writer = writer(file)
#     csv_writer.writerow(["name", "height", "weight", "attack"])
#     csv_writer.writerow(["Brock Lesnar", 6.6, 320, "F5"])


# with open("info2.csv", "w", newline="") as file:
#     headers = ["name", "height", "weight", "attack"]
#     csv_writer = DictWriter(file, fieldnames=headers)
#     csv_writer.writeheader()
#     csv_writer.writerow(
#         {"name": "Brock Lesnar", "height": None, "weight": 320, "attack": "F5"}
#     )

import pickle


class User:
    def __init__(self, first, last, age):
        self.first = first
        self.last = last
        self.age = age

    def info(self):
        print(f"First Name: {self.first}\nLast Name: {self.last}\nAge: {self.age}")


# john = User("John", "Cena", 38)
# edge = User("Hunter", "Helmsley", 42)


# john.info()
# edge.info()


# with open("users.pickle", "wb") as file:
#     pickle.dump((john, edge), file)


with open("users.pickle", "rb") as file:
    john_restored = pickle.load(file)

    john, edge = john_restored

    # print(john)
    # print(edge)
    john.info()
    edge.info()
import json
import jsonpickle


class User:
    def __init__(self, first, last, age):
        self.first = first
        self.last = last
        self.age = age

    def info(self):
        print(f"First Name: {self.first}\nLast Name: {self.last}\nAge: {self.age}")


# john = User("John", "Cena", 38)
# edge = User("Hunter", "Helmsley", 42)


# users = [
#     "john",
#     "jane",
#     {"first_name": "Jack", "last_name": "doe"},
#     None,
#     False,
#     True,
#     1000.23,
# ]

# j = json.dumps(users)

# j = json.dumps([john.__dict__, edge.__dict__])
# print(j)

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


with open("users.json", "r") as file:
    contents = file.read()
    restored = jsonpickle.decode(contents)
    print(restored)
    restored.info()


# python -m pip install MODULE_NAME

Scratchpad #28

import re

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

# # res = pattern.search("Call us on 022 2393-4567 or 022 3453-3452")
# res = pattern.findall("Call us on 022 2393-4567 or 022 3453-3452")

# if res:
#     # print(res.group())
#     print(res)
# else:
#     print("Pattern not found")


# def extract_phone(input):
#     pattern = re.compile(r"\d{3}\s\d{4}-\d{4}")
#     match = pattern.search(input)

#     if match:
#         return match.group()
#     else:
#         return None


# def extract_all_phone(input):
#     pattern = re.compile(r"\d{3}\s\d{4}-\d{4}")
#     return pattern.findall(input)


# print(extract_phone("My phone is 022 3453-2213"))
# print(extract_phone("My phone is 022 3453-333"))
# print(extract_phone("My phone is 022 3453333"))

# print(extract_all_phone("My phone is 022 3453-2213 or 022 1232-3421"))


def validate_phone(phone):
    # pattern = re.compile(r"^\d{3}\s\d{4}-\d{4}$")
    pattern = re.compile(r"\d{3}\s\d{4}-\d{4}")
    match = pattern.fullmatch(phone)
    if match:
        return True
    else:
        return False


print(validate_phone("022 3453-2213"))
# # # SQL

# # # Schema

# # # Students
# # # id | firstName | lastName | age | phone     | aadhaar
# # # 1  | john      |  doe     | 23  | 329409324 |
# # # 1  | john      |  doe     | 23  | 329409324 |
# # # 1  | john      |  doe     | 23  | 329409324
# # # 1  | john      |  None    | 23  | 329409324
# # # 1  | john      |  doe     | 23  | 329409324
# # # 1  | john      |  doe     | 23  | 329409324
# # # 1  | john      |  doe     | 23  | 329409324
# # # 24 | jack       | doe       23  | 435345435 | 23435345

# # # Students
# # # id | firstName | lastName | age | phone     | aadhaar
# # # 1  | john      |  doe     | 23  | 329409324 |
# # # 1  | john      |  doe     | 23  | 329409324 |
# # # 1  | john      |  doe     | 23  | 329409324
# # # 1  | john      |  None    | 23  | 329409324
# # # 1  | john      |  doe     | 23  | 329409324
# # # 1  | john      |  doe     | 23  | 329409324
# # # 1  | john      |  doe     | 23  | 329409324
# # # 24 | jack       | doe       23  | 435345435 | 23435345


# # # Trainers
# # # id | firstName | lastName | age | phone
# # # 1  | john      |  doe     | 23  | 329409324
# # # 2  | john      |  doe     | 23  | 329409324


# # # ONE TO MANY RELATIONSHIP
# # # ONE TO ONE
# # # MANY TO MANY


# # # SCALE VERTICAL

# # #
# # # $500000000000

# # # NOSQL

# # # Students collection
# # # Add document
# # [
# #     {_id: "234324345435", firstName: "John", lastName: "Doe", friends: []},
# #     {_id: "234324345435", firstName: "John", lastName: "Doe", age: 25},
# #     {
# #         _id: "234324345435",
# #         firstName: "John",
# #         lastName: "Doe",
# #         age: 25,
# #         trainer: "234324345435",
# #     },
# #     {_id: "234324345435", firstName: "John", lastName: "Doe", age: 25},
# # ]


# # # Trainer collection
# # [
# #     {
# #         _id: "234324345435",
# #         firstName: "John",
# #         lastName: "Doe",
# #         students: ["234324345435", "234324345435"],
# #     },
# #     {_id: "234324345435", firstName: "John", lastName: "Doe", age: 25},
# # ]


# # # $5  $5 $5 $5 $5


# # mongo
# # db
# # show dbs
# # use students
# #


# > db
# test
# >
# >
# >
# >
# >
# >
# > show dbs
# admin     0.000GB
# config    0.000GB
# ldp       0.000GB
# local     0.000GB
# rststore  0.000GB
# >
# >
# >
# > use students
# switched to db students
# >
# > show dbs
# admin     0.000GB
# config    0.000GB
# ldp       0.000GB
# local     0.000GB
# rststore  0.000GB
# >
# > db
# students
# >
# > db.students.insert({name: "John Doe", age: 25, city: "Mumbai"})
# WriteResult({ "nInserted" : 1 })
# >
# > db.students.insert({name: "Jack Doe", age: 28, city: "Delhi"})
# WriteResult({ "nInserted" : 1 })
# >
# > db.students.insert({name: "Jane Doe", age: 32, city: "Calcutta"})
# WriteResult({ "nInserted" : 1 })
# >
# > show dbs
# admin     0.000GB
# config    0.000GB
# ldp       0.000GB
# local     0.000GB
# rststore  0.000GB
# students  0.000GB
# >
# >
# > db
# students
# >
# > show collections
# students
# >
# >
# > db
# students
# >
# >
# > db.trainers.insert({name: "Jim Ambani", age: 30})
# WriteResult({ "nInserted" : 1 })
# >
# >
# > show collections
# students
# trainers
# >
# > db.students.find()
# { "_id" : ObjectId("607051755af2dc62d79ce9ca"), "name" : "John Doe", "age" : 25, "city" : "Mumbai" }
# { "_id" : ObjectId("607051cd5af2dc62d79ce9cb"), "name" : "Jack Doe", "age" : 28, "city" : "Delhi" }
# { "_id" : ObjectId("607051dd5af2dc62d79ce9cc"), "name" : "Jane Doe", "age" : 32, "city" : "Calcutta" }
# >
# >
# > db.students.find().pretty()
# {
#         "_id" : ObjectId("607051755af2dc62d79ce9ca"),
#         "name" : "John Doe",
#         "age" : 25,
#         "city" : "Mumbai"
# }
# {
#         "_id" : ObjectId("607051cd5af2dc62d79ce9cb"),
#         "name" : "Jack Doe",
#         "age" : 28,
#         "city" : "Delhi"
# }
# {
#         "_id" : ObjectId("607051dd5af2dc62d79ce9cc"),
#         "name" : "Jane Doe",
#         "age" : 32,
#         "city" : "Calcutta"
# }
# >
# > db.trainers.find().pretty()
# {
#         "_id" : ObjectId("6070529e5af2dc62d79ce9cd"),
#         "name" : "Jim Ambani",
#         "age" : 30
# }
# >
# >
# > db.students.find({name: "John"})
# >
# > db.students.find({name: "John Doe"})
# { "_id" : ObjectId("607051755af2dc62d79ce9ca"), "name" : "John Doe", "age" : 25, "city" : "Mumbai" }
# >
# > db.students.insert({name: "John Doe", age: 18, city: "Dhaka"})
# WriteResult({ "nInserted" : 1 })
# >
# >
# > db.students.find()
# { "_id" : ObjectId("607051755af2dc62d79ce9ca"), "name" : "John Doe", "age" : 25, "city" : "Mumbai" }
# { "_id" : ObjectId("607051cd5af2dc62d79ce9cb"), "name" : "Jack Doe", "age" : 28, "city" : "Delhi" }
# { "_id" : ObjectId("607051dd5af2dc62d79ce9cc"), "name" : "Jane Doe", "age" : 32, "city" : "Calcutta" }
# { "_id" : ObjectId("607053ef5af2dc62d79ce9ce"), "name" : "John Doe", "age" : 18, "city" : "Dhaka" }
# >
# >
# > db.students.find({name: "John Doe"})
# { "_id" : ObjectId("607051755af2dc62d79ce9ca"), "name" : "John Doe", "age" : 25, "city" : "Mumbai" }
# { "_id" : ObjectId("607053ef5af2dc62d79ce9ce"), "name" : "John Doe", "age" : 18, "city" : "Dhaka" }
# >
# > db.students.findOne({name: "John Doe"})
# {
#         "_id" : ObjectId("607051755af2dc62d79ce9ca"),
#         "name" : "John Doe",
#         "age" : 25,
#         "city" : "Mumbai"
# }
# >
# >
# > db.students.findById("607053ef5af2dc62d79ce9ce")
# uncaught exception: TypeError: db.students.findById is not a function :
# @(shell):1:1
# >
# >
# >
# >
# > db.students.findMany({name: "John Doe"})
# uncaught exception: TypeError: db.students.findMany is not a function :
# @(shell):1:1
# >
# > db.students.findmany({name: "John Doe"})
# uncaught exception: TypeError: db.students.findmany is not a function :
# @(shell):1:1
# >
# >
# >
# >
# >
# >
# > db.students.update({name: "John Doe"}, {$set: {name: "Japani Doe"}})
# WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
# >
# >
# > db.students.find().pretty()
# {
#         "_id" : ObjectId("607051755af2dc62d79ce9ca"),
#         "name" : "Japani Doe",
#         "age" : 25,
#         "city" : "Mumbai"
# }
# {
#         "_id" : ObjectId("607051cd5af2dc62d79ce9cb"),
#         "name" : "Jack Doe",
#         "age" : 28,
#         "city" : "Delhi"
# }
# {
#         "_id" : ObjectId("607051dd5af2dc62d79ce9cc"),
#         "name" : "Jane Doe",
#         "age" : 32,
#         "city" : "Calcutta"
# }
# {
#         "_id" : ObjectId("607053ef5af2dc62d79ce9ce"),
#         "name" : "John Doe",
#         "age" : 18,
#         "city" : "Dhaka"
# }
# > db.students.updateMany({name: "John Doe"}, {$set: {name: "Bhutani Doe"}})
# { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
# >
# >
# > db.students.find().pretty()
# {
#         "_id" : ObjectId("607051755af2dc62d79ce9ca"),
#         "name" : "Japani Doe",
#         "age" : 25,
#         "city" : "Mumbai"
# }
# {
#         "_id" : ObjectId("607051cd5af2dc62d79ce9cb"),
#         "name" : "Jack Doe",
#         "age" : 28,
#         "city" : "Delhi"
# }
# {
#         "_id" : ObjectId("607051dd5af2dc62d79ce9cc"),
#         "name" : "Jane Doe",
#         "age" : 32,
#         "city" : "Calcutta"
# }
# {
#         "_id" : ObjectId("607053ef5af2dc62d79ce9ce"),
#         "name" : "Bhutani Doe",
#         "age" : 18,
#         "city" : "Dhaka"
# }
# >
# >
# > db.students.updateMany({age: {$gt: 26}}, {$set: {profession: "Chor"}})
# { "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
# >
# >
# > db.students.find().pretty()
# {
#         "_id" : ObjectId("607051755af2dc62d79ce9ca"),
#         "name" : "Japani Doe",
#         "age" : 25,
#         "city" : "Mumbai"
# }
# {
#         "_id" : ObjectId("607051cd5af2dc62d79ce9cb"),
#         "name" : "Jack Doe",
#         "age" : 28,
#         "city" : "Delhi",
#         "profession" : "Chor"
# }
# {
#         "_id" : ObjectId("607051dd5af2dc62d79ce9cc"),
#         "name" : "Jane Doe",
#         "age" : 32,
#         "city" : "Calcutta",
#         "profession" : "Chor"
# }
# {
#         "_id" : ObjectId("607053ef5af2dc62d79ce9ce"),
#         "name" : "Bhutani Doe",
#         "age" : 18,
#         "city" : "Dhaka"
# }
# > db.students.deleteOne({age: {$gt: 26}})
# { "acknowledged" : true, "deletedCount" : 1 }
# >
# > db.students.find().pretty()
# {
#         "_id" : ObjectId("607051755af2dc62d79ce9ca"),
#         "name" : "Japani Doe",
#         "age" : 25,
#         "city" : "Mumbai"
# }
# {
#         "_id" : ObjectId("607051dd5af2dc62d79ce9cc"),
#         "name" : "Jane Doe",
#         "age" : 32,
#         "city" : "Calcutta",
#         "profession" : "Chor"
# }
# {
#         "_id" : ObjectId("607053ef5af2dc62d79ce9ce"),
#         "name" : "Bhutani Doe",
#         "age" : 18,
#         "city" : "Dhaka"
# }
# > db.students.deleteMany({age: {$lt: 20}})
# { "acknowledged" : true, "deletedCount" : 1 }
# >
# > db.students.find().pretty()
# {
#         "_id" : ObjectId("607051755af2dc62d79ce9ca"),
#         "name" : "Japani Doe",
#         "age" : 25,
#         "city" : "Mumbai"
# }
# {
#         "_id" : ObjectId("607051dd5af2dc62d79ce9cc"),
#         "name" : "Jane Doe",
#         "age" : 32,
#         "city" : "Calcutta",
#         "profession" : "Chor"
# }
# >
# >
# >
# >
# >
# > db.students.deleteMany({})
# { "acknowledged" : true, "deletedCount" : 2 }
# >
# > db.students.find()
# >
# >
# > db
# students
# >
# >
# > db
# students
# >
# > show dbs
# admin     0.000GB
# config    0.000GB
# ldp       0.000GB
# local     0.000GB
# rststore  0.000GB
# students  0.000GB
# >
# > db.dropDatabase()
# { "dropped" : "students", "ok" : 1 }
# >
# > show dbs
# admin     0.000GB
# config    0.000GB
# ldp       0.000GB
# local     0.000GB
# rststore  0.000GB
# > db
# students
# > show collections
# >
# > exit
# bye
from pymongo import MongoClient
from pprint import pprint

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


db = client.pystudents
coll = db["users"]


# print(coll.find())

# doc1 = {"first_name": "John", "last_name": "Doe", "age": 25}

# users = [
#     {"first_name": "Jack", "last_name": "Doe", "age": 22},
#     {"first_name": "James", "last_name": "Doe", "age": 30},
#     {"first_name": "Jane", "last_name": "Ma", "age": 18},
#     {"first_name": "Jim", "last_name": "Ma", "age": 47},
#     {"first_name": "Jessica", "last_name": "Goku", "age": 52},
# ]

# # Inserting
# coll.insert_one(doc1)
# coll.insert_many(users)


# Finding
# for doc in coll.find():
#     print(doc["first_name"])


# query = {"age": {"$gt": 30}}
# new_value = {"$set": {"profession": ["chor", "thief", "robber"]}}

# Finding
# search_res = coll.find(query)
# pprint(list(search_res))

# Updating
# coll.update_many(query, new_value)

# search_res = coll.find(query)
# pprint(list(search_res))

# coll.delete_one({"first_name": "John"})
# coll.delete_many({})
# coll.delete_many(query)


# search_res = coll.find()
# pprint(list(search_res))


# client.drop_database("pystudents")


# SQLite version 3.33.0 2020-08-14 13:23:32
# Enter ".help" for usage hints.
# Connected to a transient in-memory database.
# Use ".open FILENAME" to reopen on a persistent database.
# sqlite> .open pystudents.db
# sqlite> CREATE TABLE students (name TEXT, age INTEGER);
# sqlite> .tables
# students
# sqlite>
# sqlite> .schema students
# CREATE TABLE students (name TEXT, age INTEGER);
# sqlite>
# sqlite> INSERT INTO students (name, age) VALUES ("John Doe", 25);
# sqlite> INSERT INTO students (name, age) VALUES ("Jane Doe", 28)
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...>
#    ...> ;
# sqlite> INSERT INTO students (name, age) VALUES ("Jack Ma", 34);
# sqlite>
# sqlite>
# sqlite>
# sqlite> SELECT * FROM students;
# John Doe|25
# Jane Doe|28
# Jack Ma|34
# sqlite>
# sqlite> SELECT * FROM students WHERE name IS "Jane Doe";
# Jane Doe|28
# sqlite>
# sqlite> INSERT INTO students (name, age) VALUES ("Jane Doe", 40);
# sqlite>
# sqlite> SELECT * FROM students WHERE name IS "Jane Doe";
# Jane Doe|28
# Jane Doe|40
# sqlite>
# sqlite> INSERT INTO students (name, age) VALUES ("Jack Ma", 34);
# sqlite> INSERT INTO students (name, age) VALUES ("Jack Ma", 34);
# sqlite>
# sqlite>
# sqlite>
# sqlite> SELECT * FROM students WHERE name IS "Jack Ma";
# Jack Ma|34
# Jack Ma|34
# Jack Ma|34
# sqlite>
# sqlite> SELECT * FROM students;
# John Doe|25
# Jane Doe|28
# Jack Ma|34
# Jane Doe|40
# Jack Ma|34
# Jack Ma|34
# sqlite>
# sqlite>
# sqlite> SELECT * FROM students WHERE age IS 34;;
# Jack Ma|34
# Jack Ma|34
# Jack Ma|34
# sqlite>
# sqlite> SELECT * FROM students WHERE age > 30;
# Jack Ma|34
# Jane Doe|40
# Jack Ma|34
# Jack Ma|34
# sqlite>
# sqlite> SELECT * FROM students WHERE age == 30;
# sqlite>
# sqlite>
# sqlite> SELECT * FROM students WHERE age IS 30;
# sqlite>
# sqlite> SELECT * FROM students WHERE age == 34;
# Jack Ma|34
# Jack Ma|34
# Jack Ma|34
# sqlite>
# sqlite> SELECT * FROM students WHERE age IS 34;
# Jack Ma|34
# Jack Ma|34
# Jack Ma|34
# sqlite>
# sqlite>
# sqlite>
# sqlite> SELECT * FROM students WHERE name LIKE "%an%";
# Jane Doe|28
# Jane Doe|40
# sqlite>
# sqlite>
# sqlite>
# sqlite> UPDATE students SET age = 40 WHERE name LIKE "%an%";
# sqlite>
# sqlite>
# sqlite> SELECT * FROM students WHERE name LIKE "%an%";
# Jane Doe|40
# Jane Doe|40
# sqlite>
# sqlite>
# sqlite>
# sqlite> DELETE FROM students WHERE age > 30;
# sqlite>
# sqlite> SELECT * FROM students;
# John Doe|25
# sqlite>
# sqlite>
# sqlite> DELETE from students;
# sqlite>
# sqlite> SELECT * FROM students;
# sqlite>
# sqlite> DROP TABLE students;
# sqlite>
# sqlite> .tables
# sqlite>
# sqlite>


import sqlite3

conn = sqlite3.connect("pyusers.db")

c = conn.cursor()

# c.execute("CREATE TABLE users (first_name TEXT, last_name TEXT, age INTEGER)")
# c.execute("INSERT INTO users VALUES ('john', 'doe', 25)")
# c.execute("INSERT INTO users VALUES ('jane', 'doe', 35)")

# users = [("jack", "ma", 30), ("james", "marsden", 45), ("jim", "halpert", 33)]

# query = """INSERT INTO users VALUES (?, ?, ?)"""
# c.executemany(query, users)

c.execute("SELECT * FROM users WHERE age > 30;")

# print(c)

for row in c:
    print(row)

# print(c.fetchall())

conn.commit()
conn.close()