Skip to content
Open

Dz2 #1277

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
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

454 changes: 454 additions & 0 deletions .idea/dbnavigator.xml

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions .idea/python_algos_gb.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 14 additions & 14 deletions Урок 1. Практическое задание/task_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ def check_1(lst_obj):
Алгоритм 3:
Создать множество из списка

Сложность: !!!.
Сложность: O(n)
"""
lst_to_set = set(lst_obj) # !!!
lst_to_set = set(lst_obj) # O(n)
return lst_to_set


Expand All @@ -41,12 +41,12 @@ def check_2(lst_obj):
что такой элемент отстутствует
в оставшихся справа элементах

Сложность: !!!.
Сложность: O(N^2)
"""
for j in range(len(lst_obj)): # !!!
if lst_obj[j] in lst_obj[j+1:]: # !!!
return False # !!!
return True # !!!
for j in range(len(lst_obj)): # O(N)
if lst_obj[j] in lst_obj[j+1:]: # O(N)
return False # O(1)
return True # O(1)


#############################################################################################
Expand All @@ -57,14 +57,14 @@ def check_3(lst_obj):
Вначале выполним для списка сортировку, далее, сравниваем элементы попарно
Если присутствуют дубли, они будут находиться рядом.

Сложность: !!!
Сложность: O(N Log N)
"""
lst_copy = list(lst_obj) # !!!
lst_copy.sort() # !!!
for i in range(len(lst_obj) - 1): # !!!
if lst_copy[i] == lst_copy[i+1]: # !!!
return False # !!!
return True # !!!
lst_copy = list(lst_obj) # O(N)
lst_copy.sort() # O(N Log N)
for i in range(len(lst_obj) - 1): # O(N)
if lst_copy[i] == lst_copy[i+1]: # O(1)
return False # O(1)
return True # O(1)

#############################################################################################

Expand Down
25 changes: 25 additions & 0 deletions Урок 1. Практическое задание/task_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,28 @@
Алгоритмизатор должен развивать мышление, а это прежде всего практика.
А без столкновения со сложностями его не развить.
"""
from random import randint


def check_min2(obj):
for i in obj:
minn = True
for j in obj:
if i > j:
minn = False
if minn:
return i


def check_min(obj):
minn = obj[0]
for i in obj:
if i < minn:
minn = i
return minn

lst = [randint(0, 1000) for i in range(40)]
print(lst)
print(check_min2(lst))
print(check_min(lst))
print(sorted(lst))
41 changes: 41 additions & 0 deletions Урок 1. Практическое задание/task_3.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,44 @@
Реализуйте поиск трех компаний с наибольшей годовой прибылью.
Выведите результат.
"""
compamy = {
'gazprom': 2000,
'navafarm': 300,
'microsoft': 3000,
'rosnano': 800,
'apple': 1500,
'adidas': 50
}


def sorted_n2(lst):
for i in range(len(lst)):
low_index = i
for j in range(i + 1, len(lst)):
if lst[j][1] > lst[low_index][1]:
low_index = j
lst[i], lst[low_index] = lst[low_index], lst[i]
return lst[0:3]


lst_dict = list(compamy.items())
for i in sorted_n2(lst_dict):
print(f'{i[0]} : {i[1]}')

print('=' * 20)


def sorted_n(lst):
max_value = {}
lstdict = dict(lst)
for i in range(3):
maximum = max(lstdict.items(), key=lambda key_val: key_val[1])
del lstdict[maximum[0]]
max_value[maximum[0]] = maximum[1]
return max_value


print(sorted_n(compamy))

'''лучшим вариантом будет функция sortetd_n так как имеет
минимальную вычислительную сложность'''
13 changes: 13 additions & 0 deletions Урок 1. Практическое задание/task_4.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,16 @@
Для реализации хранилища можно применить любой подход,
который вы придумаете, например, реализовать словарь.
"""
# сложность O(1)
def autorizacion(users, user_name, user_pass):
'''реализация проверки допуска к ресурсу'''
if users.get(user_name):
if users[user_name]['passowrd'] == user_pass and user_name['active']:
return 'Доступ разрешен'
elif users[user_name]['passowrd'] == user_pass and not user_name['active']:
return 'Необходимо войти в учетную запись'
elif users[user_name]['password'] != user_pass:
return 'Вы ввели не верный пароль'
else:
return "Пользователя не сущестует"
'''самая быстрая проверка которая пришла на ум. Быстрая потому что нет цикла'''
2 changes: 2 additions & 0 deletions Урок 1. Практическое задание/task_5.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,5 @@

После реализации структуры, проверьте ее работу на различных сценариях
"""


47 changes: 47 additions & 0 deletions Урок 1. Практическое задание/task_6.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,50 @@

После реализации структуры, проверьте ее работу на различных сценариях
"""
class Queueing:
def __init__(self):
self.elements = []

def is_null(self):
return self.elements == []

def to_queue(self, tasks):
self.elements.insert(0, tasks)

def from_queue(self):
return self.elements.pop()

def sized(self):
return len(self.elements)


class Board_task:
def __init__(self):
self.base_queue = Queueing()
self.queue_for_revision = Queueing()
self.list_of_completed = []

def perform_task(self):
task = self.base_queue.from_queue()
self.list_of_completed.append(task)


def for_revision_task(self):
task = self.queue_for_revision.from_queue()
self.queue_for_revision.to_queue(task)

def add_to_current(self, tasks):
self.base_queue.to_queue(tasks)

def from_revision(self):
task = self.queue_for_revision.from_queue()
self.base_queue.to_queue(task)

if __name__ == '__main__':
taskBoard = Board_task()
taskBoard.add_to_current("Здача1")
taskBoard.add_to_current("Здача2")
taskBoard.add_to_current("Здача3")
taskBoard.add_to_current("Здача4")
print(taskBoard.base_queue.elements)
print(taskBoard.from_revision())
47 changes: 47 additions & 0 deletions Урок 2. Практическое задание/task_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,50 @@
Вы вместо трехзначного числа ввели строку (((. Исправьтесь
Введите операцию (+, -, *, / или 0 для выхода):
"""
def func():
operator = input('Введите арифметический оператор или 0 для выхода:')

if operator == '0':
return 'stop'
else:
try:
if operator == operator:
number1 = int(input())
number2 = int(input())

if operator == '+':
result = number1 + number2
print(result)
return func()

elif operator == '/':
try:
result = number1 / number2
print(result)

except ZeroDivisionError:
print('Деление на 0 невозможно')
return func()

elif operator == '*':
result = number1 * number2
print(result)
return func()

elif operator == '-':
result = number1 - number2
print(result)
return func()

except ValueError:
print('Вы ввели строку. Попробуйте еще раз')
return func()

else:
print('Введен неверный орифметический оператор')
return func()

func()

# Проверка деления на 0 меня смущает. Ничего, что несколько блоков try/except в одной функции?
# это не увеличит время исполнения кода?

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

валидацию делать нужно
иначе будет ошибка

17 changes: 17 additions & 0 deletions Урок 2. Практическое задание/task_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,20 @@
Введите число: 123
Количество четных и нечетных цифр в числе равно: (1, 2)
"""


def func(number, even_number=0, not_even=0):
if number == 0:
return even_number, not_even
else:
numb = number % 10
number = number // 10
if numb % 2 == 0:
even_number += 1
else:
not_even += 1
return func(number, even_number, not_even)


number = int(input(' Введите число: '))
print(f'Количество четных и нечетных цифр в числе равно: {func(number)}')

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

выполнено как в примере

7 changes: 7 additions & 0 deletions Урок 2. Практическое задание/task_3.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,10 @@
Введите число, которое требуется перевернуть: 123
Перевернутое число: 321
"""

def revers_numb(number):
return str(number) if number < 10 else str(number % 10) + revers_numb(number // 10)


number = int(input("Введите число: "))
print(revers_numb(number))

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

выполнено как в примере

6 changes: 6 additions & 0 deletions Урок 2. Практическое задание/task_4.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,9 @@
Решите через рекурсию. Решение через цикл не принимается.
Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
"""
def func(number):
return 0 if number == 0 else 1 + func(number - 1) / - 2


count = int(input('Введите количество элементов: '))
print(f'Количество элементов - {count}, их сумма - {func(count)}')

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

выполнено как в примере

16 changes: 16 additions & 0 deletions Урок 2. Практическое задание/task_6.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,19 @@
Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
"""
import random
def func(count, number):

print(f'Попытка {count}')
user_number = int(input('Введите число от 0 до 100: '))
if count == 10 or user_number == number:
if user_number == number:
print("Верно!")
print(f"Загаданное число: {number}")
else:
if user_number > number:
print('Загаданное число меньше')
else:
print('Загаданное число больше')
func(count + 1, number)
func(1, random.randint(0, 100))

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

выполнено как в примере