Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lesson 8 #1851

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
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
12 changes: 12 additions & 0 deletions .idea/-algorithms_2021.iml

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

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.

1 change: 1 addition & 0 deletions .idea/.name

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

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.

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.

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

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


#############################################################################################
Expand All @@ -37,12 +37,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 @@ -53,14 +53,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
22 changes: 22 additions & 0 deletions Урок 1. Практическое задание/task_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,25 @@
Постарайтесь не использовать ф-ции min() и sort() и другие ф-ции!
Подход должен быть максимально алгоритмическим.
"""


def min_from_lst1(lst): #O(n^2)
min_a = None #O(1)
for i in range(len(lst)): #O(n)
for j in lst: #O(n)
if lst[i] > j: #O(1)
min_a = j #O(1)
return min_a #O(1)


def min_from_lst2(lst): # O(n)
min_a = lst[0] # O(1)
for i in lst: # O(n)
if i < min_a: # O(1)
min_a = i # O(1)
return min_a


lst1 = (12, 10, 5, 13, 3, 20)
print(min_from_lst1(lst1)) # O(1)
print(min_from_lst2(lst1)) # O(1)
37 changes: 37 additions & 0 deletions Урок 1. Практическое задание/task_3.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,41 @@
Прошу вас внимательно читать ТЗ и не забыть выполнить все пункты.

Задание творческое. Здесь нет жестких требований к выполнению.

Эффективнее решение номер 2 так как используется линейно-логарифмитическая функция(сортировка),
в первой используется квадратичная(двойной перебор)
"""
company = {'HP' : 1000000,
'Nvidia': 1500000,
'Intel': 750000,
'apple': 1750000,
'Lenovo': 350000}


def top_three(dict): # O(N^2)
sorted_values = sorted(dict.values()) # N log (N)
sorted_values = sorted_values[-3:] # O(N)
sorted_dict = {} # O(1)

for i in sorted_values: # O(N)
for k in dict.keys(): # O(N)
if dict[k] == i: # O(1)
sorted_dict[k] = dict[k] # O(1)
break # O(1)
return sorted_dict # o(1)


print(top_three(company))


def top_three2(dict): # N log (N)
sorted_dict = {} # O(1)
sorted_keys = sorted(dict, key=dict.get) # N log (N)
sorted_keys = sorted_keys[-3:] # O(N)

for i in sorted_keys: # O(N)
sorted_dict[i] = dict[i] # O(1)
return sorted_dict # O(1)


print(top_three2(company))
40 changes: 40 additions & 0 deletions Урок 1. Практическое задание/task_4.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,43 @@

Задание творческое. Здесь нет жестких требований к выполнению.
"""

profiles ={
'Roman': {'password': '123',
'activation': True},
'Sergey': {'password': '0000',
'activation': False},
'Dmitriy': {'password': '1111',
'activation': True}
}


def check_login(profiles, name, password):
for key, val in profiles.items():
if name == key:
if val['password'] == password and val['activation'] == True:
return 'Доступ разрешён'
elif val['password'] == password and val['activation'] == False:
return 'Пройдите активацию'
else:
return 'Не верный пароль'
else:
return 'Не верный логин'

# O(N)
print(check_login(profiles, 'Sergey', '0000'))


def check_login2(profiles, name, password):
if profiles[name] == name:
if profiles[name]['password'] == password and profiles[name]['activations'] == True:
return 'Доступ разрешён'
elif profiles[name]['password'] == password and profiles[name]['activations'] == False:
return 'Пройдите аутентификацию'
else:
return 'Не верный пароль'
else:
return 'Не верный логин'

# O(1)
print(check_login(profiles, 'Roman', '123'))
51 changes: 51 additions & 0 deletions Урок 2. Практическое задание/task_1.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,54 @@
Решите через рекурсию. Решение через цикл не принимается.
Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
"""

# enter = input('Введите операцию (+, -, *, / или 0 для выхода): ')
# while enter != '0':
# first_number = int(input('Введите первое число: '))
# second_number = int(input('Введите второе число: '))
# if enter == '+':
# result = first_number + second_number
# elif enter == '-':
# result = first_number - second_number
# elif enter == '*':
# result = first_number * second_number
# elif enter == '/':
# result = first_number / second_number
# print(result)
# enter = input('Введите операцию (+, -, *, / или 0 для выхода): ')


def calculator():
enter = input('Введите операцию (+, -, *, / или 0 для выхода): ')
if enter == '0':
return 'Exit'
elif enter in ['+', '-', '*', '/']:
try:
first_number = int(input('Введите первое число: '))
except ValueError:
print('Введено не число. Начнём сначала')
return calculator()
try:
second_number = int(input('Введите второе число: '))
except ValueError:
print('Введено не число. Начнём сначала')
return calculator()
if enter == '+':
result = first_number + second_number
elif enter == '-':
result = first_number - second_number
elif enter == '*':
result = first_number * second_number
elif enter == '/':
try:
result = first_number / second_number
except ZeroDivisionError:
print('Делить на 0 нельзя. Попробуйте снова.')
return calculator()
print('Ваш результат: ', result)
else:
return calculator()
return calculator()


print(calculator())
32 changes: 32 additions & 0 deletions Урок 2. Практическое задание/task_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,35 @@
Решите через рекурсию. Решение через цикл не принимается.
Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
"""

# number = int(input('Введите число: '))
# even = 0
# odd = 0
# while number >= 1:
# check = number % 10
# if check % 2 == 0:
# even += 1
# elif check % 2 == 1:
# odd += 1
# number //= 10
#
# print(even, odd)


def even_odd_count(number, even, odd):
if number < 1:
return f'Количество четных и нечетных цифр в числе равно: ({even}, {odd})'
else:
check = number % 10
if check % 2 == 0:
even += 1
elif check % 2 == 1:
odd += 1
number //= 10
return even_odd_count(number, even, odd)


number = int(input('Введите число: '))
even = 0
odd = 0
print(even_odd_count(number, even, odd))
21 changes: 21 additions & 0 deletions Урок 2. Практическое задание/task_3.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,24 @@
Решите через рекурсию. Решение через цикл не принимается.
Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
"""

number = 1230
# number_out = str()
# while number != 0:
# last_number = number % 10
# number_out += str(last_number)
# number //= 10
# print(number_out)


def reverse_number(number, number_out=str()):
if number == 0:
return number_out
else:
last_number = str(number % 10)
number //= 10
number_out += last_number
return number_out + reverse_number(number)


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

# a = int(input('Введите число: '))
# n = 1
# total = 0
#
# while a != 0:
# total += n
# n /= -2
# a -= 1
# print(total)


def count(repeat, total=0, n=1):
if repeat == 0:
return total
else:
total += n
n /= -2
return count(repeat-1, total, n)


repeat = int(input('Введите число: '))

print(f'Количество элементов: {repeat}, их сумма: {count(repeat)}')
29 changes: 29 additions & 0 deletions Урок 2. Практическое задание/task_6.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,32 @@
Решите через рекурсию. Решение через цикл не принимается.
Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7
"""

# answer = None
# number = 13
# while answer != number:
# answer = int(input('Угадай число: '))
# if answer == number:
# print("Ты выиграл!")
# elif answer > number:
# print("Загаданное число меньше")
# else:
# print("Загаданное число больше")


def guess_number(answer, number, attempt):
answer = int(input('Угадай число: '))
attempt -= 1
if answer == number:
return 'Ты выиграл'
elif attempt == 0:
return 'Попытки кончились'
elif answer > number:
print('Загаданное число меньше')
return guess_number(answer, number, attempt)
else:
print('Загаданное число больше')
return guess_number(answer, number, attempt)


print(guess_number(None, 13, 10))
Loading