Add Python notes
This commit is contained in:
0
.gitignore
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
cpp/programs/knapsack_rewritable_array.cpp
Normal file → Executable file
0
cpp/programs/knapsack_rewritable_array.cpp
Normal file → Executable file
0
cpp/programs/quick_primes.cpp
Normal file → Executable file
0
cpp/programs/quick_primes.cpp
Normal file → Executable file
0
cpp/programs/random.cpp
Normal file → Executable file
0
cpp/programs/random.cpp
Normal file → Executable file
0
cpp/programs/sort_merge.cpp
Normal file → Executable file
0
cpp/programs/sort_merge.cpp
Normal file → Executable file
0
cpp/programs/sort_quick.cpp
Normal file → Executable file
0
cpp/programs/sort_quick.cpp
Normal file → Executable file
0
cpp/Импортирование/main.cpp
Normal file → Executable file
0
cpp/Импортирование/main.cpp
Normal file → Executable file
0
cpp/Импортирование/test.cpp
Normal file → Executable file
0
cpp/Импортирование/test.cpp
Normal file → Executable file
0
cpp/Классы/main.cpp
Normal file → Executable file
0
cpp/Классы/main.cpp
Normal file → Executable file
0
cpp/Основы/ввод.cpp
Normal file → Executable file
0
cpp/Основы/ввод.cpp
Normal file → Executable file
0
cpp/Основы/вывод.cpp
Normal file → Executable file
0
cpp/Основы/вывод.cpp
Normal file → Executable file
0
cpp/Основы/комментарии.cpp
Normal file → Executable file
0
cpp/Основы/комментарии.cpp
Normal file → Executable file
0
cpp/Основы/переменные.cpp
Normal file → Executable file
0
cpp/Основы/переменные.cpp
Normal file → Executable file
0
cpp/Структуры/if.cpp
Normal file → Executable file
0
cpp/Структуры/if.cpp
Normal file → Executable file
0
cpp/Структуры/switch.cpp
Normal file → Executable file
0
cpp/Структуры/switch.cpp
Normal file → Executable file
0
cpp/Типы данных/atomic.cpp
Normal file → Executable file
0
cpp/Типы данных/atomic.cpp
Normal file → Executable file
0
cpp/Типы данных/hash_table.cpp
Normal file → Executable file
0
cpp/Типы данных/hash_table.cpp
Normal file → Executable file
0
cpp/Типы данных/set.cpp
Normal file → Executable file
0
cpp/Типы данных/set.cpp
Normal file → Executable file
0
cpp/Типы данных/векторы.cpp
Normal file → Executable file
0
cpp/Типы данных/векторы.cpp
Normal file → Executable file
0
cpp/Типы данных/массивы.cpp
Normal file → Executable file
0
cpp/Типы данных/массивы.cpp
Normal file → Executable file
0
cpp/Типы данных/строки.cpp
Normal file → Executable file
0
cpp/Типы данных/строки.cpp
Normal file → Executable file
0
cpp/Файлы/inp.txt
Normal file → Executable file
0
cpp/Файлы/inp.txt
Normal file → Executable file
0
cpp/Файлы/main.cpp
Normal file → Executable file
0
cpp/Файлы/main.cpp
Normal file → Executable file
0
cpp/Файлы/out.txt
Normal file → Executable file
0
cpp/Файлы/out.txt
Normal file → Executable file
0
cpp/Функции/main.cpp
Normal file → Executable file
0
cpp/Функции/main.cpp
Normal file → Executable file
0
cpp/Функции/аргументы.cpp
Normal file → Executable file
0
cpp/Функции/аргументы.cpp
Normal file → Executable file
0
cpp/Циклы/for.cpp
Normal file → Executable file
0
cpp/Циклы/for.cpp
Normal file → Executable file
0
cpp/Циклы/while.cpp
Normal file → Executable file
0
cpp/Циклы/while.cpp
Normal file → Executable file
4
python/sqlalchemy/core.py
Normal file → Executable file
4
python/sqlalchemy/core.py
Normal file → Executable file
@@ -64,7 +64,9 @@ with engine.begin() as conn:
|
|||||||
# SELECT
|
# SELECT
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
|
||||||
stmt = select(user_table).where(user_table.c.name == 'spongebob')
|
stmt = select(user_table).where(user_table.c.name == 'spongebob') # Where accepts binary expression
|
||||||
|
print('Where clause: ', user_table.c.name == 'spongebob')
|
||||||
|
print('Type of where clause: ', type(user_table.c.name == 'spongebob'))
|
||||||
with engine.connect() as conn:
|
with engine.connect() as conn:
|
||||||
for row in conn.execute(stmt):
|
for row in conn.execute(stmt):
|
||||||
print(row)
|
print(row)
|
||||||
|
|||||||
83
python/sqlalchemy/orm.py
Normal file → Executable file
83
python/sqlalchemy/orm.py
Normal file → Executable file
@@ -44,11 +44,86 @@ engine = create_engine("sqlite+pysqlite:///:memory:", future=True)
|
|||||||
Base.metadata.create_all(engine)
|
Base.metadata.create_all(engine)
|
||||||
|
|
||||||
|
|
||||||
|
session = Session(engine)
|
||||||
|
|
||||||
|
|
||||||
|
# INSERT
|
||||||
|
print('-----insert-----')
|
||||||
|
squidward = User(name="squidward", fullname="Squidward Tentacles")
|
||||||
|
krabs = User(name="ehkrabs", fullname="Eugene H. Krabs")
|
||||||
|
spongebob = User(name='spongebob', fullname='Spongebob Squarepants')
|
||||||
|
|
||||||
|
session.add(squidward)
|
||||||
|
session.add(krabs)
|
||||||
|
session.add(spongebob)
|
||||||
|
print('new: ', session.new)
|
||||||
|
|
||||||
|
saved_krabs = session.get(User, 2)
|
||||||
|
print('krabs: ', saved_krabs)
|
||||||
|
print('krabs is krabs: ', saved_krabs is krabs)
|
||||||
|
session.commit() # All changes are applied only after commit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# SELECT
|
# SELECT
|
||||||
|
print('-----select-----')
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
stmt = select(User).where(User.name == 'spongebob')
|
|
||||||
with Session(engine) as conn:
|
stmt = select(User)
|
||||||
for row in conn.execute(stmt):
|
first = session.execute(stmt).first()
|
||||||
print(row)
|
print(firs)
|
||||||
|
|
||||||
|
_all = session.execute(stmt).scalars().all()
|
||||||
|
print(_all)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# UPDATE
|
||||||
|
print('-----update-----')
|
||||||
|
from sqlalchemy import update
|
||||||
|
|
||||||
|
# Unit of work
|
||||||
|
squid = session.execute(select(User).filter_by(name='squidward')).scalar_one()
|
||||||
|
print('fetched squidward: ', squid)
|
||||||
|
squid.fullname = 'Squidward Octopus'
|
||||||
|
print('squid modified: ', squid in session.dirty)
|
||||||
|
print('new squid status: ', session.execute(select(User).where(User.name == 'squidward')).first())
|
||||||
|
|
||||||
|
# ORM enabled
|
||||||
|
session.execute(
|
||||||
|
update(User).
|
||||||
|
where(User.name == "squidward").
|
||||||
|
values(fullname="Sandy Octopus Extraordinaire")
|
||||||
|
)
|
||||||
|
print('Squid after bulk update: ', squid.fullname)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# DELETE
|
||||||
|
print('-----delete-----')
|
||||||
|
from sqlalchemy import delete
|
||||||
|
|
||||||
|
krabs = session.get(User, 2)
|
||||||
|
session.delete(krabs)
|
||||||
|
session.execute(select(User).where(User.name == "ehkrabs")).first()
|
||||||
|
print('Krabs present: ', krabs in session)
|
||||||
|
|
||||||
|
# orm-enabled
|
||||||
|
squidward = session.get(User, 1)
|
||||||
|
session.execute(delete(User).where(User.name == "squidward"))
|
||||||
|
print('Squidward present: ', squidward in session)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ROLLBACK
|
||||||
|
print('-----rollback-----')
|
||||||
|
print(squid.__dict__)
|
||||||
|
session.rollback()
|
||||||
|
print(squid.__dict__)
|
||||||
|
squid.fullname
|
||||||
|
print(squid.__dict__)
|
||||||
|
print('Krabs present: ', krabs in session)
|
||||||
|
|
||||||
|
|
||||||
|
session.close()
|
||||||
|
|||||||
122
python/графы/дейкстра.py
Executable file
122
python/графы/дейкстра.py
Executable file
@@ -0,0 +1,122 @@
|
|||||||
|
graph = {
|
||||||
|
1: {
|
||||||
|
2: 7,
|
||||||
|
3: 9,
|
||||||
|
6: 14
|
||||||
|
},
|
||||||
|
2: {
|
||||||
|
1: 7,
|
||||||
|
3: 10,
|
||||||
|
4: 15
|
||||||
|
},
|
||||||
|
3: {
|
||||||
|
1: 9,
|
||||||
|
2: 10,
|
||||||
|
4: 11,
|
||||||
|
6: 2
|
||||||
|
},
|
||||||
|
4: {
|
||||||
|
2: 15,
|
||||||
|
3: 11,
|
||||||
|
5: 6,
|
||||||
|
},
|
||||||
|
5: {
|
||||||
|
4: 6,
|
||||||
|
6: 9,
|
||||||
|
},
|
||||||
|
6: {
|
||||||
|
1: 14,
|
||||||
|
5: 9,
|
||||||
|
3: 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class GraphPoint:
|
||||||
|
def __init__(self, graph, number, routes):
|
||||||
|
self.graph = graph
|
||||||
|
self.number = number
|
||||||
|
self.routes = routes
|
||||||
|
self.visited = False
|
||||||
|
self.minimum_range = 9999
|
||||||
|
|
||||||
|
|
||||||
|
def get_unvisited_neighbours(self):
|
||||||
|
neighbours = []
|
||||||
|
for number in self.routes.keys():
|
||||||
|
point = self.graph.get_point(number)
|
||||||
|
if not point.visited:
|
||||||
|
neighbours.append(point)
|
||||||
|
return neighbours
|
||||||
|
|
||||||
|
|
||||||
|
def get_range(self, point):
|
||||||
|
return self.routes[point.number]
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_neighbours(self):
|
||||||
|
neighbours = [self.graph.get_point(x) for x in self.routes.keys()]
|
||||||
|
return neighbours
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Graph:
|
||||||
|
def __init__(self, data):
|
||||||
|
self.data = data
|
||||||
|
self.points = {}
|
||||||
|
|
||||||
|
for number, routes in data.items():
|
||||||
|
self.points[number] = GraphPoint(self, number, routes)
|
||||||
|
|
||||||
|
self.points[1].minimum_range = 0
|
||||||
|
|
||||||
|
|
||||||
|
def get_point(self, number):
|
||||||
|
point = self.points.get(number)
|
||||||
|
|
||||||
|
if point is None:
|
||||||
|
raise ValueError(f"Graph has no point with number {number}")
|
||||||
|
|
||||||
|
return point
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
myGraph = Graph(graph)
|
||||||
|
|
||||||
|
|
||||||
|
start = myGraph.get_point(1)
|
||||||
|
queue = []
|
||||||
|
queue.append(start)
|
||||||
|
|
||||||
|
|
||||||
|
while len(queue) > 0:
|
||||||
|
current_point = min(queue, key=lambda x: x.minimum_range)
|
||||||
|
queue.remove(current_point)
|
||||||
|
current_point.visited = True
|
||||||
|
|
||||||
|
for neighbour in current_point.get_unvisited_neighbours():
|
||||||
|
new_range = current_point.minimum_range + current_point.get_range(neighbour)
|
||||||
|
|
||||||
|
if new_range < neighbour.minimum_range:
|
||||||
|
neighbour.minimum_range = new_range
|
||||||
|
|
||||||
|
queue.append(neighbour)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
path = []
|
||||||
|
pos = myGraph.get_point(5)
|
||||||
|
|
||||||
|
|
||||||
|
while pos != start:
|
||||||
|
for neighbour in pos.get_all_neighbours():
|
||||||
|
if neighbour.get_range(pos) + neighbour.minimum_range == pos.minimum_range:
|
||||||
|
path.append(pos)
|
||||||
|
pos = neighbour
|
||||||
|
break
|
||||||
|
|
||||||
|
path.append(start)
|
||||||
|
|
||||||
|
for i in path[::-1]:
|
||||||
|
print(i.number)
|
||||||
|
# No comments here. Good l_ck!
|
||||||
176
python/графы/поиск в глубину.py
Executable file
176
python/графы/поиск в глубину.py
Executable file
@@ -0,0 +1,176 @@
|
|||||||
|
# Матрица смежности
|
||||||
|
# [y][x] - существование пути (ребра) из y в x (опционально - вместо существования bool вес int)
|
||||||
|
# При нумерации с 1 при этом методе существует несоответствие номеров узлов и индексов (индекс = номер - 1)
|
||||||
|
graph = (
|
||||||
|
(0, 1, 1, 0, 0, 0, 1),
|
||||||
|
(1, 0, 1, 1, 0, 0, 0),
|
||||||
|
(1, 1, 0, 0, 0, 0, 0),
|
||||||
|
(0, 1, 0, 0, 1, 0, 0),
|
||||||
|
(0, 0, 0, 1, 0, 1, 0),
|
||||||
|
(0, 0, 0, 0, 1, 0, 1),
|
||||||
|
(1, 0, 0, 0, 0, 1, 0)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Поиск в глубину
|
||||||
|
|
||||||
|
visited_nodes = [0, 0, 0, 0, 0, 0, 0] # 1 - обнаружена, 2 - посещена
|
||||||
|
|
||||||
|
queue = [] # Список узлов, которые нужно посетить
|
||||||
|
queue.append(0) # Стартовый узел
|
||||||
|
|
||||||
|
while len(queue): # Пока есть узлы, которые надо посетить
|
||||||
|
node1 = queue.pop(-1)
|
||||||
|
visited_nodes[node1] = 2
|
||||||
|
|
||||||
|
for node2 in range(6, -1, -1): # С последнего к первому. от 6 до 0 включительно
|
||||||
|
if graph[node1][node2] == 1 and visited_nodes[node2] == 0: # Узел смежный и не обнаружен
|
||||||
|
queue.append(node2)
|
||||||
|
visited_nodes[node2] = 1
|
||||||
|
|
||||||
|
|
||||||
|
# Поиск первого пути в невзвешенном графе (из точки 3 в 5)
|
||||||
|
|
||||||
|
class Edge:
|
||||||
|
def __init__(self, begin, end):
|
||||||
|
self.begin = begin
|
||||||
|
self.end = end
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"Edge({self.begin + 1}, {self.end + 1})"
|
||||||
|
|
||||||
|
|
||||||
|
def find_edges(graph, starting_point, stopping_point):
|
||||||
|
visited_nodes = [0, 0, 0, 0, 0, 0, 0] # 1 - обнаружена, 2 - посещена
|
||||||
|
edges = []
|
||||||
|
|
||||||
|
queue = [] # Список узлов, которые нужно посетить
|
||||||
|
queue.append(starting_point) # Стартовый узел
|
||||||
|
while len(queue): # Пока есть узлы, которые надо посетить
|
||||||
|
node1 = queue.pop(-1)
|
||||||
|
visited_nodes[node1] = 2
|
||||||
|
print('Checking node %s' % node1)
|
||||||
|
|
||||||
|
for node2 in range(6, -1, -1):
|
||||||
|
print(f'Checking path to {node2}')
|
||||||
|
if graph[node1][node2] == 1 and visited_nodes[node2] == 0: # Узел смежный и не обнаружен
|
||||||
|
print('Path exists and is undetected. Saving')
|
||||||
|
|
||||||
|
queue.append(node2)
|
||||||
|
visited_nodes[node2] = 1
|
||||||
|
edges.append(Edge(node1, node2))
|
||||||
|
|
||||||
|
if node2 == stopping_point:
|
||||||
|
print('Found stop, returning')
|
||||||
|
return edges
|
||||||
|
|
||||||
|
return edges
|
||||||
|
|
||||||
|
|
||||||
|
start = 2
|
||||||
|
req = 4
|
||||||
|
edges = find_edges(graph, start, req)
|
||||||
|
|
||||||
|
print('\nResulting list: ')
|
||||||
|
for i in edges:
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
print("\nPath:")
|
||||||
|
while len(edges):
|
||||||
|
edge = edges.pop(-1)
|
||||||
|
if edge.end == req:
|
||||||
|
req = edge.begin
|
||||||
|
print(edge)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ==================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Список смежности
|
||||||
|
# ключ - номер узла, значение - список узлов, с которыми есть связь
|
||||||
|
print('\n\n\n\n\n\nСписок смежности')
|
||||||
|
|
||||||
|
graph = {
|
||||||
|
1: (2, 3, 7),
|
||||||
|
2: (1, 3, 4),
|
||||||
|
3: (1, 2),
|
||||||
|
4: (2, 5),
|
||||||
|
5: (4, 6),
|
||||||
|
6: (5, 7),
|
||||||
|
7: (1, 6)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Поиск в глубину
|
||||||
|
visited_nodes = [0, 0, 0, 0, 0, 0, 0] # 1 - обнаружена, 2 - посещена
|
||||||
|
|
||||||
|
queue = []
|
||||||
|
queue.append(1)
|
||||||
|
|
||||||
|
while len(queue):
|
||||||
|
node1 = queue.pop(-1)
|
||||||
|
visited_nodes[node1 - 1] = 2
|
||||||
|
|
||||||
|
for node2 in graph.get(node1)[::-1]:
|
||||||
|
# Проверка на смежность в этом методе не нужна, потому что в списке уже содержатся смежные узлы.
|
||||||
|
if visited_nodes[node2 - 1] == 0:
|
||||||
|
visited_nodes[node2 - 1] = 1
|
||||||
|
queue.append(node2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Поиск первого пути в невзвешенном графе (из точки 3 в 5)
|
||||||
|
|
||||||
|
class Edge:
|
||||||
|
def __init__(self, begin, end):
|
||||||
|
self.begin = begin
|
||||||
|
self.end = end
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"Edge({self.begin}, {self.end})"
|
||||||
|
|
||||||
|
|
||||||
|
def find_edges(graph, starting_point, stopping_point):
|
||||||
|
visited_nodes = [0, 0, 0, 0, 0, 0, 0] # 1 - обнаружена, 2 - посещена
|
||||||
|
|
||||||
|
queue = []
|
||||||
|
queue.append(starting_point)
|
||||||
|
edges = []
|
||||||
|
|
||||||
|
while len(queue):
|
||||||
|
node1 = queue.pop(-1)
|
||||||
|
visited_nodes[node1 - 1] = 2
|
||||||
|
print(f'Checking node {node1}')
|
||||||
|
|
||||||
|
for node2 in graph.get(node1)[::-1]:
|
||||||
|
print(f'Checking existing path to {node2}')
|
||||||
|
# Проверка на смежность в этом методе не нужна, потому что в списке уже содержатся смежные узлы.
|
||||||
|
if visited_nodes[node2 - 1] == 0:
|
||||||
|
print('Path is undetected. Saving')
|
||||||
|
|
||||||
|
visited_nodes[node2 - 1] = 1
|
||||||
|
queue.append(node2)
|
||||||
|
edges.append(Edge(node1, node2))
|
||||||
|
|
||||||
|
if node2 == stopping_point:
|
||||||
|
print('Found stop, returning')
|
||||||
|
return edges
|
||||||
|
|
||||||
|
return edges
|
||||||
|
|
||||||
|
|
||||||
|
start = 3
|
||||||
|
req = 5
|
||||||
|
edges = find_edges(graph, start, req)
|
||||||
|
print('\nResulting list: ')
|
||||||
|
for i in edges:
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
print("\nPath:")
|
||||||
|
while len(edges):
|
||||||
|
edge = edges.pop(-1)
|
||||||
|
if edge.end == req:
|
||||||
|
req = edge.begin
|
||||||
|
print(edge)
|
||||||
178
python/графы/поиск в ширину.py
Executable file
178
python/графы/поиск в ширину.py
Executable file
@@ -0,0 +1,178 @@
|
|||||||
|
# Матрица смежности
|
||||||
|
# [y][x] - существование пути (ребра) из y в x (опционально - вместо существования bool вес int)
|
||||||
|
# При нумерации с 1 при этом методе существует несоответствие номеров узлов и индексов (индекс = номер - 1)
|
||||||
|
graph = (
|
||||||
|
(0, 1, 1, 0, 0, 0, 1),
|
||||||
|
(1, 0, 1, 1, 0, 0, 0),
|
||||||
|
(1, 1, 0, 0, 0, 0, 0),
|
||||||
|
(0, 1, 0, 0, 1, 0, 0),
|
||||||
|
(0, 0, 0, 1, 0, 1, 0),
|
||||||
|
(0, 0, 0, 0, 1, 0, 1),
|
||||||
|
(1, 0, 0, 0, 0, 1, 0)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Поиск в ширину
|
||||||
|
|
||||||
|
visited_nodes = [0, 0, 0, 0, 0, 0, 0] # 1 - обнаружена, 2 - посещена
|
||||||
|
|
||||||
|
queue = [] # Список узлов, которые нужно посетить
|
||||||
|
queue.append(0) # Стартовый узел
|
||||||
|
|
||||||
|
while len(queue): # Пока есть узлы, которые надо посетить
|
||||||
|
node1 = queue.pop(0)
|
||||||
|
visited_nodes[node1] = 2
|
||||||
|
|
||||||
|
for node2 in range(7):
|
||||||
|
if graph[node1][node2] == 1 and visited_nodes[node2] == 0: # Узел смежный и не обнаружен
|
||||||
|
queue.append(node2)
|
||||||
|
visited_nodes[node2] = 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Поиск кратчайшего пути в невзвешенном графе (из точки 3 в 5)
|
||||||
|
|
||||||
|
class Edge:
|
||||||
|
def __init__(self, begin, end):
|
||||||
|
self.begin = begin
|
||||||
|
self.end = end
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"Edge({self.begin + 1}, {self.end + 1})"
|
||||||
|
|
||||||
|
|
||||||
|
def find_edges(graph, starting_point, stopping_point):
|
||||||
|
visited_nodes = [0, 0, 0, 0, 0, 0, 0] # 1 - обнаружена, 2 - посещена
|
||||||
|
edges = []
|
||||||
|
|
||||||
|
queue = [] # Список узлов, которые нужно посетить
|
||||||
|
queue.append(starting_point) # Стартовый узел
|
||||||
|
while len(queue): # Пока есть узлы, которые надо посетить
|
||||||
|
node1 = queue.pop(0)
|
||||||
|
visited_nodes[node1] = 2
|
||||||
|
print('Checking node %s' % node1)
|
||||||
|
|
||||||
|
for node2 in range(7):
|
||||||
|
print(f'Checking path to {node2}')
|
||||||
|
if graph[node1][node2] == 1 and visited_nodes[node2] == 0: # Узел смежный и не обнаружен
|
||||||
|
print('Path exists and is undetected. Saving')
|
||||||
|
|
||||||
|
queue.append(node2)
|
||||||
|
visited_nodes[node2] = 1
|
||||||
|
edges.append(Edge(node1, node2))
|
||||||
|
|
||||||
|
if node2 == stopping_point:
|
||||||
|
print('Found stop, returning')
|
||||||
|
return edges
|
||||||
|
|
||||||
|
return edges
|
||||||
|
|
||||||
|
|
||||||
|
start = 2
|
||||||
|
req = 4
|
||||||
|
edges = find_edges(graph, start, req)
|
||||||
|
|
||||||
|
print('\nResulting list: ')
|
||||||
|
for i in edges:
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
print("\nPath:")
|
||||||
|
while len(edges):
|
||||||
|
edge = edges.pop(-1)
|
||||||
|
if edge.end == req:
|
||||||
|
req = edge.begin
|
||||||
|
print(edge)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ==================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Список смежности
|
||||||
|
# ключ - номер узла, значение - список узлов, с которыми есть связь
|
||||||
|
print('\n\n\n\n\n\nСписок смежности')
|
||||||
|
|
||||||
|
graph = {
|
||||||
|
1: (2, 3, 7),
|
||||||
|
2: (1, 3, 4),
|
||||||
|
3: (1, 2),
|
||||||
|
4: (2, 5),
|
||||||
|
5: (4, 6),
|
||||||
|
6: (5, 7),
|
||||||
|
7: (1, 6)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Поиск в ширину
|
||||||
|
visited_nodes = [0, 0, 0, 0, 0, 0, 0] # 1 - обнаружена, 2 - посещена
|
||||||
|
|
||||||
|
queue = []
|
||||||
|
queue.append(1)
|
||||||
|
|
||||||
|
while len(queue):
|
||||||
|
node1 = queue.pop()
|
||||||
|
visited_nodes[node1 - 1] = 2
|
||||||
|
|
||||||
|
for node2 in graph.get(node1):
|
||||||
|
# Проверка на смежность в этом методе не нужна, потому что в списке уже содержатся смежные узлы.
|
||||||
|
if visited_nodes[node2 - 1] == 0:
|
||||||
|
visited_nodes[node2 - 1] = 1
|
||||||
|
queue.append(node2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Поиск кратчайшего пути в невзвешенном графе (из точки 3 в 5)
|
||||||
|
|
||||||
|
class Edge:
|
||||||
|
def __init__(self, begin, end):
|
||||||
|
self.begin = begin
|
||||||
|
self.end = end
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"Edge({self.begin}, {self.end})"
|
||||||
|
|
||||||
|
|
||||||
|
def find_edges(graph, starting_point, stopping_point):
|
||||||
|
visited_nodes = [0, 0, 0, 0, 0, 0, 0] # 1 - обнаружена, 2 - посещена
|
||||||
|
|
||||||
|
queue = []
|
||||||
|
queue.append(starting_point)
|
||||||
|
edges = []
|
||||||
|
|
||||||
|
while len(queue):
|
||||||
|
node1 = queue.pop(0)
|
||||||
|
visited_nodes[node1 - 1] = 2
|
||||||
|
print(f'Checking node {node1}')
|
||||||
|
|
||||||
|
for node2 in graph.get(node1):
|
||||||
|
print(f'Checking existing path to {node2}')
|
||||||
|
# Проверка на смежность в этом методе не нужна, потому что в списке уже содержатся смежные узлы.
|
||||||
|
if visited_nodes[node2 - 1] == 0:
|
||||||
|
print('Path is undetected. Saving')
|
||||||
|
|
||||||
|
visited_nodes[node2 - 1] = 1
|
||||||
|
queue.append(node2)
|
||||||
|
edges.append(Edge(node1, node2))
|
||||||
|
|
||||||
|
if node2 == stopping_point:
|
||||||
|
print('Found stop, returning')
|
||||||
|
return edges
|
||||||
|
|
||||||
|
return edges
|
||||||
|
|
||||||
|
|
||||||
|
start = 3
|
||||||
|
req = 5
|
||||||
|
edges = find_edges(graph, start, req)
|
||||||
|
print('\nResulting list: ')
|
||||||
|
for i in edges:
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
print("\nPath:")
|
||||||
|
while len(edges):
|
||||||
|
edge = edges.pop(-1)
|
||||||
|
if edge.end == req:
|
||||||
|
req = edge.begin
|
||||||
|
print(edge)
|
||||||
40
python/классы/class.py
Executable file
40
python/классы/class.py
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
class car:
|
||||||
|
name = "None"
|
||||||
|
weight = 1000
|
||||||
|
speed = 200
|
||||||
|
|
||||||
|
#__init__ нужен, чтобы сразу задать объекту нужные параметры
|
||||||
|
#Инициализация при создании
|
||||||
|
def __init__(self, name, weight, speed):
|
||||||
|
self.name = name
|
||||||
|
self.weight = weight
|
||||||
|
self.speed = speed
|
||||||
|
print(f"{self.name} едет со скоростью {self.speed}")
|
||||||
|
|
||||||
|
#self необходим для того, Чтобы отличать методы от функций, которые не привязаны к какому-то классу/объекту,
|
||||||
|
#поддерживать полиморфизм. Self - это что-то типа параметра метода.
|
||||||
|
def set(self, name, weight, speed):
|
||||||
|
self.name = name
|
||||||
|
self.weight = weight
|
||||||
|
self.speed = speed
|
||||||
|
|
||||||
|
#Класс наследник создаётся так:
|
||||||
|
class truck(car):
|
||||||
|
wheels = 8
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
man = truck()
|
||||||
|
man.wheels = 12
|
||||||
|
print(man.wheels)
|
||||||
|
#классы - наследники имеют доступ к методам из оригинального класса
|
||||||
|
man.set(weight = 10000, name = "Man", speed = 200)
|
||||||
|
|
||||||
|
Audi = car("Audi", 2000, 320)
|
||||||
|
Audi.set(weight = 2000, name = "Audi", speed = 320)
|
||||||
|
print(Audi.name)
|
||||||
|
|
||||||
|
Shkoda = car("Shkoda", 1800, 235)
|
||||||
|
Shkoda.set(weight = 1800, name = "Shkoda", speed = 235)
|
||||||
|
print (Shkoda.name)
|
||||||
3
python/модули/from.py
Executable file
3
python/модули/from.py
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#Можно подключить только 1 функцию из модуля
|
||||||
|
from random import randint as random
|
||||||
|
print(random(1,20))
|
||||||
16
python/модули/модули.py
Executable file
16
python/модули/модули.py
Executable file
@@ -0,0 +1,16 @@
|
|||||||
|
#Подключение модуля, связанного с математикой
|
||||||
|
import math
|
||||||
|
#as позволяет в будущем использовать модуль при помощи псевдонима
|
||||||
|
import random as r
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#вывод числа e
|
||||||
|
print(math.e)
|
||||||
|
#вывод числа пи
|
||||||
|
print(math.pi)
|
||||||
|
#вывод косинуса
|
||||||
|
print(math.cos(30))
|
||||||
|
|
||||||
|
|
||||||
|
print(r.randint(0, 20))
|
||||||
13
python/основы/if.py
Executable file
13
python/основы/if.py
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
num = int (input ("Number: "))
|
||||||
|
|
||||||
|
#Операции с переменными в if: >, <, ==, !=, >=, <=
|
||||||
|
if num > 0:
|
||||||
|
print('Положительное')
|
||||||
|
#Elif это следующий if, который выполняется если предыдущей неверный.
|
||||||
|
elif num == 0:
|
||||||
|
print('Равно 0')
|
||||||
|
#Else выплняется если ни if, ни один из elseif не являются верными
|
||||||
|
else:
|
||||||
|
print('Отрицательное')
|
||||||
|
|
||||||
|
input()
|
||||||
20
python/основы/действия.py
Executable file
20
python/основы/действия.py
Executable file
@@ -0,0 +1,20 @@
|
|||||||
|
#сложение
|
||||||
|
print (2+3)
|
||||||
|
|
||||||
|
#вычитание
|
||||||
|
print (6-8)
|
||||||
|
|
||||||
|
#умножение
|
||||||
|
print (6*2)
|
||||||
|
|
||||||
|
#деление
|
||||||
|
print (9/3)
|
||||||
|
|
||||||
|
#возведение в степень
|
||||||
|
print (3**5)
|
||||||
|
|
||||||
|
#деление без остатка
|
||||||
|
print (11//3)
|
||||||
|
|
||||||
|
#Остаток деления
|
||||||
|
print(3%2)
|
||||||
55
python/основы/переменные.py
Executable file
55
python/основы/переменные.py
Executable file
@@ -0,0 +1,55 @@
|
|||||||
|
name = "Oleg"
|
||||||
|
|
||||||
|
#К строковым переменным применимы действия, подразумевающие порядок расположения
|
||||||
|
print(f'длина {len(name)}')
|
||||||
|
print(f'Буква {name[0]}')
|
||||||
|
|
||||||
|
#Методы, уникальные для строк:
|
||||||
|
print(name.find('le')) #Поиск позиции
|
||||||
|
Fname = name.replace('eg', 'ga') #Замена позиции
|
||||||
|
print(Fname)
|
||||||
|
print(name.upper()) #Преобразование регистра
|
||||||
|
print(name.isalpha()) #Проверяет, все ли символы - буквы
|
||||||
|
print('214'.isdigit()) #Проверяет, все ли символы - цифры
|
||||||
|
|
||||||
|
#f нужна, чтобы выводить переменные
|
||||||
|
print(f'My name is {name}')
|
||||||
|
|
||||||
|
#Но можно обойтись и без неё
|
||||||
|
print("My name is", name)
|
||||||
|
|
||||||
|
#input значит, что переменной присвоятся введенные с клавиатуры данные
|
||||||
|
#("") после input выводит надпись, прямо после которой будет осуществляться ввод (Enter: 4)
|
||||||
|
#Чтобы надпись не выводилась, скобки нужно оставить пустыми. Но сами скобки обязательны
|
||||||
|
num = input("Enter1: ")
|
||||||
|
num2 = input("Enter2: ")
|
||||||
|
#здесь вводятся данные типа string, поэтому при использовании + они присоединяются
|
||||||
|
res = num + num2
|
||||||
|
print(res)
|
||||||
|
|
||||||
|
|
||||||
|
#для использования integer нужно использовать int()
|
||||||
|
num = int(input("Enter1: "))
|
||||||
|
num2 = int( input("Enter2: "))
|
||||||
|
res = num + num2
|
||||||
|
print(res)
|
||||||
|
|
||||||
|
|
||||||
|
#float() позволяет вводить десятичные числа
|
||||||
|
num = float(input("Enter1: "))
|
||||||
|
num2 = float( input("Enter2: "))
|
||||||
|
res = num + num2
|
||||||
|
print(res)
|
||||||
|
|
||||||
|
|
||||||
|
# += 20 - прибавить 20 к переменной, так же и с остальными действиями
|
||||||
|
res += 20
|
||||||
|
print(f'E1+E2+20={res}')
|
||||||
|
res = num + num2
|
||||||
|
res -= 20
|
||||||
|
print(f'E1+E2-20={res}')
|
||||||
|
|
||||||
|
print(res)
|
||||||
|
res -= 1
|
||||||
|
print(res)
|
||||||
|
input()
|
||||||
2
python/основы/преобразование в десятичную сист.py
Executable file
2
python/основы/преобразование в десятичную сист.py
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
print(int(bin(11), 2))
|
||||||
|
#число в двоичной системе (bin(11)) преобразовывается в целое число с указанием основы системы (2)
|
||||||
48
python/основы/форматирование.py
Executable file
48
python/основы/форматирование.py
Executable file
@@ -0,0 +1,48 @@
|
|||||||
|
#Слева указать спецификаторы после знака %, справа указать то, на что эти спецификаторы заменить
|
||||||
|
#d = десятичное число, s = строка
|
||||||
|
formating = "That's %d %s bird" % (1, "dead")
|
||||||
|
print(formating)
|
||||||
|
|
||||||
|
x = 1234
|
||||||
|
#%[(name)][flags][width][.precision]спец
|
||||||
|
# name = ключ в словаре. При указании * для width и precision значение возьмётся из элемента в списке входных значений
|
||||||
|
#-10 = отступ слева. при указании отриц. числа превращается в отступ справа
|
||||||
|
#06 = поле становится равным 6 и добавляются вводные нули вместо отсутпа
|
||||||
|
res = "integers: ...%d...%-10d...%06d" % (x, x, x)
|
||||||
|
print(res)
|
||||||
|
|
||||||
|
#f = вещественное число
|
||||||
|
#. используется для определения кол-ва знаков после запятой
|
||||||
|
res = "%f...%.2f" % (1/3.0, 1/3.0)
|
||||||
|
print(res)
|
||||||
|
|
||||||
|
#Использование словаря:
|
||||||
|
formating = "%(number)d %(text)s" % {"number" : 1, "text" : "spam"}
|
||||||
|
print("\n", formating)
|
||||||
|
|
||||||
|
#*****************************************Методы форматирования*****************************************
|
||||||
|
|
||||||
|
#Могут использоваться именованные аргументы или номера аргументов
|
||||||
|
template = "{motto}, {0} and {food}"
|
||||||
|
print(template.format("ham", motto="spam", food="eggs"))
|
||||||
|
|
||||||
|
import sys
|
||||||
|
#Для ссылки на объект в словаре необходимо указать положение словаря в списке входных значений (1) и ключ объекта в квадратных скобках [spam]
|
||||||
|
#Для ссылки на атрибут объекта нужно применить точку (.platform)
|
||||||
|
template = "My {1[spam]} runs {0.platform}".format(sys, {"spam": "laptop"})
|
||||||
|
print(template)
|
||||||
|
|
||||||
|
somelist = list("spam")
|
||||||
|
#Использование отрицательных значений внутри строки формата приводит к ошибке
|
||||||
|
#Также нельзя создавать срезы внутри строки формата
|
||||||
|
#Поэтому объект нужно указать вне строки. |
|
||||||
|
template = "first = {0[0]}, last = {1}".format(somelist, somelist[-1])
|
||||||
|
print(template)
|
||||||
|
|
||||||
|
#Синтаксис точного форматирования: {fieldname!conversionflag:formatspec}
|
||||||
|
#Синтаксис formatspec: [[fill]align][sign][#][0][width][.precision][typecode] (В квадратных скобках необязательные компоненты)
|
||||||
|
#< = выравнивание слева, > = выравнивание справа
|
||||||
|
print("\n{0:>10} = {1:<10}".format("spam", 123.4567))
|
||||||
|
|
||||||
|
#Извлечение значения из списка аргументов:
|
||||||
|
print("{0:.{1}f}".format(3.14159, 2))
|
||||||
75
python/списки/list.py
Executable file
75
python/списки/list.py
Executable file
@@ -0,0 +1,75 @@
|
|||||||
|
#В списки можно втроить другие списки
|
||||||
|
#Индекс первого элемента - 0
|
||||||
|
lis = [23, 15, 's', ['h', 'e', '1',]]
|
||||||
|
print(lis)
|
||||||
|
print(lis[2])
|
||||||
|
print(lis[3])
|
||||||
|
print(lis[3][1])
|
||||||
|
print("\n")
|
||||||
|
|
||||||
|
|
||||||
|
for i in lis:
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
|
||||||
|
for i in range(0, 4):
|
||||||
|
lis[i] *= 2
|
||||||
|
print(lis)
|
||||||
|
|
||||||
|
#Добавление элемента в список
|
||||||
|
lis.append(2011)
|
||||||
|
print(lis)
|
||||||
|
|
||||||
|
#Удаление элемента из списка
|
||||||
|
#по значению
|
||||||
|
lis.remove(46)
|
||||||
|
print(lis)
|
||||||
|
#по индексу
|
||||||
|
lis.pop(0)
|
||||||
|
print(lis)
|
||||||
|
|
||||||
|
#Вставка элемента в определённое место
|
||||||
|
#1 - индекс, 9 - элемент
|
||||||
|
lis.insert(1, 9)
|
||||||
|
print(lis)
|
||||||
|
|
||||||
|
#Узнать индекс элемента
|
||||||
|
print(lis.index(9))
|
||||||
|
|
||||||
|
#Вывод элементов в конце списка
|
||||||
|
print("Индекс числа", lis[-1]," = ", lis.index(2011))
|
||||||
|
|
||||||
|
#Вывод определённой части списка (Среза) (Старт:финиш:шаг)
|
||||||
|
print(lis[1:-2:1])
|
||||||
|
print(lis[2:])
|
||||||
|
print(lis[2:len(lis)])
|
||||||
|
|
||||||
|
#Очистка списка
|
||||||
|
lis.clear()
|
||||||
|
print(lis)
|
||||||
|
|
||||||
|
#В списки можно вкладывать списки, тем самым создавая матрицы
|
||||||
|
M = [[1, 2, 3],
|
||||||
|
[4, 5, 6],
|
||||||
|
[7, 8, 9]]
|
||||||
|
print('\n', M)
|
||||||
|
|
||||||
|
#Генератор, возвращающий суммы элементов строк
|
||||||
|
G = (sum(elements) for elements in M)
|
||||||
|
#Вызов в соответствии с протоколом итераций
|
||||||
|
print(next(G))
|
||||||
|
print(next(G))
|
||||||
|
#То же, но по другому
|
||||||
|
summ = list(map(sum, M))
|
||||||
|
print(summ)
|
||||||
|
|
||||||
|
#Вывод столбца
|
||||||
|
#Получить элементы row[1] из каждой строки матрицы M исоздать из них новый список
|
||||||
|
#Здесь переменной row присваивается элемент списка M (который сам является списком), а переменной col2
|
||||||
|
#присваивается 2 элемент списка row. И так для каждого элемента списка M.
|
||||||
|
col2 = [row[1] for row in M]
|
||||||
|
print(col2)
|
||||||
|
|
||||||
|
#Генератор списков
|
||||||
|
doubles = [c * 2 for c in 'spam']
|
||||||
|
print(doubles)
|
||||||
12
python/списки/tuple.py
Executable file
12
python/списки/tuple.py
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
#Кортежи можно вводить в круглых скобках, без скобок, или словом tuple
|
||||||
|
a = (23, 16, 'Hi')
|
||||||
|
print(a)
|
||||||
|
|
||||||
|
a = 24, 17, 'qq'
|
||||||
|
print(a)
|
||||||
|
|
||||||
|
a = tuple ('Hello')
|
||||||
|
print(a)
|
||||||
|
|
||||||
|
#В кортежах нельзя менять отдельные символы. Только выводить
|
||||||
|
print(a[1])
|
||||||
38
python/списки/множества.py
Executable file
38
python/списки/множества.py
Executable file
@@ -0,0 +1,38 @@
|
|||||||
|
#Множества создаются при помощи set
|
||||||
|
#В множествах нет повторяющихся элементов
|
||||||
|
#Также есть frozenset, он создаёт множества, которые нельзя менять (как кортежи)
|
||||||
|
a = set('hello')
|
||||||
|
print(a)
|
||||||
|
|
||||||
|
#Множества также можно создать при помощи фигурных скобок, не используя set
|
||||||
|
a = {'h', 'e', 'l', 'o'}
|
||||||
|
print(a)
|
||||||
|
|
||||||
|
"""
|
||||||
|
С множествами можно выполнять множество операций: находить объединение, пересечение...
|
||||||
|
|
||||||
|
len(s) - число элементов в множестве (размер множества).
|
||||||
|
x in s - принадлежит ли x множеству s.
|
||||||
|
set.isdisjoint(other) - истина, если set и other не имеют общих элементов.
|
||||||
|
set == other - все элементы set принадлежат other, все элементы other принадлежат set.
|
||||||
|
set.issubset(other) или set <= other - все элементы set принадлежат other.
|
||||||
|
set.issuperset(other) или set >= other - аналогично.
|
||||||
|
set.union(other, ...) или set | other | ... - объединение нескольких множеств.
|
||||||
|
set.intersection(other, ...) или set & other & ... - пересечение.
|
||||||
|
set.difference(other, ...) или set - other - ... - множество из всех элементов set, не принадлежащие ни одному из other.
|
||||||
|
set.symmetric_difference(other); set ^ other - множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.
|
||||||
|
set.copy() - копия множества.
|
||||||
|
И операции, непосредственно изменяющие множество:
|
||||||
|
|
||||||
|
set.update(other, ...); set |= other | ... - объединение.
|
||||||
|
set.intersection_update(other, ...); set &= other & ... - пересечение.
|
||||||
|
set.difference_update(other, ...); set -= other | ... - вычитание.
|
||||||
|
set.symmetric_difference_update(other); set ^= other - множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.
|
||||||
|
set.add(elem) - добавляет элемент в множество.
|
||||||
|
set.remove(elem) - удаляет элемент из множества. KeyError, если такого элемента не существует.
|
||||||
|
set.discard(elem) - удаляет элемент, если он находится в множестве.
|
||||||
|
set.pop() - удаляет первый элемент из множества. Так как множества не упорядочены, нельзя точно сказать, какой элемент будет первым.
|
||||||
|
set.clear() - очистка множества.
|
||||||
|
set.sort() - сортировка по возрастанию
|
||||||
|
set.reverse() - сортировка по убыванию
|
||||||
|
"""
|
||||||
29
python/списки/словарь.py
Executable file
29
python/списки/словарь.py
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#Словари могут вводиться в фигурных скобках
|
||||||
|
s = {'число': 24, 'надпись': 'inscription'}
|
||||||
|
print(s['число'])
|
||||||
|
|
||||||
|
#.keys и .values возвращают итерируемые объекты. Для получения списков нужно использовать list()
|
||||||
|
print(list(s.keys()), s.values())
|
||||||
|
|
||||||
|
#Могут при помощи dict.
|
||||||
|
d = dict(lazy="q", hardworking="Greetings")
|
||||||
|
print(d['lazy'])
|
||||||
|
|
||||||
|
#Могут при помощи dictfromkeys. При этом всем ключам присваивается одно значение. Его можно и не указывать
|
||||||
|
f = dict.fromkeys(['a', 'b', 'c'], 1)
|
||||||
|
print(f)
|
||||||
|
|
||||||
|
#D = dict(zip(keyslist, valslist))
|
||||||
|
var_zip = dict(zip(['food', 'tool'], ['spam', 'wrench']))
|
||||||
|
print(var_zip)
|
||||||
|
|
||||||
|
#Генератор словарей
|
||||||
|
D = {k: v for (k, v) in zip(['food', 'tool'], ['SPAM', 'WRENCH'])}
|
||||||
|
print(D)
|
||||||
|
|
||||||
|
#in позволяет проверить наличие ключа в словаре
|
||||||
|
if not 'd' in f:
|
||||||
|
print('В словаре f нет элемента с ключём d')
|
||||||
|
|
||||||
|
#get возвращает элемент словаря, а если его нет - указанное значение
|
||||||
|
print(f.get('x', 20))
|
||||||
3
python/файлы/data_file.txt
Executable file
3
python/файлы/data_file.txt
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
spam
|
||||||
|
egg
|
||||||
|
Italia
|
||||||
BIN
python/файлы/obj.pkl
Executable file
BIN
python/файлы/obj.pkl
Executable file
Binary file not shown.
2
python/файлы/objects.txt
Executable file
2
python/файлы/objects.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
41,42,43
|
||||||
|
[1, 5, 10]&{'food': 'spam', 'tool': 'wrench'}
|
||||||
13
python/файлы/пикл.py
Executable file
13
python/файлы/пикл.py
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#Файл нельзя называть pickle
|
||||||
|
|
||||||
|
import pickle
|
||||||
|
|
||||||
|
#Сохранение объектов в файлах при помощи pickle
|
||||||
|
F = open("obj.pkl", "wb")
|
||||||
|
D = {'meal': 'burger', 'genius': 'heiakim'}
|
||||||
|
pickle.dump(D, F)
|
||||||
|
F.close()
|
||||||
|
|
||||||
|
#Чтение объектов
|
||||||
|
F = open('obj.pkl', 'rb')
|
||||||
|
print(pickle.load(F))
|
||||||
84
python/файлы/файлы.py
Executable file
84
python/файлы/файлы.py
Executable file
@@ -0,0 +1,84 @@
|
|||||||
|
#создание файлов. w - write
|
||||||
|
text_file = open('data_file.txt', 'w')
|
||||||
|
|
||||||
|
#Запись в файл
|
||||||
|
text_file.write('Hello\n')
|
||||||
|
text_file.write('World')
|
||||||
|
|
||||||
|
#Закрытие файла
|
||||||
|
text_file.close()
|
||||||
|
|
||||||
|
#По умолчанию файлы открываются в режиме r - read
|
||||||
|
text_file = open('data_file.txt')
|
||||||
|
|
||||||
|
#Чтение из файла. (в скобках можно указать кол-во символов для чтения)
|
||||||
|
print(text_file.read())
|
||||||
|
|
||||||
|
print('\n')
|
||||||
|
|
||||||
|
#Чтение одной строки. (в скобках можно указать кол-во символов для чтения)
|
||||||
|
text_file = open('data_file.txt')
|
||||||
|
S = text_file.readline()
|
||||||
|
S = text_file.readline()
|
||||||
|
print(S)
|
||||||
|
|
||||||
|
print('\n')
|
||||||
|
|
||||||
|
#Чтение файла в список строк
|
||||||
|
text_file = open('data_file.txt')
|
||||||
|
L = text_file.readlines()
|
||||||
|
print(L)
|
||||||
|
|
||||||
|
print('\n')
|
||||||
|
|
||||||
|
#Запись строк из списка в файл
|
||||||
|
text_file = open('data_file.txt', 'w')
|
||||||
|
tmp_list = ['spam\n', 'egg\n', 'Italia']
|
||||||
|
text_file.writelines(tmp_list)
|
||||||
|
|
||||||
|
text_file = open('data_file.txt')
|
||||||
|
print(text_file.read())
|
||||||
|
|
||||||
|
|
||||||
|
print('\n****************')
|
||||||
|
|
||||||
|
#Итератор файла
|
||||||
|
text_file = open('data_file.txt')
|
||||||
|
for S in text_file:
|
||||||
|
print(S * 2)
|
||||||
|
|
||||||
|
print('****************\n')
|
||||||
|
|
||||||
|
#Изменяет текущую позицию в файле для следующей операции, смещая ее на N байтов от начала файла.
|
||||||
|
text_file = open('data_file.txt')
|
||||||
|
text_file.seek(7)
|
||||||
|
print(text_file.read())
|
||||||
|
|
||||||
|
print('\n')
|
||||||
|
|
||||||
|
#Запись объектов
|
||||||
|
objects = open('objects.txt', 'w')
|
||||||
|
L = [1, 5, 10]
|
||||||
|
X, Y, Z = 41, 42, 43
|
||||||
|
D = {'food': 'spam', 'tool': 'wrench'}
|
||||||
|
objects.write('{0},{1},{2}\n'.format(X, Y, Z))
|
||||||
|
objects.write(str(L) + '&' + str(D) + '\n')
|
||||||
|
objects = open('objects.txt')
|
||||||
|
print(objects.read())
|
||||||
|
|
||||||
|
#Чтение объектов
|
||||||
|
objects = open('objects.txt')
|
||||||
|
line = objects.readline()
|
||||||
|
#Удаление символа конца строки
|
||||||
|
line = line.rstrip()
|
||||||
|
print(line)
|
||||||
|
|
||||||
|
numbers = line.split(',')
|
||||||
|
L = [int(x) for x in numbers]
|
||||||
|
print(L)
|
||||||
|
|
||||||
|
line = objects.readline()
|
||||||
|
line = line.rstrip()
|
||||||
|
elements = line.split('&')
|
||||||
|
result = [eval(x) for x in elements]
|
||||||
|
print(result)
|
||||||
21
python/функции/NOK.py
Executable file
21
python/функции/NOK.py
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
def nok (a,b):
|
||||||
|
c=a
|
||||||
|
d=b
|
||||||
|
ia=1
|
||||||
|
ib=1
|
||||||
|
|
||||||
|
while c != d:
|
||||||
|
if c < d:
|
||||||
|
ia += 1
|
||||||
|
c = a*ia
|
||||||
|
else:
|
||||||
|
ib+=1
|
||||||
|
d = b*ib
|
||||||
|
|
||||||
|
print(c, d)
|
||||||
|
return c
|
||||||
|
|
||||||
|
z = int(input('a: '))
|
||||||
|
x = int(input('b: '))
|
||||||
|
nok(z, x)
|
||||||
|
input()
|
||||||
88
python/функции/NOK2.py
Executable file
88
python/функции/NOK2.py
Executable file
@@ -0,0 +1,88 @@
|
|||||||
|
import operator
|
||||||
|
import functools
|
||||||
|
prime = [2, 3]
|
||||||
|
|
||||||
|
def simple(a):
|
||||||
|
num = a[-1]+1
|
||||||
|
tr = False
|
||||||
|
while tr != True:
|
||||||
|
for i in range(2, num):
|
||||||
|
if num%i == 0:
|
||||||
|
tr = False
|
||||||
|
num += 1
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
tr = True
|
||||||
|
a.append(num)
|
||||||
|
# print(f'В список добавлено число {num}')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def NOK(x,y):
|
||||||
|
if x > y:
|
||||||
|
difx = True
|
||||||
|
else:
|
||||||
|
difx=False
|
||||||
|
|
||||||
|
arrayx=[]
|
||||||
|
arrayy=[]
|
||||||
|
counter=0
|
||||||
|
while x!=1:
|
||||||
|
for i in range(counter, len(prime)):
|
||||||
|
if prime[i]>(x/2):
|
||||||
|
arrayx.append(x)
|
||||||
|
x=1
|
||||||
|
break
|
||||||
|
if x%prime[i]==0:
|
||||||
|
x //= prime[i]
|
||||||
|
arrayx.append(prime[i])
|
||||||
|
counter=0
|
||||||
|
i=0
|
||||||
|
break
|
||||||
|
|
||||||
|
if (x>1) and (i==(len(prime)-1)):
|
||||||
|
simple(prime)
|
||||||
|
counter=i
|
||||||
|
|
||||||
|
counter=0
|
||||||
|
while y!=1:
|
||||||
|
for i in range(counter, len(prime)):
|
||||||
|
if prime[i]>(y/2):
|
||||||
|
arrayy.append(y)
|
||||||
|
y=1
|
||||||
|
break
|
||||||
|
if y%prime[i]==0:
|
||||||
|
y//=prime[i]
|
||||||
|
arrayy.append(prime[i])
|
||||||
|
counter=0
|
||||||
|
i=0
|
||||||
|
break
|
||||||
|
|
||||||
|
if (y>1) and (i==(len(prime)-1)):
|
||||||
|
simple(prime)
|
||||||
|
counter=i
|
||||||
|
|
||||||
|
print(arrayx, arrayy)
|
||||||
|
|
||||||
|
count_ax = 0
|
||||||
|
y_second = list(arrayy)
|
||||||
|
x_second = list(arrayx)
|
||||||
|
for i in range(0, len(arrayy)):
|
||||||
|
for for_x in range(0, len(x_second)):
|
||||||
|
if arrayy[i] == x_second[for_x]:
|
||||||
|
y_second.remove(arrayy[i])
|
||||||
|
x_second.remove(arrayy[i])
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
result_array = y_second + arrayx
|
||||||
|
result = functools.reduce(operator.mul, result_array, 1)
|
||||||
|
print(result_array, result)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
first = int(input())
|
||||||
|
second = int(input())
|
||||||
|
print(NOK(first,second))
|
||||||
|
input()
|
||||||
33
python/функции/def.py
Executable file
33
python/функции/def.py
Executable file
@@ -0,0 +1,33 @@
|
|||||||
|
# Функции создаются при помощи def Имя (Список параметров)
|
||||||
|
|
||||||
|
#В тройных кавычках содержится описание функции
|
||||||
|
def division (dividend, divisor):
|
||||||
|
"""Делит делимое на делитель"""
|
||||||
|
if divisor != 0:
|
||||||
|
z = dividend/divisor
|
||||||
|
#return возвращает результат функции. Без него результатом будет None
|
||||||
|
#также есть pass, при использовании которого функция ничего не возвращает
|
||||||
|
return z
|
||||||
|
else:
|
||||||
|
print('На 0 делить нельзя')
|
||||||
|
|
||||||
|
#Просмотр описания функции
|
||||||
|
print(division.__doc__)
|
||||||
|
|
||||||
|
print(division(18,6))
|
||||||
|
|
||||||
|
def gcd(a, b):
|
||||||
|
"Нахождение НОД"
|
||||||
|
while a != 0:
|
||||||
|
a,b = b%a,a # параллельное определение. Не смотря на то, что b написано после a, переменной b всё равно присваивается старое значение a
|
||||||
|
print(a,b)
|
||||||
|
print(b)
|
||||||
|
return b
|
||||||
|
gcd(2,3)
|
||||||
|
|
||||||
|
|
||||||
|
#вместо списка параметров можно написать *args, тогда кол-во параметров определится само
|
||||||
|
def test(*args):
|
||||||
|
print(args)
|
||||||
|
pass
|
||||||
|
test(23, "hi", 4221)
|
||||||
2
python/функции/lambda.py
Executable file
2
python/функции/lambda.py
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
mult = lambda x, y: x * y
|
||||||
|
print(mult(2, 5))
|
||||||
35
python/функции/Нахождение простых чисел.py
Executable file
35
python/функции/Нахождение простых чисел.py
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
prime = [2, 3]
|
||||||
|
print(prime)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
num = prime[-1]+1
|
||||||
|
tr = False
|
||||||
|
while tr != True:
|
||||||
|
for i in range(2, num):
|
||||||
|
if num%i == 0:
|
||||||
|
tr = False
|
||||||
|
print(num, i, tr)
|
||||||
|
num += 1
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
tr = True
|
||||||
|
print(num, i, tr)
|
||||||
|
|
||||||
|
prime.append(num)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for z in range(1, 1500):
|
||||||
|
num = prime[-1]+1
|
||||||
|
tr = False
|
||||||
|
while tr != True:
|
||||||
|
for i in range(2, (num//2)):
|
||||||
|
if num%i == 0:
|
||||||
|
tr = False
|
||||||
|
num += 1
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
tr = True
|
||||||
|
prime.append(num)
|
||||||
|
print(prime)
|
||||||
9
python/циклы/for.py
Executable file
9
python/циклы/for.py
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#Здесь переменная f объявляется сразу в цикле
|
||||||
|
#В данном цикле f присваивается каждый элемент из множества символов, заданных после in
|
||||||
|
for f in 'Hi!':
|
||||||
|
print (f * 2)
|
||||||
|
|
||||||
|
#for с числами. Последнее число не обрабатывается: будет идти от 10 до 19
|
||||||
|
#range (Старт, финиш, шаг)
|
||||||
|
for k in range(10, 20):
|
||||||
|
print (k)
|
||||||
6
python/циклы/while.py
Executable file
6
python/циклы/while.py
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#Переменная создаётся до цикла
|
||||||
|
i = 0
|
||||||
|
#Цикл выполняется, пока условие является истинным.
|
||||||
|
while i < 10:
|
||||||
|
print(i)
|
||||||
|
i += 2
|
||||||
Reference in New Issue
Block a user