Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
env
.mypy_cache
.pytest_cache
__pycache__
4 changes: 2 additions & 2 deletions functions/level_1_5/four_sentiment.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ def check_tweet_sentiment(text: str, good_words: set[str], bad_words: set[str])
words = [w.lower() for w in text.split()]
good_words_num = sum(1 for w in words if w in good_words)
bad_words_num = sum(1 for w in words if w in bad_words)
if not good_words_num and not bad_words_num or good_words == bad_words:
if not good_words_num and not bad_words_num or good_words_num == bad_words_num:
return None
if good_words > bad_words:
if good_words_num > bad_words_num:
return "GOOD"
return "BAD"
3 changes: 1 addition & 2 deletions functions/level_1_5/one_median.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
def get_median_value(items: list[int]) -> int | None:
"""
Вычисляет медиану списка целых чисел.

Подробнее про медиану: https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B4%D0%B8%D0%B0%D0%BD%D0%B0_(%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0)
"""
if not items:
Expand All @@ -15,4 +14,4 @@ def get_median_value(items: list[int]) -> int | None:
if len(sorted_items) % 2:
return items[middle_index]
else:
return (items[middle_index] + items[middle_index + 1]) // 2
return (items[middle_index] + items[middle_index + 1]) // 2
13 changes: 13 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,14 @@
attrs==23.1.0
colorama==0.4.6
exceptiongroup==1.1.1
freezegun==1.2.2
iniconfig==2.0.0
mypy==1.3.0
mypy-extensions==1.0.0
packaging==23.1
pluggy==1.0.0
pytest==7.2.1
python-dateutil==2.8.2
six==1.16.0
tomli==2.0.1
typing_extensions==4.5.0
6 changes: 6 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[mypy]
ignore_missing_imports = True
disallow_incomplete_defs = True
disallow_untyped_calls = True
disallow_untyped_defs = True
exclude = tests
36 changes: 36 additions & 0 deletions tests/level_1.5/test_five_replace_word.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from functions.level_1_5.five_replace_word import replace_word


def replace_word(text: str, replace_from: str, replace_to: str) -> str:
words = text.split()

new_words = []
for word in words:
if word.lower() == replace_from.lower():
new_words.append(replace_to)
else:
new_words.append(word)

return ' '.join(new_words)


def test__replace_word__change_one_word():

text = "Говорил попугай попугаю: Я тебя попугай попугаю. Отвечает ему \
попугай : Попугай , попугай , попугай !"
replace_from = "Попугай"
replace_to = "воробей"

new_text = replace_word(text, replace_from, replace_to)

assert new_text == "Говорил воробей попугаю: Я тебя воробей попугаю. Отвечает ему воробей : воробей , воробей , воробей !"

def test__replace_word__no_changes():

text = "У елки иголки колки"
replace_from = "хвойное"
replace_to = "дерево"

new_text = replace_word(text, replace_from, replace_to)

assert new_text == "У елки иголки колки"
37 changes: 37 additions & 0 deletions tests/level_1.5/test_four_sentiment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from functions.level_1_5.four_sentiment import check_tweet_sentiment


def test__check_tweet_sentiment__GOOD_sentiment():

good_words = {'изумительно', 'очаровательно', 'исключительно'}
bad_words = {'идиотский', 'бездарный', 'бесталанный'}
text = 'Общая оценка: изумительно! Исключительно профессиональная работа. \
Очаровательно решительно все'

sentiment = check_tweet_sentiment(text, good_words, bad_words)

assert sentiment == "GOOD"


def test__check_tweet_sentiment__BAD_sentiment():

good_words = {'изумительно', 'очаровательно', 'исключительно'}
bad_words = {'идиотский', 'бездарный', 'бесталанный'}
text = 'Кто вел этот идиотский концерт? БЕЗДАРНЫЙ текст и \
бесталанный исполнитель'

sentiment = check_tweet_sentiment(text, good_words, bad_words)

assert sentiment == "BAD"


def test__check_tweet_sentiment__sarcastic_sentiment():

good_words = {'изумительно', 'очаровательно', 'исключительно'}
bad_words = {'идиотский', 'бездарный', 'бесталанный'}
text = "Изумительно бездарный фильм. Очаровательно бесталанный актер \
и исключительно идиотский сценарий"

sentiment = check_tweet_sentiment(text, good_words, bad_words)

assert sentiment is None
33 changes: 33 additions & 0 deletions tests/level_1.5/test_one_median.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from functions.level_1_5.one_median import get_median_value
import pytest


def test__get_median_value__no_items():

items = []

assert get_median_value(items) is None


def test__get_median_value__odd_number():

items = [11, 9, 3, 5, 7]

assert get_median_value(items) == 5


def test__get_median_value__even_number_less_then_6():

items = [1, 3, 5, 7]

with pytest.raises(Exception) as error:
get_median_value(items)

assert error.type == IndexError


def test__get_median_value__even_number_6_and_more():

items = [11, 9, 3, 5, 7, 6]

assert get_median_value(items) == 6
35 changes: 35 additions & 0 deletions tests/level_1.5/test_three_first.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from functions.level_1_5.three_first import first
import pytest


def test__first__items_not_zero_defaul_int():

items = [1, 2, 3]
default = 1

assert first(items, default) == 1


def test__first__items_not_zero_defaul_is_None():

items = [1, 2, 3]

assert first(items) == 1


def test__first__items_default_int():

items = []
default = 1

assert first(items, default) == 1


def test__first__items_is_None():

items = []

with pytest.raises(Exception) as error:
first(items)

assert error.type == AttributeError
91 changes: 91 additions & 0 deletions tests/level_1.5/test_two_squre_equation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
from functions.level_1_5.two_square_equation import solve_square_equation


def test__solve_square_equation__normal_input():

square_coefficient = 2
linear_coefficient = 2
const_coefficient = - 12

square_equation = solve_square_equation(
square_coefficient,
linear_coefficient,
const_coefficient
)

assert square_equation == (-3.0, 2.0)


def test__solve_square_equation__discriminant_below_zero():

square_coefficient = 1
linear_coefficient = 1
const_coefficient = 1

square_equation = solve_square_equation(
square_coefficient,
linear_coefficient,
const_coefficient
)

assert square_equation == (None, None)


def test__solve_square_equation__discriminant_is_zero():

square_coefficient = 1
linear_coefficient = 2
const_coefficient = 1

square_equation = solve_square_equation(
square_coefficient,
linear_coefficient,
const_coefficient
)

assert square_equation == (-1.0, -1.0)


def test__solve_square_equation__discriminant_is_zero():

square_coefficient = 1
linear_coefficient = 2
const_coefficient = 1

square_equation = solve_square_equation(
square_coefficient,
linear_coefficient,
const_coefficient
)

assert square_equation == (-1.0, -1.0)


def test__solve_square_equation__a_is_zero_b_is_zero():

square_coefficient = 0
linear_coefficient = 0
const_coefficient = 1

square_equation = solve_square_equation(
square_coefficient,
linear_coefficient,
const_coefficient
)

assert square_equation == (None, None)


def test__solve_square_equation__a_is_zero():

square_coefficient = 0
linear_coefficient = -2
const_coefficient = 2

square_equation = solve_square_equation(
square_coefficient,
linear_coefficient,
const_coefficient
)

assert square_equation == (1, None)
17 changes: 15 additions & 2 deletions tests/level_1/test_five_title.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
import re
from functions.level_1.five_title import change_copy_item


def test_change_copy_item():
pass
def test__change_copy_item__max_lenght_of_name():
assert change_copy_item("123", 1) == "123"


def test__change_copy_item__add_copy_of():
assert change_copy_item("Hi") == "Copy of Hi"


def test__change_copy_item__add_number_to_title():
assert change_copy_item("Copy of Hallou") == "Copy of Hallou (2)"


def test__change_copy_item__increase_number_of_copies():
assert change_copy_item("Copy of Hallou (3)") == "Copy of Hallou (4)"
Loading