diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..da8d1e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.vscode/settings.json diff --git a/answer_1/answer_1.py b/answer_1/answer_1.py new file mode 100644 index 0000000..dcfdd0d --- /dev/null +++ b/answer_1/answer_1.py @@ -0,0 +1,24 @@ +import string +import os + +all_letters = string.ascii_letters + +current_path = os.path.dirname(os.path.realpath(__file__)) +file_path = os.path.join(current_path, "letters.txt") # The path to the result file + +# take user input, only accept integers between 1 and 52 +while True: + try: + num_of_letters_in_line = int(input(f"How many letters in a line? [between 1 and {len(all_letters)}] ")) + assert 0 < num_of_letters_in_line <= len(all_letters) + break + except ValueError: + print("Error: not an integer!") + except AssertionError: + print(f"Error: not between 1 and {len(all_letters)}") + +# write the letters to the file +with open(file_path, "w") as f: + for i in range(0, len(all_letters), num_of_letters_in_line): + f.writelines(all_letters[i:i+num_of_letters_in_line] + '\n') + diff --git a/answer_1/letters.txt b/answer_1/letters.txt new file mode 100644 index 0000000..8525f88 --- /dev/null +++ b/answer_1/letters.txt @@ -0,0 +1,18 @@ +abc +def +ghi +jkl +mno +pqr +stu +vwx +yzA +BCD +EFG +HIJ +KLM +NOP +QRS +TUV +WXY +Z diff --git a/answer_2/answer_2.py b/answer_2/answer_2.py new file mode 100644 index 0000000..7e43270 --- /dev/null +++ b/answer_2/answer_2.py @@ -0,0 +1,15 @@ +import string +import os + +current_path = os.path.dirname(os.path.realpath(__file__)) +folder_path = os.path.join(current_path, "text_files") + +# Create a folder if it does not exist +if not os.path.exists(folder_path): + os.mkdir(folder_path) +os.chdir(folder_path) + +# Create a file for each letter in the alphabet +for letter in string.ascii_uppercase: + open(f"{letter}.txt", "w").close() + \ No newline at end of file diff --git a/answer_2/text_files/A.txt b/answer_2/text_files/A.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/B.txt b/answer_2/text_files/B.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/C.txt b/answer_2/text_files/C.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/D.txt b/answer_2/text_files/D.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/E.txt b/answer_2/text_files/E.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/F.txt b/answer_2/text_files/F.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/G.txt b/answer_2/text_files/G.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/H.txt b/answer_2/text_files/H.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/I.txt b/answer_2/text_files/I.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/J.txt b/answer_2/text_files/J.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/K.txt b/answer_2/text_files/K.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/L.txt b/answer_2/text_files/L.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/M.txt b/answer_2/text_files/M.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/N.txt b/answer_2/text_files/N.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/O.txt b/answer_2/text_files/O.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/P.txt b/answer_2/text_files/P.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/Q.txt b/answer_2/text_files/Q.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/R.txt b/answer_2/text_files/R.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/S.txt b/answer_2/text_files/S.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/T.txt b/answer_2/text_files/T.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/U.txt b/answer_2/text_files/U.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/V.txt b/answer_2/text_files/V.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/W.txt b/answer_2/text_files/W.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/X.txt b/answer_2/text_files/X.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/Y.txt b/answer_2/text_files/Y.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_2/text_files/Z.txt b/answer_2/text_files/Z.txt new file mode 100644 index 0000000..e69de29 diff --git a/answer_3/answer_3.py b/answer_3/answer_3.py new file mode 100644 index 0000000..aea7719 --- /dev/null +++ b/answer_3/answer_3.py @@ -0,0 +1,23 @@ +import math + + +def lcm(*numbers): + ''' A recursive function to find the least common multiple of a list of numbers. ''' + if len(numbers) == 2: + # the LCM of two numbers: LCM(a, b) = a * b / gcd(a, b) + return int(numbers[0] * numbers[1]/ math.gcd(numbers[0], numbers[1])) + else: + # the LCM of the first number and the LCM of the rest of the numbers + return lcm(numbers[0], lcm(*numbers[1:])) + + +numbers = [] +# ask the user to enter 4 numbers, only accept integers +while len(numbers) < 4: + try: + numbers.append(int(input("Enter a number: "))) + except ValueError: + print("Error: Not a number! Try again.") + +# calculate the least common multiple of the 4 numbers +print(f"L.C.M of {numbers} is: {lcm(*numbers)}") diff --git a/answer_4/answer_4.py b/answer_4/answer_4.py new file mode 100644 index 0000000..6bf0241 --- /dev/null +++ b/answer_4/answer_4.py @@ -0,0 +1,42 @@ +import os +import sys + +current_path = os.path.dirname(os.path.realpath(__file__)) +operations_directory = os.path.join(current_path, 'operations_functions\\') +sys.path.append(operations_directory) # Adds the operations_functions directory to the Python path + +# Imports the functions from the operations_functions directory +import add_function, sub_function, multiply_function, divide_function + +def input_and_check(prompt, accepted_inputs, error_prompt='Error: Invalid input!'): + ''' A function to check if the user input is in the accepted inputs. Returns the input if it is accepted. Otherwise, repeat.''' + while True: + input_string = input(prompt) + try: + if accepted_inputs == 'numbers': # if the accepted input is a number (float) + return float(input_string) + else: + assert input_string in accepted_inputs + return input_string + except: + print(error_prompt) + + +# The main loop +while True: + number_1 = input_and_check('Enter first number: ', 'numbers', 'Error: Input must be a float value!') + operation = input_and_check('Choose an operation: [+, -, *, /]: ', ['+', '-', '*', '/'], 'Error: Invalid operation! Try again.') + number_2 = input_and_check('Enter second number: ', 'numbers', 'Error: Input must be a float value!') + + if operation == '+': + print(f'{number_1} + {number_2} = {add_function.add(number_1, number_2)}') + elif operation == '-': + print(f'{number_1} - {number_2} = {sub_function.sub(number_1, number_2)}') + elif operation == '*': + print(f'{number_1} * {number_2} = {multiply_function.multiply(number_1, number_2)}') + elif operation == '/': + print(f'{number_1} / {number_2} = {divide_function.divide(number_1, number_2)}') + + if input_and_check('Do you want to continue? (Y/N): ', ['Y', 'y', 'N', 'n']) in ['N', 'n']: + break + diff --git a/answer_4/operations_functions/__pycache__/add_function.cpython-310.pyc b/answer_4/operations_functions/__pycache__/add_function.cpython-310.pyc new file mode 100644 index 0000000..c3a653f Binary files /dev/null and b/answer_4/operations_functions/__pycache__/add_function.cpython-310.pyc differ diff --git a/answer_4/operations_functions/__pycache__/divide_function.cpython-310.pyc b/answer_4/operations_functions/__pycache__/divide_function.cpython-310.pyc new file mode 100644 index 0000000..10af0d3 Binary files /dev/null and b/answer_4/operations_functions/__pycache__/divide_function.cpython-310.pyc differ diff --git a/answer_4/operations_functions/__pycache__/multiply_function.cpython-310.pyc b/answer_4/operations_functions/__pycache__/multiply_function.cpython-310.pyc new file mode 100644 index 0000000..4349a6e Binary files /dev/null and b/answer_4/operations_functions/__pycache__/multiply_function.cpython-310.pyc differ diff --git a/answer_4/operations_functions/__pycache__/sub_function.cpython-310.pyc b/answer_4/operations_functions/__pycache__/sub_function.cpython-310.pyc new file mode 100644 index 0000000..1f18ff0 Binary files /dev/null and b/answer_4/operations_functions/__pycache__/sub_function.cpython-310.pyc differ diff --git a/answer_4/operations_functions/add_function.py b/answer_4/operations_functions/add_function.py new file mode 100644 index 0000000..291c1df --- /dev/null +++ b/answer_4/operations_functions/add_function.py @@ -0,0 +1,4 @@ +import math + +def add(a, b): + return math.ceil(a + b) \ No newline at end of file diff --git a/answer_4/operations_functions/divide_function.py b/answer_4/operations_functions/divide_function.py new file mode 100644 index 0000000..75bb8e2 --- /dev/null +++ b/answer_4/operations_functions/divide_function.py @@ -0,0 +1,9 @@ +from decimal import DivisionByZero +import math + +def divide(a, b): + try: + return math.ceil(a / b) + except ZeroDivisionError: + return "Cannot divide by zero" + \ No newline at end of file diff --git a/answer_4/operations_functions/multiply_function.py b/answer_4/operations_functions/multiply_function.py new file mode 100644 index 0000000..2caa8d7 --- /dev/null +++ b/answer_4/operations_functions/multiply_function.py @@ -0,0 +1,4 @@ +import math + +def multiply(a, b): + return math.ceil(a * b) \ No newline at end of file diff --git a/answer_4/operations_functions/sub_function.py b/answer_4/operations_functions/sub_function.py new file mode 100644 index 0000000..501ce27 --- /dev/null +++ b/answer_4/operations_functions/sub_function.py @@ -0,0 +1,4 @@ +import math + +def sub(a, b): + return math.ceil(a - b) \ No newline at end of file