Python

This md document is generated programatically from https://github.com/gsweene2/garrett-learns-python/blob/master/convert-to-md.py

import copy from collections import Counter, namedtuple

Argument Unpacking


def unpack_dict_arguments(arg1, arg2, arg3):
    return {"arg1": arg1, "arg2": arg2, "arg3": arg3}


def test_unpack_dict_arguments():
    # Any order!
    arg_dict = {"arg2": "Argument 2", "arg1": "Argument 1", "arg3": "Argument 3"}
    result = unpack_dict_arguments(**arg_dict)
    expected = {"arg1": "Argument 1", "arg2": "Argument 2", "arg3": "Argument 3"}
    assert expected == result


Basic Comprehension


def string_to_list_comprehension(my_string):
    letter_list = [letter for letter in my_string]
    return letter_list


Test Basic Comprehension


def test_string_to_list_comprehension():
    # Arrange
    my_string = "awesome"
    # Act
    result_string = string_to_list_comprehension(my_string)
    # Assert
    expected = ["a", "w", "e", "s", "o", "m", "e"]
    assert expected == result_string


Caesar Cipher single Character (Unicode)


def caesar_cipher_single_character(character, number):
    # Get unicode decimal
    uni = ord(character)
    # Add number to create new unicode decimal
    new_uni = uni + number
    # Since A-z are 96-122, check to see if still in range
    if new_uni <= 122:
        return chr(new_uni)
    return chr((new_uni + 96) % 122)


Test Caesar Cipher single Character


def test_caesar_cipher_single_character():
    # Arrange
    character, number = "a", 1
    # Act
    result = caesar_cipher_single_character(character, number)
    # Assert
    assert "b" == result


def test_caesar_cipher_single_character():
    # Arrange
    character, number = "z", 1
    # Act
    result = caesar_cipher_single_character(character, number)
    # Assert
    assert "a" == result


Collections: namedtuples


def create_golf_hole_named_tuple(hole_number, par):
    Hole = namedtuple("hole", "number par")
    return Hole(hole_number, par)


Test Collections: namedtuples


def test_create_golf_hole_named_tuple():
    # Arrange
    hole_number = 18
    par = 4
    # Act
    hole_tuple = create_golf_hole_named_tuple(hole_number, par)
    # Assert
    assert 18 == hole_tuple.number
    assert 4 == hole_tuple.par


Count Occurances in List


def count_occurances_in_list(my_list, item):
    return my_list.count(item)


def count_occurances_of_each_item_in_list(my_list):
    return Counter(my_list)


Test Count Occurances in List


def test_count_occurances_in_list():
    # Arrange
    my_list = [1, 3, 4, 2, 2, 2, 4, 2]
    # Act
    occurances = count_occurances_in_list(my_list, 2)
    # Assert
    assert 4 == occurances


def test_count_occurances_of_each_item_in_list():
    # Arrange
    my_list = ["a", "c", "d", "b", "b", "b", "c", "b"]
    # Act
    occurances = count_occurances_of_each_item_in_list(my_list)
    # Assert
    expected = {"a": 1, "b": 4, "c": 2, "d": 1}
    assert expected == occurances


Deep and Shallow Copy


def shallow_copy(my_list):
    return list(my_list)


def deep_copy(my_list):
    return copy.deepcopy(my_list)


Test Deep and Shallow Copy


def test_shallow_copy__modify_object_in_init_list__should_affect_copy_list():
    # Arrange
    init_list = [1, 2, 3, [1, 2, 3]]
    # Act
    copy_list = shallow_copy(init_list)
    init_list[3].append(4)
    # Assert
    assert copy_list == [1, 2, 3, [1, 2, 3, 4]]
    assert init_list == [1, 2, 3, [1, 2, 3, 4]]


def test_deep_copy__modify_object_in_init_list__should_not_affect_copy_list():
    # Arrange
    init_list = [1, 2, 3, [1, 2, 3]]
    # Act
    copy_list = deep_copy(init_list)
    init_list[3].append(4)
    # Assert
    assert copy_list == [1, 2, 3, [1, 2, 3]]
    assert init_list == [1, 2, 3, [1, 2, 3, 4]]


Find Substrings in list of Strings with Comprehensions


def find_strings_that_contain_substring_in_list_comprehension(
    list_of_strings, substring
):
    return [word for word in list_of_strings if substring in word.lower()]


Test Find Substrings in list of Strings with Comprehensions


def test_find_strings_that_contain_substring_in_list_comprehension():
    # Arrange
    list_of_strings = ["Fred", "Freedy", "Reddison", "Dave", "Bob", "Red"]
    # Act
    result = find_strings_that_contain_substring_in_list_comprehension(
        list_of_strings, "red"
    )
    # Assert
    expected = ["Fred", "Reddison", "Red"]
    assert expected == result


Get key from map


def get_key_from_map_else_return_default(my_map, key):
    return my_map.get(key, "Not Found")


def get_key_from_map_else_return_default_ternary(my_map, key):
    return my_map[key] if key in my_map else "Not Found"


Test Get key from map


def test_get_key_from_map_else_return_default_key_exists():
    # Arrange
    my_map = {"a": 1, "b": 2, "c": 3}
    # Act
    value = get_key_from_map_else_return_default(my_map, "a")
    # Assert
    assert value == 1


def test_get_key_from_map_else_return_default_key_dne():
    # Arrange
    my_map = {"a": 1, "b": 2, "c": 3}
    # Act
    value = get_key_from_map_else_return_default(my_map, "z")
    # Assert
    assert value == "Not Found"


def test_get_key_from_map_else_return_default_ternary_key_exists():
    # Arrange
    my_map = {"a": 1, "b": 2, "c": 3}
    # Act
    value = get_key_from_map_else_return_default_ternary(my_map, "a")
    # Assert
    assert value == 1


def test_get_key_from_map_else_return_default_ternary_key_dne():
    # Arrange
    my_map = {"a": 1, "b": 2, "c": 3}
    # Act
    value = get_key_from_map_else_return_default_ternary(my_map, "z")
    # Assert
    assert value == "Not Found"


Lambda welcome message

print_welcome_lambda = lambda first, last: f"Welcome to garretts-docs, {first} {last}"

Test Lambda welcome message


def test_print_welcome_lambda():
    # Arrage
    first, last = "Garrett", "Smith"
    # Act
    result = print_welcome_lambda(first, last)
    # Assert
    expected = "Welcome to garretts-docs, Garrett Smith"
    assert expected == result


Merge Dictionaries


def merge_dictionaries(dict_1, dict_2):
    return {**dict_1, **dict_2}


Test Merge Dictionaries


def test_merge_dictionaries():
    # Arrage
    older_data = {"bob": 35, "phil": 39, "katie": 30}
    newer_data = {"phil": 41, "fred": 19}
    # Act
    result = merge_dictionaries(older_data, newer_data)
    # Assert
    expected = {"bob": 35, "phil": 41, "katie": 30, "fred": 19}
    assert expected == result


def test_merge_dictionaries():
    # Arrage
    older_data = {"phil": 41, "fred": 19}
    newer_data = {"bob": 35, "phil": 39, "katie": 30}
    # Act
    result = merge_dictionaries(older_data, newer_data)
    # Assert
    expected = {"phil": 39, "fred": 19, "bob": 35, "katie": 30}
    assert expected == result


Sorting


def sort_list_ascending(my_list):
    return sorted(my_list)


def sort_list_descending(my_list):
    return sorted(my_list, reverse=True)


def sort_dictionary_on_value(my_dict):
    return sorted(my_dict.items(), key=lambda x: x[1], reverse=True)


Test Sorting


def test_sort_list_ascending__should_return_sorted_list():
    # Arrange
    my_list = ["A", "C", "D", "B", "E"]
    # Act
    sorted_list = sort_list_ascending(my_list)
    # Assert
    expected = ["A", "B", "C", "D", "E"]
    assert sorted_list == expected


def test_sort_list_descending__should_return_sorted_list():
    # Arrange
    my_list = ["A", "C", "D", "B", "E"]
    # Act
    sorted_list = sort_list_descending(my_list)
    # Assert
    expected = ["E", "D", "C", "B", "A"]
    assert sorted_list == expected


def test_sort_dictionary_on_value():
    # Arragne
    my_dict = {"bob": 97, "fred": 67, "katie": 78, "sophie": 99}
    # Act
    sorted_list = sort_dictionary_on_value(my_dict)
    # Assert
    expected_list = [("sophie", 99), ("bob", 97), ("katie", 78), ("fred", 67)]
    assert expected_list == sorted_list


Sum


def sum_list(my_list):
    return sum(my_list)


Test Sum


def test_sum():
    # Arrange
    data = [1, 2, 3]
    # Act
    result = sum_list(data)
    # Assert
    assert result == 6


def test_sum():
    # Arrange
    data = [1, 2, 3]
    # Act
    result = sum_list(data)
    # Assert
    assert result, 6


Switch


def switch_on_ones(num):
    switcher = {
        1: "One",
        2: "Two",
        3: "Three",
        4: "Four",
        5: "Five",
        6: "Six",
        7: "Seven",
        8: "Eight",
        9: "Nine",
    }
    return switcher.get(num)


Test Switch


def test_switch_on_ones():
    assert "Five" == switch_on_ones(5)
    assert "Nine" == switch_on_ones(9)


Strings: Get Last n characters of String


def get_last_n_characters(string_value, n):
    return string_value[len(string_value) - n : len(string_value)]


Test Strings: Get Last n characters of String


def test_get_last_n_characters():
    # Arrange
    string_value = "alliwantforchristmasisyou"
    n = 4
    # Act
    result = get_last_n_characters(string_value, n)
    # Assert
    assert "syou" == result