timeit

Програмиране с Python

Курс във Факултета по Математика и Информатика към СУ

Решение на Работа с картинки от Иван Димитров

Обратно към всички решения

Към профила на Иван Димитров

Резултати

  • 8 точки от тестове
  • 0 бонус точки
  • 8 точки общо
  • 10 успешни тест(а)
  • 2 неуспешни тест(а)

Код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
def rotate_right(image):
    image_rows = len(image)
    image_cols = len(image[0])

    rotated_image = [[image[image_rows - 1 - j][i] for j in range(image_cols)]
                     for i in range(image_rows)]
    return rotated_image


def rotate_left(image):
    #   or simply call rotate_right three times :D
    image_rows = len(image)
    image_cols = len(image[0])

    rotated_image = [[image[j][image_cols - 1 - i] for j in range(image_cols)]
                     for i in range(image_rows)]

    return rotated_image


def invert(image):
    inverted_image = [[(255 - pixel[0], 255 - pixel[1], 255 - pixel[2])
                       for pixel in row] for row in image]
    return inverted_image


def darken(image, coeff):
    darkened_image = [[(int(pixel[0] - coeff * (pixel[0] - 0)),
                        int(pixel[1] - coeff * (pixel[1] - 0)),
                        int(pixel[2] - coeff * (pixel[2] - 0)))
                       for pixel in row] for row in image]
    return darkened_image


def lighten(image, coeff):
    lightened_image = [[(int(pixel[0] + coeff * (255 - pixel[0])),
                         int(pixel[1] + coeff * (255 - pixel[1])),
                         int(pixel[2] + coeff * (255 - pixel[2])))
                        for pixel in row] for row in image]
    return lightened_image


def create_histogram(image):
    reds = {}
    greens = {}
    blues = {}

    for i in range(len(image)):
        for j in range(len(image[0])):
            pixel = image[i][j]
            if pixel[0] in reds:
                reds[pixel[0]] += 1
            else:
                reds[pixel[0]] = 1
            if pixel[1] in greens:
                greens[pixel[1]] += 1
            else:
                greens[pixel[1]] = 1
            if pixel[2] in blues:
                blues[pixel[2]] += 1
            else:
                blues[pixel[2]] = 1

    histogram = {'red': reds,
                 'green': greens,
                 'blue': blues}

    return histogram

Лог от изпълнението

.........E.E
======================================================================
ERROR: test_rotate_left_rectangle (test.TestImages)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/data/rails/pyfmi-2016/releases/20160307095126/lib/language/python/runner.py", line 67, in thread
    raise result
IndexError: list index out of range

======================================================================
ERROR: test_rotate_right_rectangle (test.TestImages)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/data/rails/pyfmi-2016/releases/20160307095126/lib/language/python/runner.py", line 67, in thread
    raise result
IndexError: list index out of range

----------------------------------------------------------------------
Ran 12 tests in 0.085s

FAILED (errors=2)

История (3 версии и 1 коментар)

Иван обнови решението на 09.03.2016 17:01 (преди почти 2 години)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
def rotate_right(image):
    tup = (0, 0, 0)
    image_rows = len(image)
    image_cols = len(image[0])
    rotated_image = [[tup for i in range(image_rows)]
                     for j in range(image_cols)]

    for i in range(image_rows):
        for j in range(image_cols):
            rotated_image[i][j] = image[image_rows - 1 - j][i]

    return rotated_image


def rotate_left(image):
    #   or simply rotate_right(rotate_right(rotate_right(image)))) :D
    tup = (0, 0, 0)
    image_rows = len(image)
    image_cols = len(image[0])
    rotated_image = [[tup for i in range(image_rows)]
                     for j in range(image_cols)]

    for i in range(image_rows):
        for j in range(image_cols):
            rotated_image[i][j] = image[j][image_cols - 1 - i]

    return rotated_image


def invert(image):
    tup = (0, 0, 0)
    image_rows = len(image)
    image_cols = len(image[0])
    inverted_image = [[tup for i in range(image_rows)]
                      for j in range(image_cols)]
    for i in range(image_rows):
        for j in range(image_cols):
            new_red = 255 - image[i][j][0]
            new_green = 255 - image[i][j][1]
            new_blue = 255 - image[i][j][2]
            new_pixel = (new_red, new_green, new_blue)
            inverted_image[i][j] = new_pixel
    return inverted_image


def darken(image, coeff):
    tup = (0, 0, 0)
    image_rows = len(image)
    image_cols = len(image[0])
    darkened_image = [[tup for i in range(image_rows)]
                      for j in range(image_cols)]
    for i in range(image_rows):
        for j in range(image_cols):
            new_red = int(image[i][j][0] - coeff * (image[i][j][0] - 0))
            new_green = int(image[i][j][1] - coeff * (image[i][j][1] - 0))
            new_blue = int(image[i][j][2] - coeff * (image[i][j][2] - 0))
            new_pixel = (new_red, new_green, new_blue)
            darkened_image[i][j] = new_pixel

    return darkened_image


def lighten(image, coeff):
    tup = (0, 0, 0)
    image_rows = len(image)
    image_cols = len(image[0])
    lightened_image = [[tup for i in range(image_rows)]
                       for j in range(image_cols)]
    for i in range(image_rows):
        for j in range(image_cols):
            new_red = int(image[i][j][0] + coeff * (255 - image[i][j][0]))
            new_green = int(image[i][j][1] + coeff * (255 - image[i][j][1]))
            new_blue = int(image[i][j][2] + coeff * (255 - image[i][j][2]))
            new_pixel = (new_red, new_green, new_blue)
            lightened_image[i][j] = new_pixel

    return lightened_image


def create_histogram(image):
    red_dict = {}
    green_dict = {}
    blue_dict = {}

    for i in range(len(image)):
        for j in range(len(image[0])):
            pixel = image[i][j]
            if pixel[0] in red_dict:
                red_dict[pixel[0]] += 1
            else:
                red_dict[pixel[0]] = 1
            if pixel[1] in green_dict:
                green_dict[pixel[1]] += 1
            else:
                green_dict[pixel[1]] = 1
            if pixel[2] in blue_dict:
                blue_dict[pixel[2]] += 1
            else:
                blue_dict[pixel[2]] = 1

    histogram = {'red': red_dict,
                 'green': green_dict,
                 'blue': blue_dict}

    return histogram
  • Помисли дали не можеш да ползваш нещо от последната лекция, което да ти спести вложените for-ове :)
  • Името tup е доста лош избор, имаш ли изобщо нужда от този ред tup = (0, 0, 0)?
  • Не е добра практика имената да съдържат тип (red_dict, green_dict, blue_dict)

Иван обнови решението на 10.03.2016 00:44 (преди почти 2 години)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
def rotate_right(image):
    image_rows = len(image)
    image_cols = len(image[0])
    rotated_image = [[(0, 0, 0) for i in range(image_rows)]
                     for j in range(image_cols)]

    for i in range(image_rows):
        for j in range(image_cols):
            rotated_image[i][j] = image[image_rows - 1 - j][i]

    return rotated_image


def rotate_left(image):
    #   or simply call rotate_right three times :D
    image_rows = len(image)
    image_cols = len(image[0])
    rotated_image = [[(0, 0, 0) for i in range(image_rows)]
                     for j in range(image_cols)]

    for i in range(image_rows):
        for j in range(image_cols):
            rotated_image[i][j] = image[j][image_cols - 1 - i]

    return rotated_image


def invert(image):
    inverted_image = [[(255 - pixel[0], 255 - pixel[1], 255 - pixel[2])
                       for pixel in row] for row in image]
    return inverted_image


def darken(image, coeff):
    darkened_image = [[(int(pixel[0] - coeff * (pixel[0] - 0)),
                        int(pixel[1] - coeff * (pixel[1] - 0)),
                        int(pixel[2] - coeff * (pixel[2] - 0)))
                       for pixel in row] for row in image]
    return darkened_image


def lighten(image, coeff):
    lightened_image = [[(int(pixel[0] + coeff * (255 - pixel[0])),
                         int(pixel[1] + coeff * (255 - pixel[1])),
                         int(pixel[2] + coeff * (255 - pixel[2])))
                        for pixel in row] for row in image]
    return lightened_image


def create_histogram(image):
    reds = {}
    greens = {}
    blues = {}

    for i in range(len(image)):
        for j in range(len(image[0])):
            pixel = image[i][j]
            if pixel[0] in reds:
                reds[pixel[0]] += 1
            else:
                reds[pixel[0]] = 1
            if pixel[1] in greens:
                greens[pixel[1]] += 1
            else:
                greens[pixel[1]] = 1
            if pixel[2] in blues:
                blues[pixel[2]] += 1
            else:
                blues[pixel[2]] = 1

    histogram = {'red': reds,
                 'green': greens,
                 'blue': blues}

    return histogram

Иван обнови решението на 10.03.2016 20:56 (преди почти 2 години)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
def rotate_right(image):
    image_rows = len(image)
    image_cols = len(image[0])

    rotated_image = [[image[image_rows - 1 - j][i] for j in range(image_cols)]
                     for i in range(image_rows)]
    return rotated_image


def rotate_left(image):
    #   or simply call rotate_right three times :D
    image_rows = len(image)
    image_cols = len(image[0])

    rotated_image = [[image[j][image_cols - 1 - i] for j in range(image_cols)]
                     for i in range(image_rows)]

    return rotated_image


def invert(image):
    inverted_image = [[(255 - pixel[0], 255 - pixel[1], 255 - pixel[2])
                       for pixel in row] for row in image]
    return inverted_image


def darken(image, coeff):
    darkened_image = [[(int(pixel[0] - coeff * (pixel[0] - 0)),
                        int(pixel[1] - coeff * (pixel[1] - 0)),
                        int(pixel[2] - coeff * (pixel[2] - 0)))
                       for pixel in row] for row in image]
    return darkened_image


def lighten(image, coeff):
    lightened_image = [[(int(pixel[0] + coeff * (255 - pixel[0])),
                         int(pixel[1] + coeff * (255 - pixel[1])),
                         int(pixel[2] + coeff * (255 - pixel[2])))
                        for pixel in row] for row in image]
    return lightened_image


def create_histogram(image):
    reds = {}
    greens = {}
    blues = {}

    for i in range(len(image)):
        for j in range(len(image[0])):
            pixel = image[i][j]
            if pixel[0] in reds:
                reds[pixel[0]] += 1
            else:
                reds[pixel[0]] = 1
            if pixel[1] in greens:
                greens[pixel[1]] += 1
            else:
                greens[pixel[1]] = 1
            if pixel[2] in blues:
                blues[pixel[2]] += 1
            else:
                blues[pixel[2]] = 1

    histogram = {'red': reds,
                 'green': greens,
                 'blue': blues}

    return histogram