Warning

# Computer Lab 14, comprehensive exercises

• 1. Implement the following function:

def abs_2(x):
"""Return an absolute value of x-2, i.e., y=|x-2|.

:param x: int, float.
:return: int, float. The absolute value of x-2.
>>> abs_2(0)
2
"""

• 2. Implement the following function (pure function!). You can re-use abs_2().

def abs_2_list(lst):
"""Return a list of absolute values of x-2, where x's are elements of lst.

:param lst: list of ints/floats.
:return: list of ints/floats.
>>> abs_2_list([0, 2, 4])
[2, 0, 2]
"""

• 3. Consider a file with the following content:

number_file.txt

1,2,3,4
90,23,78,0,23,23
9,8,7,-5,-12,0,12,12,12
0,-8
3,3,3,3
Implement a function which outputs a list of sums of numbers from each line of the file. Return None if the file does not exist.
def sum_file(file_name):
"""Return a list of row sums.

:param file_name: Path to a text file.
:return: list of ints/floats.
>>> sum_file("number_file.txt")
[10, 237, 43, -8, 12]
"""

• 4. Implement four methods (__init__, __str__, __eq__, __add__) for the following class according to their tests.

import unittest

class ColorRGB:
"""Represents a color in the R (red), G (green), B (blue) format."""

class TestColorRGB(unittest.TestCase):
"""Test ColorRGB methods"""

def test_init(self):
"""Test that the initializer method __init__ takes 3 parameters"""
ColorRGB(255, 0, 255)

def test_str(self):
"""Test string conversion"""
self.assertEqual("ColorRGB(0,127,127)", str(ColorRGB(0, 127, 127)))

def test_eq(self):
"""Test deep equality for two ColorRGB instances"""
self.assertEqual(ColorRGB(0,30,255), ColorRGB(0,30,255))

"""Test the plus operator between two instances of the ColorRGB class"""
color1 = ColorRGB(30, 100, 255)
color2 = ColorRGB(0, 255, 30)
self.assertEqual(ColorRGB(30, 255, 255), color1 + color2)
self.assertEqual(ColorRGB(30, 100, 255), color1)
self.assertEqual(ColorRGB(0, 255, 30), color2)

if __name__ == "__main__":
# Execute all unit tests
unittest.main()

• 5. Implement the following function:

def random_integers(length, lower_bound, upper_bound):
"""Build a list of randomly chosen integers.

:param length: Length of the resulting list
:param lower_bound: Lower bound of each random integer (INCLUDED)
:param upper_bound: Upper bound of each random integer (INCLUDED)
:return: List of random integers
"""

• 6. Create the following lists using list comprehension:

# 1.
fruits = ["apple", "banana", "pear", "kiwi", "strawberry", "lime", "lemon", "orange"]
# only words of even number of letters, transform them to uppercase

# 2.
# List of |x-2| where x's are all integers in the closed interval [-10, 10].