Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
461e9b2
first commit
jrmcgarvey Jan 9, 2025
0b2ec6c
add sample database
jrmcgarvey Jan 30, 2025
59dcdfe
add reference to Git Bash
jrmcgarvey Jan 31, 2025
a275328
add example assignment 8 solution
jrmcgarvey Feb 1, 2025
ceb8f59
Merge pull request #1 from Code-the-Dream-School/adv_sql
jrmcgarvey Feb 1, 2025
876fd7e
add foreign key constraint to example
jrmcgarvey Feb 1, 2025
ae4e178
add pytest and sample solution for assignment1
jrmcgarvey Feb 7, 2025
edb744e
Merge pull request #2 from Code-the-Dream-School/assignment1
jrmcgarvey Feb 7, 2025
df510e1
add folder and test script for assignment 2
jrmcgarvey Feb 9, 2025
f652559
Merge pull request #3 from Code-the-Dream-School/assignment2
jrmcgarvey Feb 9, 2025
15f975d
parameterized queries -- don't teach bad habits!
jrmcgarvey Feb 12, 2025
b2f4a83
Merge pull request #4 from Code-the-Dream-School/use-parameters-in-qu…
jrmcgarvey Feb 12, 2025
8a2483a
fix exception handling
jrmcgarvey Feb 15, 2025
41da82c
Merge pull request #5 from Code-the-Dream-School/fix-exception-handling
jrmcgarvey Feb 15, 2025
a976ad8
add support for additional exercises on tuples, sets, etc
jrmcgarvey Feb 20, 2025
3a11158
Merge pull request #6 from Code-the-Dream-School/add-minutes
jrmcgarvey Feb 20, 2025
afd51c5
revisions to repo setup. Handle ssh authentication and working updates.
toma63 Feb 25, 2025
ec3ec0c
added assignment3 directory, added unit tests for the first task
toma63 Feb 28, 2025
dee694e
added unit tests and a new section on data cleaning, removed describe…
toma63 Mar 5, 2025
0a93006
Merge pull request #8 from toma63/lesson3-unit-tests
jrmcgarvey Mar 5, 2025
fedfe9e
Merge pull request #7 from toma63/repo-revisions
jrmcgarvey Mar 5, 2025
318f522
fixed missing .git in ssh suthentication oprion
toma63 Mar 9, 2025
4c88898
Merge pull request #9 from toma63/fix-dot-git
jrmcgarvey Mar 9, 2025
aa5007a
remove assignment1 and 2 example solutions. The solutions have been …
toma63 Mar 10, 2025
354c6f2
Merge pull request #10 from toma63/remove-assignment1and2-examples
jrmcgarvey Mar 12, 2025
459e5d2
examples now in mentor guidebook
jrmcgarvey Mar 13, 2025
47d6928
fixed typo in ssh remote url
toma63 Mar 14, 2025
d16f5c4
Merge pull request #11 from Code-the-Dream-School/remove-examples
toma63 Mar 14, 2025
ee7361d
Merge pull request #12 from toma63/url-typo-fix
jrmcgarvey Mar 14, 2025
af78425
create folders for assignment 9 and 10 homework
jrmcgarvey Mar 21, 2025
f00a64f
added folders for assignments 7 and 8 as well
jrmcgarvey Mar 21, 2025
6583442
fixed test to match problem description - case error
toma63 Mar 21, 2025
45b45a8
Merge pull request #14 from toma63/lesson3-test-typo-fix
jrmcgarvey Mar 21, 2025
1a29712
add the assignment12 folder
jrmcgarvey Mar 31, 2025
d49587c
Merge pull request #13 from Code-the-Dream-School/folders-9-10
toma63 Mar 31, 2025
197ea81
Added test for NaTs in Hire Date field
Apr 2, 2025
a938922
Added test for NaTs in Hire Date field again
Apr 2, 2025
9aaa82d
Merge pull request #19 from CTDIntro2022/RMAssignment3
jrmcgarvey Apr 2, 2025
69abdff
rename a3 to a4
toma63 Jul 25, 2025
203c878
renamed more folders for 12 to 3 renumbering
toma63 Jul 26, 2025
f0d2d25
Merge pull request #26 from Code-the-Dream-School/assignment3-to-4
toma63 Jul 26, 2025
50b2135
Complete Lesson 3: Decorators, Closures, and Classes
TwistedML86 Apr 29, 2026
86a5268
Merge school history
TwistedML86 Apr 29, 2026
8457a35
Start Assignment 8
TwistedML86 Jun 9, 2026
fd09985
Complete books scraper
TwistedML86 Jun 9, 2026
fba6f8a
Complete ethical scraping response
TwistedML86 Jun 10, 2026
6cd6014
Complete Assignment 8
TwistedML86 Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.ipynb filter=nbstripout
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.idea
+.DS_Store*
.pytest_cache
__pycache__/
*.rb
.vscode
CACHEDIR.TAG
.venv/
59 changes: 59 additions & 0 deletions assignment1/assignment1-test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import assignment1 as a1

def test_hello():
assert a1.hello() == "Hello!"

def test_greet():
assert a1.greet("James") == "Hello, James!"

def test_calc():
assert a1.calc(5,6) == 30
assert a1.calc(5,6,"add") == 11
assert a1.calc(20,5,"divide") == 4
assert a1.calc(14,2.0,"multiply") == 28.0
assert a1.calc(12.6, 4.4, "subtract") == 8.2
assert a1.calc(9,5, "modulo") == 4
assert a1.calc(10,0,"divide") == "You can't divide by 0!"
assert a1.calc("first", "second", "multiply") == "You can't multiply those values!"

def test_data_type_conversion():
result = a1.data_type_conversion("110", "int")
assert type(result).__name__ == "int"
assert result == 110
result = a1.data_type_conversion("5.5", "float")
assert type(result).__name__ == "float"
assert result == 5.5
result = a1.data_type_conversion(7,"float")
assert type(result).__name__ == "float"
assert result == 7.0
result = a1.data_type_conversion(91.1,"str")
assert type(result).__name__ == "str"
assert result == "91.1"
assert a1.data_type_conversion("banana", "int") == "You can't convert banana into a int."

def test_grade():
assert a1.grade(75,85,95) == "B"
assert a1.grade("three", "blind", "mice") == "Invalid data was provided."

def test_repeat():
assert a1.repeat("up,", 4) == "up,up,up,up,"

def test_student_scores():
assert a1.student_scores("mean", Tom=75, Dick=89, Angela=91) == (75 + 89 + 91) / 3
assert a1.student_scores("best", Tom=75, Dick=89, Angela=91, Frank=50 ) == "Angela"

def test_titleize():
assert a1.titleize("war and peace") == "War and Peace"
assert a1.titleize("a separate peace") == "A Separate Peace"
assert a1.titleize("after on") == "After On"

def test_hangman():
assert a1.hangman("difficulty","ic") == "_i__ic____"

def test_pig_latin():
assert a1.pig_latin("apple") == "appleay"
assert a1.pig_latin("banana") == "ananabay"
assert a1.pig_latin("cherry") == "errychay"
assert a1.pig_latin("quiet") == "ietquay"
assert a1.pig_latin("square") == "aresquay"
assert a1.pig_latin("the quick brown fox") == "ethay ickquay ownbray oxfay"
1 change: 1 addition & 0 deletions assignment1/assignment1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Write your code here.
Empty file added assignment10/.keep
Empty file.
73 changes: 73 additions & 0 deletions assignment2/assignment2-test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import assignment2 as a2
import os

def test_read_employees():
employees = a2.read_employees()
assert employees != None
assert a2.employees != None
assert len(a2.employees["fields"]) == 4
assert a2.employees["fields"][1] == "first_name"
assert len(a2.employees["rows"]) == 20

def test_column_name():
assert a2.column_index("last_name") == 2
assert a2.employee_id_column != None

def test_first_name():
assert a2.first_name(2) in ("David","Lauren") # values before and after sort

def test_employee_find():
match = a2.employee_find(3)
assert match[0][0] == "3"
assert len(match[0]) == 4

def test_employee_find_2():
match = a2.employee_find_2(4)
assert match[0][0] == "4"
assert len(match[0]) == 4

def test_sort_by_last_name():
rows = a2.sort_by_last_name()
assert len(rows) == 20
assert rows[0][2]== "Bowman"

def test_employee_dict():
dict_result = a2.employee_dict(a2.employees["rows"][0])
assert dict_result["last_name"] == "Bowman"
assert "employee_id" not in dict_result.keys()

def test_all_employees_dict():
dict_result = a2.all_employees_dict()
assert len(dict_result.keys()) == 20
assert dict_result["9"]["first_name"] == "Phillip"

def test_get_this_value():
assert a2.get_this_value() == "ABC"

def test_set_that_secret():
import custom_module
a2.set_that_secret("swordfish")
assert custom_module.secret == "swordfish"

def test_read_minutes():
d1, d2 = a2.read_minutes()
assert d1["rows"][1] == ("Tony Henderson","November 15, 1991")
assert d2["rows"][2] == ("Sarah Murray","November 19, 1988")
assert a2.minutes1 != None

def test_create_minutes_set():
minutes_set = a2.create_minutes_set()
assert type(minutes_set).__name__ == "set"
assert len(minutes_set) == 46
assert a2.minutes_set != None

def test_create_minutes_list():
minutes_list = a2.create_minutes_list()
assert type(minutes_list[0][1]).__name__ == "datetime"
assert type(minutes_list[0]).__name__ == "tuple"
assert a2.minutes_list != None

def test_write_sorted_list():
sorted_list = a2.write_sorted_list()
assert sorted_list[0] == ("Jason Tucker","September 20, 1980")
assert os.access("./minutes.csv", os.F_OK) == True
47 changes: 47 additions & 0 deletions assignment2/minutes.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
Name,Date
Jason Tucker,"September 20, 1980"
Austin Hester,"March 8, 1981"
Daniel Jackson,"October 2, 1981"
Mrs. Samantha Johnson,"December 17, 1981"
Joseph Harris,"March 3, 1982"
Mrs. Samantha Johnson,"March 12, 1982"
Gina Maldonado,"December 16, 1982"
Mrs. Samantha Johnson,"December 23, 1982"
Yesenia Smith,"August 10, 1983"
Lori Martin,"February 5, 1984"
Jonathan Parrish,"June 12, 1984"
Mrs. Samantha Johnson,"July 20, 1984"
Amanda Brown,"August 8, 1984"
Sarah Murray,"October 30, 1984"
Mrs. Samantha Johnson,"November 28, 1984"
Austin Hester,"June 4, 1985"
Jonathan Parrish,"March 18, 1986"
Yesenia Smith,"May 6, 1986"
Daniel Jackson,"December 13, 1986"
Gina Maldonado,"February 13, 1987"
Kimberly Stewart,"December 12, 1987"
Mrs. Samantha Johnson,"July 10, 1988"
Sarah Murray,"August 16, 1988"
Aaron Kaufman,"October 24, 1988"
Tony Henderson,"November 7, 1988"
Sarah Murray,"November 19, 1988"
Austin Hester,"January 18, 1989"
Joseph Harris,"March 1, 1989"
Gina Maldonado,"April 7, 1989"
Aaron Kaufman,"November 14, 1989"
Daniel Jackson,"April 8, 1990"
Aaron Kaufman,"May 1, 1990"
Aaron Kaufman,"July 21, 1990"
Tony Henderson,"October 4, 1990"
Yesenia Smith,"November 23, 1990"
Joseph Harris,"April 3, 1991"
Jason Tucker,"April 30, 1991"
Matthew Russell,"May 31, 1991"
Lori Martin,"July 8, 1991"
Mrs. Samantha Johnson,"July 23, 1991"
Tony Henderson,"November 15, 1991"
Gina Maldonado,"February 9, 1992"
Sarah Murray,"June 27, 1992"
Gina Maldonado,"October 31, 1992"
Austin Hester,"December 10, 1992"
Mrs. Samantha Johnson,"December 12, 1992"
Empty file added assignment3/.keep
Empty file.
15 changes: 15 additions & 0 deletions assignment3/decorator.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
function: task_1a
positional parameters: none
keyword parameters: none
return: None

function: task_1b
positional parameters: [10, 20]
keyword parameters: none
return: True

function: task_1c
positional parameters: none
keyword parameters: {'user': 'Ricardo', 'status': 'Student'}
return: logger_decorator

15 changes: 15 additions & 0 deletions assignment3/developer-class.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class Employee:
def __init__(self, first, last, salary):
self.first = first
self.last = last
self.salary = float(salary)

class Developer(Employee):
def __init__(self, first, last, salary, prog_lang):
super().__init__(first, last, salary)
self.prog_lang = prog_lang

dev_1 = Developer("Ricardo", "Santiz", 60000, "Python")
print(f"Name: {dev_1.first} {dev_1.last}")
print(f"Language: {dev_1.prog_lang}")
print(f"Salary: {dev_1.salary}")
16 changes: 16 additions & 0 deletions assignment3/employee-class.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

class Employee:
def __init__(self, first, last, salary):
self.first = first
self.last = last
self.salary = float(salary)
self.email = f"{first.lower()}.{last.lower()}@company.com"

def give_raise(self, amount):
self.salary += amount

emp_1 = Employee("Ricardo", "Santiz", 50000)
print(emp_1.email)
print(f"Old Salary: {emp_1.salary}")
emp_1.give_raise(5555)
print(f"New Salary: {emp_1.salary}")
25 changes: 25 additions & 0 deletions assignment3/hangman-closure.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
def hangman_game(word):
word = word.lower()
guessed_letters = []

def guess(letter):
letter = letter.lower()
if letter in guessed_letters:
return f"You already guessed '{letter}'."

guessed_letters.append(letter)

display_word = [char if char in guessed_letters else "_" for char in word]

if letter in word:
return f"Correct! {' '.join(display_word)}"
else:
return f"Incorrect. {' '.join(display_word)}"

return guess

play = hangman_game("Python")
print(play("p"))
print(play("y"))
print(play("z"))
print(play("p"))
12 changes: 12 additions & 0 deletions assignment3/list-comprehensions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import csv

with open('csv/employees.csv', 'r') as file:
reader = csv.reader(file)
data = list(reader)


full_names = [f"{row[0]} {row[1]}" for row in data[1:]]
print(full_names)

names_with_e = [name for name in full_names if 'e' in name.lower()]
print(names_with_e)
34 changes: 34 additions & 0 deletions assignment3/log-decorator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import logging
logger = logging.getLogger(__name__ + "_parameter_log")
logger.setLevel(logging.INFO)
logger.addHandler(logging.FileHandler("./assignment3/decorator.log","a"))

def logger_decorator(func):
def wrapper(*args, **kwargs):
pos_params = list(args) if args else "none"
kw_params = kwargs if kwargs else "none"
result = func(*args, **kwargs)

log_msg = (f"function: {func.__name__}\n"
f"positional parameters: {pos_params}\n"
f"keyword parameters: {kw_params}\n"
f"return: {result}\n")
logger.info(log_msg)
return result
return wrapper

@logger_decorator
def task_1a():
print("Hello, World!")

@logger_decorator
def task_1b(*args):
return True

@logger_decorator
def task_1c(**kwargs):
return "logger_decorator"

task_1a()
task_1b(10, 20)
task_1c(user="Ricardo", status="Student")
21 changes: 21 additions & 0 deletions assignment3/type-decorator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
def type_converter(type_of_output):
def decorator(func):
def wrapper(*args, **kwargs):
value = func(*args, **kwargs)
return type_of_output(value)
return wrapper
return decorator

@type_converter(str)
def return_int():
return 5

@type_converter(int)
def return_string_num():
return "123"

string_five = return_int()
int_one_two_three = return_string_num()

print(f"Value: {string_five}, Type: {type(string_five).__name__}")
print(f"Value: {int_one_two_three}, Type: {type(int_one_two_three).__name__}")
Loading