Skip to content
Open
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
9 changes: 9 additions & 0 deletions Урок 3.Практическое задание/task_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,12 @@
В диапазоне 2-99: 12 чисел кратны 8
В диапазоне 2-99: 11 чисел кратны 9
"""
result = {}
for n in range(2, 10):
result[n] = []
for f in range(2, 100):
if f % n == 0:
result[n].append(f)
print(
f'Для числа {n} кратны - {len(result[n])}. Кратные числа: {result[n]}.'
)
11 changes: 11 additions & 0 deletions Урок 3.Практическое задание/task_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,14 @@
Пример:
Исходный массив: [8, 3, 15, 6, 4, 2], результат: [0, 3, 4, 5]
"""
import random

r = [random.randint(0, 99) for _ in range(10)]
print(f'Первый массив {r}')
index_even = []

for n in r:
if n % 2 == 0:
index_even.append(r.index(n))

print(f'Индексы чётных элементов первого массива: {index_even}')
17 changes: 17 additions & 0 deletions Урок 3.Практическое задание/task_3.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,20 @@
6 позиции, а минимальное число -49 стоит на 0 позиции
[-49, 26, 41, 75, 23, 52, 88, 60, 69, -18]
"""
import random

r = [random.randint(0, 99) for _ in range(10)]
print(f'Массив до изменения: {r}')

max = r[0]
min = r[0]

for i in r:
if i > max:
max = i
elif i < min:
min = i
min_index = r.index(min)
max_index = r.index(max)
r[min_index], r[max_index] = r[max_index], r[min_index]
print(f'Массив осле изменения элементов {min_index} и {max_index}: {r}')
11 changes: 11 additions & 0 deletions Урок 3.Практическое задание/task_4.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,14 @@

Подсказка: можно применить ф-цию max с параметром key
"""
import random

r = [random.randint(0, 99) for _ in range(100)]
print(f'Массив: {r}')

max_index = 0
for i in r:
if r.count(max_index) < r.count(i):
max_index = r.index(i)

print(f'Число {r[max_index]}, встречается {r.count(max_index)} раза')
16 changes: 16 additions & 0 deletions Урок 3.Практическое задание/task_5.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,19 @@
Базовый список: [-55, -69, -5, 72, -41, -58, -79, 58, 74, 1]
Максимальный отрицательный элемент в данном массиве = -5, его индекс 2
"""
import random

r = [random.randint(-99, 99) for _ in range(100)]
print(f'Массив: {r}')

min_index = 0

for i in r:
if r[min_index] > i:
min_index = r.index(i)

if r[min_index] >= 0:
print(f'В массиве нет отрицательных элементов')
else:
print(f'В массиве минимальный отрицательный элемент: {r[min_index]}.',
f'Находится в массиве на позиции {min_index}')
27 changes: 27 additions & 0 deletions Урок 3.Практическое задание/task_6.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,30 @@
Массив: [88, 58, 50, 77, 49, 6, 42, 67, 14, 79]
Сумма элементов между минимальным (6) и максимальным (88) элементами: 234
"""
import random

r = [random.randint(0, 99) for _ in range(10)]
print(f'Массив: {r}')

min_index = 0
max_index = 0
step = 1
sum = 0

for i in r:
if r[min_index] > i:
min_index = r.index(i)
elif r[max_index] < i:
max_index = r.index(i)

if max_index - min_index < 0:
step = -1

for i in r[min_index + step:max_index:step]:
sum += i
# print(f'DEBUG i={i}')

print(
f'Сумма элементов между минимальным ({r[min_index]})',
f' и максимальным ({r[max_index]}) элементами: {sum}'
)
26 changes: 26 additions & 0 deletions Урок 3.Практическое задание/task_7.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,29 @@
Наименьший элемент: -86, встречается в этом массиве 1 раз
Второй наименьший элемент: -73
"""
import random

r = [random.randint(0, 99) for _ in range(100)]
print(f'Массив: {r}')

min_index_1 = 0
min_index_2 = 1

for i in r:
if r[min_index_1] > i:
min_index_2 = min_index_1
min_index_1 = r.index(i)
elif r[min_index_2] > i:
min_index_2 = r.index(i)

print(f'Два наименьших элемента: {r[min_index_1]} и {r[min_index_2]}')

'''Второй способ через сортировку списка'''

sort_list = []
sort_list.extend(r)
sort_list.sort()

print(
f'Два наименьших элемента (второй способ): {sort_list[0]} и {sort_list[1]}'
)
62 changes: 62 additions & 0 deletions Урок 6. Практическое задание/task_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,65 @@
ВНИМАНИЕ: ЗАДАНИЯ, В КОТОРЫХ БУДУТ ГОЛЫЕ ЦИФРЫ ЗАМЕРОВ (БЕЗ АНАЛИТИКИ)
БУДУТ ПРИНИМАТЬСЯ С ОЦЕНКОЙ УДОВЛЕТВОРИТЕЛЬНО
"""
import sys
from memory_profiler import profile


@profile()
def my_slice(a):
print(sys.getrefcount(a[::-1]))
print(sys.getsizeof(a[::-1]))
return a[::-1]


@profile()
def my_reverse(a):
a = list(a)
i, j = 0, len(a) - 1
while i < j:
a[i], a[j] = a[j], a[i]
i += 1
j -= 1
print(sys.getsizeof(a))
print(sys.getrefcount(a))
return "".join(a)


@profile()
def my_recursion(a):
print(sys.getsizeof(a))
print(sys.getrefcount(a))
if len(a) == 1:
return a
else:
return a[-1] + my_recursion(a[:-1])


my_str = "123456789012345678901234567890"

print("Срез:")
print(my_slice(my_str))

print("Список:")
print(my_reverse(my_str))

print("Рекурсия:")
print(my_recursion(my_str))

"""
Количество ссылок на объект a:
my_slice: 1
my_reverse: 3
my_recursion: 12
Размер объекта a в байтах:
my_slice: 79
my_reverse: 376
my_recursion: 79
Выделено памяти на выполнение скрипта:
my_slice: 10.4 MiB
my_reverse: 10.5 MiB
my_recursion: 10.6 MiB
Скрипт my_slice - оптимальный по времени выполнения и по работе с памятью
python 2.7
OS - 64bit
"""
23 changes: 23 additions & 0 deletions Урок 7. Практическое задание/task_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,26 @@
Подсказка: обратите внимание, сортируем не по возрастанию, как в примере,
а по убыванию
"""
import random

LST_LEN = 10
random_lst = [random.randint(-100, 99) for i in range(LST_LEN)]


def bubble_sort(numb_arr):
a = numb_arr

len_arr = len(a)
for i in range(len_arr - 1):
counter = 0
for j in range(len_arr - 1 - i):
if a[j] < a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
counter += 1
if counter == 0:
break
return a


print(f'Исходный массив:\n{random_lst}\n')
print(f'Сортированный массив:\n{bubble_sort(random_lst)}')
40 changes: 40 additions & 0 deletions Урок 7. Практическое задание/task_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,43 @@
Исходный - [46.11436617832828, 41.62921998361278, 18.45859540989644, 12.128870723745806, 8.025098788570562]
Отсортированный - [8.025098788570562, 12.128870723745806, 18.45859540989644, 41.62921998361278, 46.11436617832828]
"""
import random

LST_LEN = 10
random_lst = [round(random.uniform(0, 49.99), 2) for i in range(LST_LEN)]


def merge_sort(lst):

if len(lst) <= 1:
return lst

left_side = merge_sort(lst[:len(lst) // 2])
right_side = merge_sort(lst[len(lst) // 2:])

i = j = 0
res = []

while i < len(left_side) or j < len(right_side):

if i >= len(left_side):
res.append(right_side[j])
j += 1

elif j >= len(right_side):
res.append(left_side[i])
i += 1

elif left_side[i] < right_side[j]:
res.append(left_side[i])
i += 1

else:
res.append(right_side[j])
j += 1

return res


print(f'Исходный массив:\n{random_lst}\n')
print(f'Сортированный массив:\n{merge_sort(random_lst)}')
19 changes: 19 additions & 0 deletions Урок 8. Практическое задание/task_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,22 @@

Итог: 6 подстрок
"""
s = 'papa'


def search_strings(s):
n = len(s)
arr_str = set()
for i in range(1, n):

for j in range(n - i + 1):

k = hash(s[j:j+i])

if k not in arr_str:
arr_str.add(k)

return len(arr_str)


print(f'Количество подстрок: {search_strings(s)}')
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

задание выполнено