From 3eb06b36b39e15563c33691906e63426e0316ae7 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Sat, 31 Jul 2021 16:02:10 +0500
Subject: [PATCH 01/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D0=B5=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_1/1.py | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 PARSING/Lesson_1/1.py
diff --git a/PARSING/Lesson_1/1.py b/PARSING/Lesson_1/1.py
new file mode 100644
index 0000000..a4abaf4
--- /dev/null
+++ b/PARSING/Lesson_1/1.py
@@ -0,0 +1,14 @@
+import requests
+import json
+
+
+url = 'https://api.github.com'
+user = 'softicer-67'
+
+
+request = requests.get(f'{url}/users/{user}/repos')
+
+js = request.json()
+for i in range(0, len(js)):
+ res = f'Project Number: {i + 1}\nProject Name: {js[i]["name"]}\nProject URL: {js[i]["svn_url"]}'
+ print(res)
From adc45e82cdac02edd15a2d34561676fd8772fee3 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Sat, 31 Jul 2021 16:32:32 +0500
Subject: [PATCH 02/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D0=B5=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_1/1.py | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/PARSING/Lesson_1/1.py b/PARSING/Lesson_1/1.py
index a4abaf4..ac96de8 100644
--- a/PARSING/Lesson_1/1.py
+++ b/PARSING/Lesson_1/1.py
@@ -6,9 +6,12 @@
user = 'softicer-67'
-request = requests.get(f'{url}/users/{user}/repos')
+r = requests.get(f'{url}/users/{user}/repos').json()
-js = request.json()
-for i in range(0, len(js)):
- res = f'Project Number: {i + 1}\nProject Name: {js[i]["name"]}\nProject URL: {js[i]["svn_url"]}'
- print(res)
+
+for i in range(len(r)):
+ x = f'Project Number: {i + 1}\nProject Name: {r[i]["name"]}\nProject URL: {r[i]["svn_url"]}'
+ print(x)
+
+with open('data.json', 'w') as f:
+ json.dump(r, f)
From cd798ac15c990f6d3d053aa68bd8b7700639afc0 Mon Sep 17 00:00:00 2001
From: softicer-67 <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 31 Jul 2021 16:33:49 +0500
Subject: [PATCH 03/62] Add files via upload
---
PARSING/Lesson_1/data.json | 1 +
1 file changed, 1 insertion(+)
create mode 100644 PARSING/Lesson_1/data.json
diff --git a/PARSING/Lesson_1/data.json b/PARSING/Lesson_1/data.json
new file mode 100644
index 0000000..9516753
--- /dev/null
+++ b/PARSING/Lesson_1/data.json
@@ -0,0 +1 @@
+[{"id": 339833490, "node_id": "MDEwOlJlcG9zaXRvcnkzMzk4MzM0OTA=", "name": "LESSONS", "full_name": "softicer-67/LESSONS", "private": false, "owner": {"login": "softicer-67", "id": 57116431, "node_id": "MDQ6VXNlcjU3MTE2NDMx", "avatar_url": "https://avatars.githubusercontent.com/u/57116431?v=4", "gravatar_id": "", "url": "https://api.github.com/users/softicer-67", "html_url": "https://github.com/softicer-67", "followers_url": "https://api.github.com/users/softicer-67/followers", "following_url": "https://api.github.com/users/softicer-67/following{/other_user}", "gists_url": "https://api.github.com/users/softicer-67/gists{/gist_id}", "starred_url": "https://api.github.com/users/softicer-67/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/softicer-67/subscriptions", "organizations_url": "https://api.github.com/users/softicer-67/orgs", "repos_url": "https://api.github.com/users/softicer-67/repos", "events_url": "https://api.github.com/users/softicer-67/events{/privacy}", "received_events_url": "https://api.github.com/users/softicer-67/received_events", "type": "User", "site_admin": false}, "html_url": "https://github.com/softicer-67/LESSONS", "description": null, "fork": false, "url": "https://api.github.com/repos/softicer-67/LESSONS", "forks_url": "https://api.github.com/repos/softicer-67/LESSONS/forks", "keys_url": "https://api.github.com/repos/softicer-67/LESSONS/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/softicer-67/LESSONS/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/softicer-67/LESSONS/teams", "hooks_url": "https://api.github.com/repos/softicer-67/LESSONS/hooks", "issue_events_url": "https://api.github.com/repos/softicer-67/LESSONS/issues/events{/number}", "events_url": "https://api.github.com/repos/softicer-67/LESSONS/events", "assignees_url": "https://api.github.com/repos/softicer-67/LESSONS/assignees{/user}", "branches_url": "https://api.github.com/repos/softicer-67/LESSONS/branches{/branch}", "tags_url": "https://api.github.com/repos/softicer-67/LESSONS/tags", "blobs_url": "https://api.github.com/repos/softicer-67/LESSONS/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/softicer-67/LESSONS/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/softicer-67/LESSONS/git/refs{/sha}", "trees_url": "https://api.github.com/repos/softicer-67/LESSONS/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/softicer-67/LESSONS/statuses/{sha}", "languages_url": "https://api.github.com/repos/softicer-67/LESSONS/languages", "stargazers_url": "https://api.github.com/repos/softicer-67/LESSONS/stargazers", "contributors_url": "https://api.github.com/repos/softicer-67/LESSONS/contributors", "subscribers_url": "https://api.github.com/repos/softicer-67/LESSONS/subscribers", "subscription_url": "https://api.github.com/repos/softicer-67/LESSONS/subscription", "commits_url": "https://api.github.com/repos/softicer-67/LESSONS/commits{/sha}", "git_commits_url": "https://api.github.com/repos/softicer-67/LESSONS/git/commits{/sha}", "comments_url": "https://api.github.com/repos/softicer-67/LESSONS/comments{/number}", "issue_comment_url": "https://api.github.com/repos/softicer-67/LESSONS/issues/comments{/number}", "contents_url": "https://api.github.com/repos/softicer-67/LESSONS/contents/{+path}", "compare_url": "https://api.github.com/repos/softicer-67/LESSONS/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/softicer-67/LESSONS/merges", "archive_url": "https://api.github.com/repos/softicer-67/LESSONS/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/softicer-67/LESSONS/downloads", "issues_url": "https://api.github.com/repos/softicer-67/LESSONS/issues{/number}", "pulls_url": "https://api.github.com/repos/softicer-67/LESSONS/pulls{/number}", "milestones_url": "https://api.github.com/repos/softicer-67/LESSONS/milestones{/number}", "notifications_url": "https://api.github.com/repos/softicer-67/LESSONS/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/softicer-67/LESSONS/labels{/name}", "releases_url": "https://api.github.com/repos/softicer-67/LESSONS/releases{/id}", "deployments_url": "https://api.github.com/repos/softicer-67/LESSONS/deployments", "created_at": "2021-02-17T19:28:44Z", "updated_at": "2021-03-24T13:22:32Z", "pushed_at": "2021-07-31T11:02:20Z", "git_url": "git://github.com/softicer-67/LESSONS.git", "ssh_url": "git@github.com:softicer-67/LESSONS.git", "clone_url": "https://github.com/softicer-67/LESSONS.git", "svn_url": "https://github.com/softicer-67/LESSONS", "homepage": null, "size": 258, "stargazers_count": 0, "watchers_count": 0, "language": "Python", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "disabled": false, "open_issues_count": 1, "license": null, "forks": 0, "open_issues": 1, "watchers": 0, "default_branch": "master"}]
\ No newline at end of file
From be59e3f97c61abcfbb3f7827c742ab21f17ff54c Mon Sep 17 00:00:00 2001
From: softicer-67 <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 31 Jul 2021 17:00:45 +0500
Subject: [PATCH 04/62] Add files via upload
---
PARSING/Lesson_1/2.py | 24 ++++++++++++++++++++++++
PARSING/Lesson_1/data2.json | 1 +
2 files changed, 25 insertions(+)
create mode 100644 PARSING/Lesson_1/2.py
create mode 100644 PARSING/Lesson_1/data2.json
diff --git a/PARSING/Lesson_1/2.py b/PARSING/Lesson_1/2.py
new file mode 100644
index 0000000..62271cd
--- /dev/null
+++ b/PARSING/Lesson_1/2.py
@@ -0,0 +1,24 @@
+import requests
+import json
+import csv
+
+
+url = 'https://cloud-api.yandex.net/v1/'
+token = 'MDEwOlJlcG9zaXRvcnkzMzk4MzM0OTA='
+
+headers = {
+ 'Content-Type': 'application/json',
+ 'Authorization': token
+}
+
+disk_info = 'disk'
+folder_info = 'disk/resources'
+
+res = requests.get(f'{url}{disk_info}')
+
+print(res.json())
+
+with open('data2.json', 'w') as f:
+ writer = csv.writer(f)
+ writer.writerow((res.json(),))
+
diff --git a/PARSING/Lesson_1/data2.json b/PARSING/Lesson_1/data2.json
new file mode 100644
index 0000000..9b6f12c
--- /dev/null
+++ b/PARSING/Lesson_1/data2.json
@@ -0,0 +1 @@
+"{'message': ' .', 'description': 'Unauthorized', 'error': 'UnauthorizedError'}"
From ee0e20362131d5b6bc4b1882004f16e9a0634177 Mon Sep 17 00:00:00 2001
From: softicer-67 <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 31 Jul 2021 17:14:47 +0500
Subject: [PATCH 05/62] Delete data2.json
---
PARSING/Lesson_1/data2.json | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 PARSING/Lesson_1/data2.json
diff --git a/PARSING/Lesson_1/data2.json b/PARSING/Lesson_1/data2.json
deleted file mode 100644
index 9b6f12c..0000000
--- a/PARSING/Lesson_1/data2.json
+++ /dev/null
@@ -1 +0,0 @@
-"{'message': ' .', 'description': 'Unauthorized', 'error': 'UnauthorizedError'}"
From c86ea01a6ded196e031890ff18f13d42dd53f4a4 Mon Sep 17 00:00:00 2001
From: softicer-67 <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 31 Jul 2021 17:14:56 +0500
Subject: [PATCH 06/62] Delete data.json
---
PARSING/Lesson_1/data.json | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 PARSING/Lesson_1/data.json
diff --git a/PARSING/Lesson_1/data.json b/PARSING/Lesson_1/data.json
deleted file mode 100644
index 9516753..0000000
--- a/PARSING/Lesson_1/data.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"id": 339833490, "node_id": "MDEwOlJlcG9zaXRvcnkzMzk4MzM0OTA=", "name": "LESSONS", "full_name": "softicer-67/LESSONS", "private": false, "owner": {"login": "softicer-67", "id": 57116431, "node_id": "MDQ6VXNlcjU3MTE2NDMx", "avatar_url": "https://avatars.githubusercontent.com/u/57116431?v=4", "gravatar_id": "", "url": "https://api.github.com/users/softicer-67", "html_url": "https://github.com/softicer-67", "followers_url": "https://api.github.com/users/softicer-67/followers", "following_url": "https://api.github.com/users/softicer-67/following{/other_user}", "gists_url": "https://api.github.com/users/softicer-67/gists{/gist_id}", "starred_url": "https://api.github.com/users/softicer-67/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/softicer-67/subscriptions", "organizations_url": "https://api.github.com/users/softicer-67/orgs", "repos_url": "https://api.github.com/users/softicer-67/repos", "events_url": "https://api.github.com/users/softicer-67/events{/privacy}", "received_events_url": "https://api.github.com/users/softicer-67/received_events", "type": "User", "site_admin": false}, "html_url": "https://github.com/softicer-67/LESSONS", "description": null, "fork": false, "url": "https://api.github.com/repos/softicer-67/LESSONS", "forks_url": "https://api.github.com/repos/softicer-67/LESSONS/forks", "keys_url": "https://api.github.com/repos/softicer-67/LESSONS/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/softicer-67/LESSONS/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/softicer-67/LESSONS/teams", "hooks_url": "https://api.github.com/repos/softicer-67/LESSONS/hooks", "issue_events_url": "https://api.github.com/repos/softicer-67/LESSONS/issues/events{/number}", "events_url": "https://api.github.com/repos/softicer-67/LESSONS/events", "assignees_url": "https://api.github.com/repos/softicer-67/LESSONS/assignees{/user}", "branches_url": "https://api.github.com/repos/softicer-67/LESSONS/branches{/branch}", "tags_url": "https://api.github.com/repos/softicer-67/LESSONS/tags", "blobs_url": "https://api.github.com/repos/softicer-67/LESSONS/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/softicer-67/LESSONS/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/softicer-67/LESSONS/git/refs{/sha}", "trees_url": "https://api.github.com/repos/softicer-67/LESSONS/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/softicer-67/LESSONS/statuses/{sha}", "languages_url": "https://api.github.com/repos/softicer-67/LESSONS/languages", "stargazers_url": "https://api.github.com/repos/softicer-67/LESSONS/stargazers", "contributors_url": "https://api.github.com/repos/softicer-67/LESSONS/contributors", "subscribers_url": "https://api.github.com/repos/softicer-67/LESSONS/subscribers", "subscription_url": "https://api.github.com/repos/softicer-67/LESSONS/subscription", "commits_url": "https://api.github.com/repos/softicer-67/LESSONS/commits{/sha}", "git_commits_url": "https://api.github.com/repos/softicer-67/LESSONS/git/commits{/sha}", "comments_url": "https://api.github.com/repos/softicer-67/LESSONS/comments{/number}", "issue_comment_url": "https://api.github.com/repos/softicer-67/LESSONS/issues/comments{/number}", "contents_url": "https://api.github.com/repos/softicer-67/LESSONS/contents/{+path}", "compare_url": "https://api.github.com/repos/softicer-67/LESSONS/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/softicer-67/LESSONS/merges", "archive_url": "https://api.github.com/repos/softicer-67/LESSONS/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/softicer-67/LESSONS/downloads", "issues_url": "https://api.github.com/repos/softicer-67/LESSONS/issues{/number}", "pulls_url": "https://api.github.com/repos/softicer-67/LESSONS/pulls{/number}", "milestones_url": "https://api.github.com/repos/softicer-67/LESSONS/milestones{/number}", "notifications_url": "https://api.github.com/repos/softicer-67/LESSONS/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/softicer-67/LESSONS/labels{/name}", "releases_url": "https://api.github.com/repos/softicer-67/LESSONS/releases{/id}", "deployments_url": "https://api.github.com/repos/softicer-67/LESSONS/deployments", "created_at": "2021-02-17T19:28:44Z", "updated_at": "2021-03-24T13:22:32Z", "pushed_at": "2021-07-31T11:02:20Z", "git_url": "git://github.com/softicer-67/LESSONS.git", "ssh_url": "git@github.com:softicer-67/LESSONS.git", "clone_url": "https://github.com/softicer-67/LESSONS.git", "svn_url": "https://github.com/softicer-67/LESSONS", "homepage": null, "size": 258, "stargazers_count": 0, "watchers_count": 0, "language": "Python", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "disabled": false, "open_issues_count": 1, "license": null, "forks": 0, "open_issues": 1, "watchers": 0, "default_branch": "master"}]
\ No newline at end of file
From b8996f636717d464a5344acff55849cd5945e6ee Mon Sep 17 00:00:00 2001
From: softicer-67 <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 31 Jul 2021 17:15:05 +0500
Subject: [PATCH 07/62] Delete 2.py
---
PARSING/Lesson_1/2.py | 24 ------------------------
1 file changed, 24 deletions(-)
delete mode 100644 PARSING/Lesson_1/2.py
diff --git a/PARSING/Lesson_1/2.py b/PARSING/Lesson_1/2.py
deleted file mode 100644
index 62271cd..0000000
--- a/PARSING/Lesson_1/2.py
+++ /dev/null
@@ -1,24 +0,0 @@
-import requests
-import json
-import csv
-
-
-url = 'https://cloud-api.yandex.net/v1/'
-token = 'MDEwOlJlcG9zaXRvcnkzMzk4MzM0OTA='
-
-headers = {
- 'Content-Type': 'application/json',
- 'Authorization': token
-}
-
-disk_info = 'disk'
-folder_info = 'disk/resources'
-
-res = requests.get(f'{url}{disk_info}')
-
-print(res.json())
-
-with open('data2.json', 'w') as f:
- writer = csv.writer(f)
- writer.writerow((res.json(),))
-
From 129d9dc4441fd14741328cf23949b8bd034a133a Mon Sep 17 00:00:00 2001
From: softicer-67 <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 31 Jul 2021 17:15:10 +0500
Subject: [PATCH 08/62] Delete 1.py
---
PARSING/Lesson_1/1.py | 17 -----------------
1 file changed, 17 deletions(-)
delete mode 100644 PARSING/Lesson_1/1.py
diff --git a/PARSING/Lesson_1/1.py b/PARSING/Lesson_1/1.py
deleted file mode 100644
index ac96de8..0000000
--- a/PARSING/Lesson_1/1.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import requests
-import json
-
-
-url = 'https://api.github.com'
-user = 'softicer-67'
-
-
-r = requests.get(f'{url}/users/{user}/repos').json()
-
-
-for i in range(len(r)):
- x = f'Project Number: {i + 1}\nProject Name: {r[i]["name"]}\nProject URL: {r[i]["svn_url"]}'
- print(x)
-
-with open('data.json', 'w') as f:
- json.dump(r, f)
From bf82de9f5063fefaf68892d98141ea197b7bd03d Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Sat, 31 Jul 2021 16:56:36 +0500
Subject: [PATCH 09/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D0=B5=202?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_1/2.py | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
create mode 100644 PARSING/Lesson_1/2.py
diff --git a/PARSING/Lesson_1/2.py b/PARSING/Lesson_1/2.py
new file mode 100644
index 0000000..ee44b1a
--- /dev/null
+++ b/PARSING/Lesson_1/2.py
@@ -0,0 +1,23 @@
+import requests
+import json
+import csv
+
+
+url = 'https://cloud-api.yandex.net/v1/'
+token = 'MDEwOlJlcG9zaXRvcnkzMzk4MzM0OTA='
+
+headers = {
+ 'Content-Type': 'application/json',
+ 'Authorization': token
+}
+
+disk_info = 'disk'
+folder_info = 'disk/resources'
+
+res = requests.get(f'{url}{disk_info}')
+
+print(res.json())
+
+with open('data2.json', 'w') as f:
+ writer = csv.writer(f)
+ writer.writerow((res.json(),))
From 0ae3a5c232e0f2e9c9377e20452cd691f430c73d Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Sat, 31 Jul 2021 16:58:47 +0500
Subject: [PATCH 10/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D0=B5=202?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_1/2.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/PARSING/Lesson_1/2.py b/PARSING/Lesson_1/2.py
index ee44b1a..e859bb4 100644
--- a/PARSING/Lesson_1/2.py
+++ b/PARSING/Lesson_1/2.py
@@ -21,3 +21,4 @@
with open('data2.json', 'w') as f:
writer = csv.writer(f)
writer.writerow((res.json(),))
+
From 9312e4ac66737b8d90dc304c122763d28ef90354 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Sat, 31 Jul 2021 17:13:08 +0500
Subject: [PATCH 11/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?=
=?UTF-8?q?=D0=B5=202?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_1/2.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/PARSING/Lesson_1/2.py b/PARSING/Lesson_1/2.py
index e859bb4..760df2b 100644
--- a/PARSING/Lesson_1/2.py
+++ b/PARSING/Lesson_1/2.py
@@ -22,3 +22,5 @@
writer = csv.writer(f)
writer.writerow((res.json(),))
+
+
From e55f906cbbe97b7000867ad6f6d1cfea738200e3 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Mon, 2 Aug 2021 03:47:42 +0500
Subject: [PATCH 12/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ALGORITMS/Lesson_6/1.py | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
create mode 100644 ALGORITMS/Lesson_6/1.py
diff --git a/ALGORITMS/Lesson_6/1.py b/ALGORITMS/Lesson_6/1.py
new file mode 100644
index 0000000..4bd0117
--- /dev/null
+++ b/ALGORITMS/Lesson_6/1.py
@@ -0,0 +1,30 @@
+'''
+1. Подсчитать, сколько было выделено памяти под переменные в ранее разработанных программах в рамках первых трех уроков.
+Проанализировать результат и определить программы с наиболее эффективным использованием памяти.
+Примечание: Для анализа возьмите любые 1-3 ваших программы или несколько вариантов кода для одной и той же задачи.
+Результаты анализа вставьте в виде комментариев к коду. Также укажите в комментариях версию Python и разрядность вашей ОС.
+'''
+
+import sys
+
+res = {}
+for i in range(2, 10):
+ res[i] = []
+ for j in range(2, 100):
+ if j % i == 0:
+ res[i].append(j)
+ print(f'Числу {i} кратны {len(res[i])} чисел: {res[i]}')
+
+
+sum_size = 0
+sum_size1 = 0
+sum_size2 = 0
+sum_size += sys.getsizeof(i)
+sum_size1 += sys.getsizeof(print)
+sum_size2 += sys.getsizeof(res)
+
+print('\nПеременные занимают:', sum_size, sum_size1, sum_size2)
+
+'''
+Переменные занимают: 28 72 360
+'''
\ No newline at end of file
From 94f21b6e7e8a05577c797bef5989eaccc3561405 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Mon, 2 Aug 2021 03:58:08 +0500
Subject: [PATCH 13/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ALGORITMS/Lesson_6/1.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ALGORITMS/Lesson_6/1.py b/ALGORITMS/Lesson_6/1.py
index 4bd0117..5ee66a8 100644
--- a/ALGORITMS/Lesson_6/1.py
+++ b/ALGORITMS/Lesson_6/1.py
@@ -27,4 +27,4 @@
'''
Переменные занимают: 28 72 360
-'''
\ No newline at end of file
+'''
From 1cf0ed034f6c6308eb2a4679bb8057cec66bc69f Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Mon, 2 Aug 2021 04:06:52 +0500
Subject: [PATCH 14/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
..._before_Update_at_02_08_2021_4_04__Default_Changelist_.xml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 ALGORITMS/.idea/shelf/Uncommitted_changes_before_Update_at_02_08_2021_4_04__Default_Changelist_.xml
diff --git a/ALGORITMS/.idea/shelf/Uncommitted_changes_before_Update_at_02_08_2021_4_04__Default_Changelist_.xml b/ALGORITMS/.idea/shelf/Uncommitted_changes_before_Update_at_02_08_2021_4_04__Default_Changelist_.xml
new file mode 100644
index 0000000..5089337
--- /dev/null
+++ b/ALGORITMS/.idea/shelf/Uncommitted_changes_before_Update_at_02_08_2021_4_04__Default_Changelist_.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
From 7a2737da40b8ca3f7f416b5e8684fc7fdcba27a9 Mon Sep 17 00:00:00 2001
From: Yuri <57116431+softicer-67@users.noreply.github.com>
Date: Tue, 3 Aug 2021 01:54:05 +0500
Subject: [PATCH 15/62] Delete PARSING directory
---
PARSING/Lesson_1/2.py | 26 --------------------------
1 file changed, 26 deletions(-)
delete mode 100644 PARSING/Lesson_1/2.py
diff --git a/PARSING/Lesson_1/2.py b/PARSING/Lesson_1/2.py
deleted file mode 100644
index 760df2b..0000000
--- a/PARSING/Lesson_1/2.py
+++ /dev/null
@@ -1,26 +0,0 @@
-import requests
-import json
-import csv
-
-
-url = 'https://cloud-api.yandex.net/v1/'
-token = 'MDEwOlJlcG9zaXRvcnkzMzk4MzM0OTA='
-
-headers = {
- 'Content-Type': 'application/json',
- 'Authorization': token
-}
-
-disk_info = 'disk'
-folder_info = 'disk/resources'
-
-res = requests.get(f'{url}{disk_info}')
-
-print(res.json())
-
-with open('data2.json', 'w') as f:
- writer = csv.writer(f)
- writer.writerow((res.json(),))
-
-
-
From ced96005dcf138fce6a9b552648e96ca5dae41df Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Tue, 10 Aug 2021 03:06:26 +0500
Subject: [PATCH 16/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_1/1.py | 15 +++++++++++++++
1 file changed, 15 insertions(+)
create mode 100644 PARSING/Lesson_1/1.py
diff --git a/PARSING/Lesson_1/1.py b/PARSING/Lesson_1/1.py
new file mode 100644
index 0000000..4188b66
--- /dev/null
+++ b/PARSING/Lesson_1/1.py
@@ -0,0 +1,15 @@
+import requests
+import json
+
+
+url = 'https://api.github.com'
+user = 'softicer-67'
+
+
+request = requests.get(f'{url}/users/{user}/repos')
+
+js = request.json()
+for i in range(0, len(js)):
+ res = f'Project Number: {i + 1}\nProject Name: {js[i]["name"]}\nProject URL: {js[i]["svn_url"]}'
+ print(res)
+
From 890911ff11888021ecf557547250d78cda2797ed Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Tue, 10 Aug 2021 03:09:34 +0500
Subject: [PATCH 17/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_3/1.py | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 PARSING/Lesson_3/1.py
diff --git a/PARSING/Lesson_3/1.py b/PARSING/Lesson_3/1.py
new file mode 100644
index 0000000..ede4ffa
--- /dev/null
+++ b/PARSING/Lesson_3/1.py
@@ -0,0 +1,5 @@
+'''
+1. Развернуть у себя на компьютере/виртуальной машине/хостинге MongoDB и реализовать функцию,
+записывающую собранные вакансии в созданную БД.
+'''
+
From 222f37d89b3e17b170defd8e7c0fb2535e804ae1 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Tue, 10 Aug 2021 03:14:40 +0500
Subject: [PATCH 18/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=202?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_3/2.py | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 PARSING/Lesson_3/2.py
diff --git a/PARSING/Lesson_3/2.py b/PARSING/Lesson_3/2.py
new file mode 100644
index 0000000..0be32fd
--- /dev/null
+++ b/PARSING/Lesson_3/2.py
@@ -0,0 +1,5 @@
+'''
+2. Написать функцию, которая производит поиск и выводит на экран вакансии
+с заработной платой больше введённой суммы.
+'''
+
From 5f10a29cd5971fdd65178474dd743849d90851d8 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Tue, 10 Aug 2021 03:57:33 +0500
Subject: [PATCH 19/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=203?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_3/3.py | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 PARSING/Lesson_3/3.py
diff --git a/PARSING/Lesson_3/3.py b/PARSING/Lesson_3/3.py
new file mode 100644
index 0000000..3d347cf
--- /dev/null
+++ b/PARSING/Lesson_3/3.py
@@ -0,0 +1,4 @@
+'''
+3. Написать функцию, которая будет добавлять в вашу базу данных только новые вакансии с сайта.
+'''
+
From 842c6fb109b19effba6a8a8e72964ce91cfe7d36 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Wed, 11 Aug 2021 14:35:22 +0500
Subject: [PATCH 20/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_4/1.py | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
create mode 100644 PARSING/Lesson_4/1.py
diff --git a/PARSING/Lesson_4/1.py b/PARSING/Lesson_4/1.py
new file mode 100644
index 0000000..d13a119
--- /dev/null
+++ b/PARSING/Lesson_4/1.py
@@ -0,0 +1,31 @@
+'''
+Написать приложение, которое собирает основные новости с сайтов mail.ru, lenta.ru, yandex-новости.
+Для парсинга использовать XPath. Структура данных должна содержать:
+название источника;
+наименование новости;
+ссылку на новость;
+дата публикации.
+'''
+
+from lxml import html
+import requests
+
+
+header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
+
+
+def request_to_mail(_str):
+ try:
+ response = requests.get('https://news.mail.ru/', params={'text': _str}, headers=header)
+ root = html.fromstring(response.text)
+ for i in range(1, 5):
+ result = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/span[2]/a/span')
+ link = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/span[2]/a/@href')
+ ist = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/div/span[2]/text()')
+ tim = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/div/span[1]')
+ print([ist[0]], result[0].text, ' ', link[0], tim[0].text)
+ except:
+ print('Ошибка запроса')
+
+
+request_to_mail('')
From bfb3396d2561f2f3e7997acb87c2a0f13828443b Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Wed, 11 Aug 2021 14:42:11 +0500
Subject: [PATCH 21/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_4/1.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/PARSING/Lesson_4/1.py b/PARSING/Lesson_4/1.py
index d13a119..eca8d52 100644
--- a/PARSING/Lesson_4/1.py
+++ b/PARSING/Lesson_4/1.py
@@ -19,11 +19,11 @@ def request_to_mail(_str):
response = requests.get('https://news.mail.ru/', params={'text': _str}, headers=header)
root = html.fromstring(response.text)
for i in range(1, 5):
- result = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/span[2]/a/span')
+ news = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/span[2]/a/span')
link = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/span[2]/a/@href')
ist = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/div/span[2]/text()')
tim = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/div/span[1]')
- print([ist[0]], result[0].text, ' ', link[0], tim[0].text)
+ print([ist[0]], news[0].text, ' ', link[0], tim[0].text)
except:
print('Ошибка запроса')
From a6809cd18710b8dff82898041c6cdc7febd88493 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Wed, 11 Aug 2021 14:50:32 +0500
Subject: [PATCH 22/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_4/1.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/PARSING/Lesson_4/1.py b/PARSING/Lesson_4/1.py
index eca8d52..aab1924 100644
--- a/PARSING/Lesson_4/1.py
+++ b/PARSING/Lesson_4/1.py
@@ -14,9 +14,9 @@
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
-def request_to_mail(_str):
+def request_to_mail():
try:
- response = requests.get('https://news.mail.ru/', params={'text': _str}, headers=header)
+ response = requests.get('https://news.mail.ru/', headers=header)
root = html.fromstring(response.text)
for i in range(1, 5):
news = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/span[2]/a/span')
@@ -28,4 +28,4 @@ def request_to_mail(_str):
print('Ошибка запроса')
-request_to_mail('')
+request_to_mail()
From 28df0bff1e0fafee5fa8aca2cb3ac3288b92fbc7 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Wed, 11 Aug 2021 17:01:30 +0500
Subject: [PATCH 23/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_4/1.py | 37 ++++++++++++++++++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/PARSING/Lesson_4/1.py b/PARSING/Lesson_4/1.py
index aab1924..ec661e4 100644
--- a/PARSING/Lesson_4/1.py
+++ b/PARSING/Lesson_4/1.py
@@ -6,6 +6,7 @@
ссылку на новость;
дата публикации.
'''
+import time
from lxml import html
import requests
@@ -23,9 +24,43 @@ def request_to_mail():
link = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/span[2]/a/@href')
ist = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/div/span[2]/text()')
tim = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/div/span[1]')
- print([ist[0]], news[0].text, ' ', link[0], tim[0].text)
+ print([ist[0]], news[0].text, link[0], tim[0].text)
except:
print('Ошибка запроса')
+def request_to_lenta():
+ url = 'https://lenta.ru/'
+ response = requests.get('https://lenta.ru/', headers=header)
+ root = html.fromstring(response.text)
+ for i in range(5, 10):
+ try:
+ link = root.xpath(f'//*[@id="root"]/section[2]/div/div/div[2]/div[1]/section/div/div[{i}]/a/@href')
+ news = root.xpath(f'//*[@id="root"]/section[2]/div/div/div[2]/div[1]/section/div/div[{i}]/a/text()')
+ print(news[0], url + link[0])
+ except:
+ print('Ошибка запроса')
+
+
+def request_to_yandex():
+ try:
+ response = requests.get('https://yandex.ru/news/', headers=header)
+ root = html.fromstring(response.text)
+ for i in range(2, 6):
+ ist = root.xpath(f'/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div[{i}]/article/div[3]/div[1]/div/span[1]/a')
+ link = root.xpath(f'/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div[{i}]/article/div[3]/div[1]/div/span[1]/a/@href')
+ news = root.xpath(f'/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div[{i}]/article/div[1]/div/a/h2')
+ tim = root.xpath(f'/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div[{i}]/article/div[3]/div[1]/div/span[2]')
+ print([ist[0].text], news[0].text, link[0], tim[0].text)
+ except:
+ print('Ошибка запроса')
+
+
+print('\tnews.mail.ru'.upper())
request_to_mail()
+print('=' * 145)
+print('\tlenta.ru'.upper())
+request_to_lenta()
+print('=' * 145)
+print('\tyandex.ru/news'.upper())
+request_to_yandex()
From 343296312387111e96368c4ae02a8ea2ab924fac Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Wed, 11 Aug 2021 17:10:17 +0500
Subject: [PATCH 24/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_4/1.py | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/PARSING/Lesson_4/1.py b/PARSING/Lesson_4/1.py
index ec661e4..047b29f 100644
--- a/PARSING/Lesson_4/1.py
+++ b/PARSING/Lesson_4/1.py
@@ -6,7 +6,6 @@
ссылку на новость;
дата публикации.
'''
-import time
from lxml import html
import requests
@@ -30,16 +29,16 @@ def request_to_mail():
def request_to_lenta():
- url = 'https://lenta.ru/'
- response = requests.get('https://lenta.ru/', headers=header)
- root = html.fromstring(response.text)
- for i in range(5, 10):
- try:
+ try:
+ url = 'https://lenta.ru/'
+ response = requests.get('https://lenta.ru/', headers=header)
+ root = html.fromstring(response.text)
+ for i in range(5, 10):
link = root.xpath(f'//*[@id="root"]/section[2]/div/div/div[2]/div[1]/section/div/div[{i}]/a/@href')
news = root.xpath(f'//*[@id="root"]/section[2]/div/div/div[2]/div[1]/section/div/div[{i}]/a/text()')
print(news[0], url + link[0])
- except:
- print('Ошибка запроса')
+ except:
+ print('Ошибка запроса')
def request_to_yandex():
From 18d7052b1e1bd53b826f462fa2e7ed9108e8df5f Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Wed, 11 Aug 2021 21:29:00 +0500
Subject: [PATCH 25/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_4/1.py | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/PARSING/Lesson_4/1.py b/PARSING/Lesson_4/1.py
index 047b29f..fe9e882 100644
--- a/PARSING/Lesson_4/1.py
+++ b/PARSING/Lesson_4/1.py
@@ -9,9 +9,11 @@
from lxml import html
import requests
-
+import datetime
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
+now = datetime.datetime.now()
+now = f"{'%d' % now.year}.{'%d' % now.month}.{'%d' % now.day}."
def request_to_mail():
@@ -23,7 +25,7 @@ def request_to_mail():
link = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/span[2]/a/@href')
ist = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/div/span[2]/text()')
tim = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/div/span[1]')
- print([ist[0]], news[0].text, link[0], tim[0].text)
+ print([ist[0]], news[0].text, link[0], now, tim[0].text)
except:
print('Ошибка запроса')
@@ -50,7 +52,7 @@ def request_to_yandex():
link = root.xpath(f'/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div[{i}]/article/div[3]/div[1]/div/span[1]/a/@href')
news = root.xpath(f'/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div[{i}]/article/div[1]/div/a/h2')
tim = root.xpath(f'/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div[{i}]/article/div[3]/div[1]/div/span[2]')
- print([ist[0].text], news[0].text, link[0], tim[0].text)
+ print([ist[0].text], news[0].text, link[0], now, tim[0].text)
except:
print('Ошибка запроса')
@@ -63,3 +65,4 @@ def request_to_yandex():
print('=' * 145)
print('\tyandex.ru/news'.upper())
request_to_yandex()
+
From d3aa633b086a1205372f520357c1f20d27f78d25 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Wed, 11 Aug 2021 21:35:24 +0500
Subject: [PATCH 26/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_4/1.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/PARSING/Lesson_4/1.py b/PARSING/Lesson_4/1.py
index fe9e882..a61b6e0 100644
--- a/PARSING/Lesson_4/1.py
+++ b/PARSING/Lesson_4/1.py
@@ -38,7 +38,7 @@ def request_to_lenta():
for i in range(5, 10):
link = root.xpath(f'//*[@id="root"]/section[2]/div/div/div[2]/div[1]/section/div/div[{i}]/a/@href')
news = root.xpath(f'//*[@id="root"]/section[2]/div/div/div[2]/div[1]/section/div/div[{i}]/a/text()')
- print(news[0], url + link[0])
+ print(news[0], url + link[0], now)
except:
print('Ошибка запроса')
From 977dea5d98a26c61775876a10836105b7bf10b8c Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Wed, 11 Aug 2021 22:00:50 +0500
Subject: [PATCH 27/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_4/1.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/PARSING/Lesson_4/1.py b/PARSING/Lesson_4/1.py
index a61b6e0..af5228a 100644
--- a/PARSING/Lesson_4/1.py
+++ b/PARSING/Lesson_4/1.py
@@ -14,6 +14,7 @@
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
now = datetime.datetime.now()
now = f"{'%d' % now.year}.{'%d' % now.month}.{'%d' % now.day}."
+err = 'Ошибка запроса'
def request_to_mail():
@@ -27,7 +28,7 @@ def request_to_mail():
tim = root.xpath(f'//*[@id="index_page"]/div[7]/div[2]/div[3]/div/div/div/div[{i}]/div/div[2]/div/span[1]')
print([ist[0]], news[0].text, link[0], now, tim[0].text)
except:
- print('Ошибка запроса')
+ print(err)
def request_to_lenta():
@@ -40,7 +41,7 @@ def request_to_lenta():
news = root.xpath(f'//*[@id="root"]/section[2]/div/div/div[2]/div[1]/section/div/div[{i}]/a/text()')
print(news[0], url + link[0], now)
except:
- print('Ошибка запроса')
+ print(err)
def request_to_yandex():
@@ -54,7 +55,7 @@ def request_to_yandex():
tim = root.xpath(f'/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div[{i}]/article/div[3]/div[1]/div/span[2]')
print([ist[0].text], news[0].text, link[0], now, tim[0].text)
except:
- print('Ошибка запроса')
+ print(err)
print('\tnews.mail.ru'.upper())
@@ -65,4 +66,3 @@ def request_to_yandex():
print('=' * 145)
print('\tyandex.ru/news'.upper())
request_to_yandex()
-
From b365d97d5494a3b1d91c5971e60097266279f2d0 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Thu, 12 Aug 2021 21:00:10 +0500
Subject: [PATCH 28/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=202?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_3/2.py | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/PARSING/Lesson_3/2.py b/PARSING/Lesson_3/2.py
index 0be32fd..60bf46e 100644
--- a/PARSING/Lesson_3/2.py
+++ b/PARSING/Lesson_3/2.py
@@ -3,3 +3,34 @@
с заработной платой больше введённой суммы.
'''
+import requests
+from pprint import pprint
+from lxml import html
+from bs4 import BeautifulSoup as bs
+import requests as req
+
+http = 'https://www.superjob.ru'
+s = input('Желаемая зарплата от: ')
+url = f'{http}/vacancy/search/?payment_value={s}'
+
+
+respond = req.get(url)
+soup = bs(respond.text, 'lxml')
+vac = [i.text.strip() for i in soup.find_all(class_="_1h3Zg _2rfUm _2hCDz _21a7u")]
+price = [str(i.text).replace('\xa0', ' ') for i in soup.find_all(class_="_1h3Zg _2Wp8I _2rfUm _2hCDz _2ZsgW")]
+
+vacans = []
+link = []
+
+for i in vac:
+ vacans.append(i)
+
+result = []
+for i in range(20):
+ result.append({
+ 'Вакансия': vacans[i],
+ 'Зарплата': price[i]
+ })
+
+for i in result:
+ print(i)
From 907b497c1aab7d21f5d0ccb19d00979b18124dfb Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Fri, 13 Aug 2021 01:30:02 +0500
Subject: [PATCH 29/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=202?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_3/2.py | 40 ++++++++++++++++++----------------------
1 file changed, 18 insertions(+), 22 deletions(-)
diff --git a/PARSING/Lesson_3/2.py b/PARSING/Lesson_3/2.py
index 60bf46e..c44e970 100644
--- a/PARSING/Lesson_3/2.py
+++ b/PARSING/Lesson_3/2.py
@@ -4,33 +4,29 @@
'''
import requests
-from pprint import pprint
-from lxml import html
from bs4 import BeautifulSoup as bs
-import requests as req
-http = 'https://www.superjob.ru'
-s = input('Желаемая зарплата от: ')
-url = f'{http}/vacancy/search/?payment_value={s}'
+header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
-respond = req.get(url)
-soup = bs(respond.text, 'lxml')
-vac = [i.text.strip() for i in soup.find_all(class_="_1h3Zg _2rfUm _2hCDz _21a7u")]
-price = [str(i.text).replace('\xa0', ' ') for i in soup.find_all(class_="_1h3Zg _2Wp8I _2rfUm _2hCDz _2ZsgW")]
+def get_data(zp):
+ resp = requests.get(f'https://www.rabota.ru/?sort=relevance&min_salary={zp}', headers=header)
+ soup = bs(resp.text, 'lxml')
+ work = []
+ price = []
+ result = []
+ for i in range(20):
+ w = soup.find_all(class_="vacancy-preview-card__title")
+ work.append(w[i].text.strip())
+ p = soup.find_all(class_="vacancy-preview-card__salary vacancy-preview-card__salary-blue")
+ price.append(p[i].text.strip().replace('\xa0', ' '))
-vacans = []
-link = []
+ result.append({
+ 'Вакансия': work[i],
+ 'Зарплата': price[i]
+ })
-for i in vac:
- vacans.append(i)
+ print(result[i])
-result = []
-for i in range(20):
- result.append({
- 'Вакансия': vacans[i],
- 'Зарплата': price[i]
- })
-for i in result:
- print(i)
+get_data(80000)
From 6be1bffa7d98cfa5c09591d9c556c99291fa52bd Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Fri, 13 Aug 2021 11:17:18 +0500
Subject: [PATCH 30/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
PARSING/Lesson_3/1.py | 237 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 237 insertions(+)
diff --git a/PARSING/Lesson_3/1.py b/PARSING/Lesson_3/1.py
index ede4ffa..0d63f36 100644
--- a/PARSING/Lesson_3/1.py
+++ b/PARSING/Lesson_3/1.py
@@ -3,3 +3,240 @@
записывающую собранные вакансии в созданную БД.
'''
+
+from bs4 import BeautifulSoup as bs
+from pprint import pprint
+from pymongo import MongoClient
+import json
+import re
+import requests
+
+
+class ScrapingJob:
+
+ def __init__(self, mongodb_uri, db_name, collection_name):
+ self.headers = {
+ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0'
+ }
+ self.link_hh = 'https://hh.ru/search/vacancy'
+ self.link_seperjob = 'https://www.superjob.ru/vacancy/search/'
+ self.mongodb = MongoClient(mongodb_uri)
+ self.db = self.mongodb[db_name]
+ self.collection = self.db[collection_name]
+
+ def print_salary(self, salary):
+ objects = self.collection.find({'salary_max': {'$gt': salary}})
+ for obj in objects:
+ pprint(obj)
+
+ def search_job(self, vacancy):
+ self._parser_hh(vacancy)
+ self._parser_superjob(vacancy)
+
+ def _parser_hh(self, vacancy):
+ params = {
+ 'text': vacancy,
+ 'search_field': 'name',
+ 'items_on_page': '100',
+ 'page': ''
+ }
+
+ html = self._get_html(self.link_hh, params)
+ last_page = self._get_last_page_hh(html)
+ for page in range(0, last_page):
+ params['page'] = page
+ html = self._get_html(self.link_hh, params)
+ if html.ok:
+ parsed_html = self._get_parsed_html(html)
+ vacancy_items = parsed_html.find('div', {'data-qa': 'vacancy-serp__results'}).find_all('div', {'class': 'vacancy-serp-item'})
+ for item in vacancy_items:
+ vacancy = self._parser_item_hh(item)
+ if self._is_exists('vacancy_link', vacancy['vacancy_link']):
+ self.collection.update_one({'vacancy_link': vacancy['vacancy_link']}, {'$set': vacancy})
+ else:
+ self.collection.insert_one(vacancy)
+
+ def _parser_superjob(self, vacancy):
+ params = {
+ 'keywords': vacancy,
+ 'profession_only': '1',
+ 'geo[c][0]': '15',
+ 'geo[c][1]': '1',
+ 'geo[c][2]': '9',
+ 'page': ''
+ }
+
+ html = self._get_html(self.link_seperjob, params)
+ last_page = self._get_last_page_superjob(html)
+ for page in range(0, last_page + 1):
+ params['page'] = page
+ html = self._get_html(self.link_seperjob, params)
+
+ if html.ok:
+ parsed_html = self._get_parsed_html(html)
+ vacancy_items = parsed_html.find_all('div', {'class': 'f-test-vacancy-item'})
+
+ for item in vacancy_items:
+ vacancy = self._parser_item_superjob(item)
+ if self._is_exists('vacancy_link', vacancy['vacancy_link']):
+ self.collection.update_one({'vacancy_link': vacancy['vacancy_link']}, {'$set': vacancy})
+ else:
+ self.collection.insert_one(vacancy)
+
+ def _parser_item_hh(self, item):
+ vacancy_data = {}
+ # vacancy_name
+ vacancy_name = item.find('div', {'class': 'resume-search-item__name'}).getText().replace(u'\xa0', u' ')
+ vacancy_data['vacancy_name'] = vacancy_name
+
+ # company_name
+ company_name = item.find('div', {'class': 'vacancy-serp-item__meta-info'}).getText().replace(u'\xa0', u' ')
+ vacancy_data['company_name'] = company_name
+
+ # city
+ city = item.find('span', {'class': 'vacancy-serp-item__meta-info'}).getText().split(', ')[0]
+
+ vacancy_data['city'] = city
+
+ # metro station
+ metro_station = item.find('span', {'class': 'vacancy-serp-item__meta-info'}).findChild()
+
+ if not metro_station:
+ metro_station = None
+ else:
+ metro_station = metro_station.getText()
+ vacancy_data['metro_station'] = metro_station
+
+ # salary
+ salary = item.find('div', {'class': 'vacancy-serp-item__compensation'})
+ salary_min = None
+ salary_max = None
+ salary_currency = None
+
+ if salary:
+ salary = salary.getText().replace(u'\xa0', u'')
+ salary = re.split(r'\s|-', salary)
+ if salary[0] == 'до':
+ salary_max = int(salary[1])
+ elif salary[0] == 'от':
+ salary_min = int(salary[1])
+ else:
+ salary_min = int(salary[0])
+ salary_max = int(salary[1])
+ salary_currency = salary[-1]
+ salary_currency = self._get_name_currency(salary_currency)
+ vacancy_data['salary_min'] = salary_min
+ vacancy_data['salary_max'] = salary_max
+ vacancy_data['salary_currency'] = salary_currency
+ # vacancyId
+ vacancy_json = json.loads(item.find('script', {'data-name': 'HH/VacancyResponsePopup/VacancyResponsePopup'})['data-params'])
+ vacancy_id = vacancy_json['vacancyId']
+ # link
+ vacancy_data['vacancy_link'] = f'https://hh.ru/vacancy/{vacancy_id}'
+ # site
+ vacancy_data['site'] = 'hh.ru'
+ return vacancy_data
+
+ def _parser_item_superjob(self, item):
+ vacancy_data = {}
+ # vacancy_name
+ vacancy_name = item.find_all('a')
+ if len(vacancy_name) > 1:
+ vacancy_name = vacancy_name[-2].getText()
+ else:
+ vacancy_name = vacancy_name[0].getText()
+ vacancy_data['vacancy_name'] = vacancy_name
+ # company_name
+ company_name = item.find('span', {'class': 'f-test-text-vacancy-item-company-name'})
+ if not company_name:
+ company_name = item.findParent().find('span', {'class': 'f-test-text-vacancy-item-company-name'}).getText()
+ else:
+ company_name = company_name.getText()
+ vacancy_data['company_name'] = company_name
+ # city
+ company_location = item.find('span', {'class': 'f-test-text-company-item-location'}).findChildren()[1].getText().split(',')
+ vacancy_data['city'] = company_location[0]
+ # metro station
+ if len(company_location) > 1:
+ metro_station = company_location[1]
+ else:
+ metro_station = None
+ vacancy_data['metro_station'] = metro_station
+ # salary
+ salary = item.find('span', {'class': 'f-test-text-company-item-salary'}).findChildren()
+ salary_min = None
+ salary_max = None
+ salary_currency = None
+ if salary:
+ salary_currency = salary[-1].getText()
+ salary_currency = self._get_name_currency(salary_currency)
+ is_check_sarary = item.find('span', {'class': 'f-test-text-company-item-salary'}).getText().replace(u'\xa0', u' ').split(' ', 1)[0]
+ if is_check_sarary == 'до' or len(salary) == 2:
+ salary_max = int(salary[0].getText().replace(u'\xa0', u''))
+ elif is_check_sarary == 'от':
+ salary_min = int(salary[0].getText().replace(u'\xa0', u''))
+ else:
+ salary_min = int(salary[0].getText().replace(u'\xa0', u''))
+ salary_max = int(salary[2].getText().replace(u'\xa0', u''))
+ vacancy_data['salary_min'] = salary_min
+ vacancy_data['salary_max'] = salary_max
+ vacancy_data['salary_currency'] = salary_currency
+ # link
+ vacancy_link = item.find_all('a')
+ if len(vacancy_link) > 1:
+ vacancy_link = vacancy_link[-2]['href']
+ else:
+ vacancy_link = vacancy_link[0]['href']
+ vacancy_data['vacancy_link'] = f'https://www.superjob.ru{vacancy_link }'
+ # site
+ vacancy_data['site'] = 'www.superjob.ru'
+ return vacancy_data
+
+ def _get_last_page_hh(self, html):
+ parsed_html = self._get_parsed_html(html)
+ if parsed_html:
+ page_block = parsed_html.find('div', {'data-qa': 'pager-block'})
+ if not page_block:
+ last_page = 1
+ else:
+ last_page = int(
+ page_block.find_all('a', {'class': 'HH-Pager-Control'})[-2].getText())
+ return last_page
+
+ def _get_last_page_superjob(self, html):
+ parsed_html = self._get_parsed_html(html)
+ if parsed_html:
+ page_block = parsed_html.find('a', {'class': 'f-test-button-1'})
+ if not page_block:
+ last_page = 1
+ else:
+ page_block = page_block.findParent()
+ last_page = int(page_block.find_all('a')[-2].getText())
+ return last_page
+
+ def _get_parsed_html(self, html):
+ if html.ok:
+ parsed_html = bs(html.text, 'html.parser')
+ return parsed_html
+
+ def _get_html(self, link, params=None):
+ html = requests.get(link, params=params, headers=self.headers)
+ return html
+
+ def _is_exists(self, name_tags, field):
+ return bool(self.collection.find_one({name_tags: {"$in": [field]}}))
+
+ def _get_name_currency(self, currency_name):
+ currency_dict = {
+ 'EUR': {' €'},
+ 'KZT': {' ₸'},
+ 'RUB': {' ₽', 'руб.'},
+ 'UAH': {' ₴', 'грн.'},
+ 'USD': {' $'}
+ }
+
+ name = currency_name
+ for item_name, items_list in currency_dict.items():
+ if currency_name in items_list:
+ name = item_name
+ return name
From d3181233c12df257786bc0947642cbab593e22d1 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Sat, 14 Aug 2021 13:19:32 +0500
Subject: [PATCH 31/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=201?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
JS/Lesson_1/1.html | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 JS/Lesson_1/1.html
diff --git a/JS/Lesson_1/1.html b/JS/Lesson_1/1.html
new file mode 100644
index 0000000..0d03025
--- /dev/null
+++ b/JS/Lesson_1/1.html
@@ -0,0 +1,10 @@
+
+
+
+
+ Title
+
+
+
+
+
\ No newline at end of file
From e678ab19da5968430cea3a91b7b618ca77da6d89 Mon Sep 17 00:00:00 2001
From: Yuri <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 14 Aug 2021 13:22:05 +0500
Subject: [PATCH 32/62] Add files via upload
---
JS/Lesson_1/example.js | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 JS/Lesson_1/example.js
diff --git a/JS/Lesson_1/example.js b/JS/Lesson_1/example.js
new file mode 100644
index 0000000..d2b324f
--- /dev/null
+++ b/JS/Lesson_1/example.js
@@ -0,0 +1,4 @@
+let с = prompt('Задайте температуру в градусах по Цельсию: ')
+let f = (9 / 5) * с + 32
+alert('Температура в фаренгейтах =' + f)
+
From 67b6a9ec4ea095eeb7b7a5013a8d1380e49850cd Mon Sep 17 00:00:00 2001
From: Yuri <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 14 Aug 2021 15:21:17 +0500
Subject: [PATCH 33/62] Delete 1.html
---
JS/Lesson_1/1.html | 10 ----------
1 file changed, 10 deletions(-)
delete mode 100644 JS/Lesson_1/1.html
diff --git a/JS/Lesson_1/1.html b/JS/Lesson_1/1.html
deleted file mode 100644
index 0d03025..0000000
--- a/JS/Lesson_1/1.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- Title
-
-
-
-
-
\ No newline at end of file
From b0c600c00072bc2f7c5a9d852f13b6cf015a5f37 Mon Sep 17 00:00:00 2001
From: Yuri <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 14 Aug 2021 15:21:37 +0500
Subject: [PATCH 34/62] Rename example.js to example_1.js
---
JS/Lesson_1/{example.js => example_1.js} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename JS/Lesson_1/{example.js => example_1.js} (100%)
diff --git a/JS/Lesson_1/example.js b/JS/Lesson_1/example_1.js
similarity index 100%
rename from JS/Lesson_1/example.js
rename to JS/Lesson_1/example_1.js
From afea00517d95af1202cc3719bce9b2293c5e3d49 Mon Sep 17 00:00:00 2001
From: Yuri_1967 <9022368@mail.ru>
Date: Sat, 14 Aug 2021 15:25:24 +0500
Subject: [PATCH 35/62] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=202?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
JS/Lesson_1/2.html | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 JS/Lesson_1/2.html
diff --git a/JS/Lesson_1/2.html b/JS/Lesson_1/2.html
new file mode 100644
index 0000000..566549b
--- /dev/null
+++ b/JS/Lesson_1/2.html
@@ -0,0 +1,10 @@
+
+
+
+
+ Title
+
+
+
+
+
\ No newline at end of file
From ef76a807df92dd485b5a96ea01bce7cb4f2a7071 Mon Sep 17 00:00:00 2001
From: Yuri <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 14 Aug 2021 15:26:04 +0500
Subject: [PATCH 36/62] Add files via upload
---
JS/Lesson_1/example_2.js | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 JS/Lesson_1/example_2.js
diff --git a/JS/Lesson_1/example_2.js b/JS/Lesson_1/example_2.js
new file mode 100644
index 0000000..924d38c
--- /dev/null
+++ b/JS/Lesson_1/example_2.js
@@ -0,0 +1,3 @@
+let name = 'Василий'
+let admin = name
+console.log(admin)
From 5e5b943f95ecf099b4b334b79832db4f98f6ff70 Mon Sep 17 00:00:00 2001
From: Yuri <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 14 Aug 2021 15:26:33 +0500
Subject: [PATCH 37/62] Delete 2.html
---
JS/Lesson_1/2.html | 10 ----------
1 file changed, 10 deletions(-)
delete mode 100644 JS/Lesson_1/2.html
diff --git a/JS/Lesson_1/2.html b/JS/Lesson_1/2.html
deleted file mode 100644
index 566549b..0000000
--- a/JS/Lesson_1/2.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
- Title
-
-
-
-
-
\ No newline at end of file
From c377ba536ad1ada305391b4d24e0c204c5ea7bca Mon Sep 17 00:00:00 2001
From: Yuri <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 14 Aug 2021 15:38:06 +0500
Subject: [PATCH 38/62] Add files via upload
---
JS/Lesson_1/3_4_.txt | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 JS/Lesson_1/3_4_.txt
diff --git a/JS/Lesson_1/3_4_.txt b/JS/Lesson_1/3_4_.txt
new file mode 100644
index 0000000..9292e9c
--- /dev/null
+++ b/JS/Lesson_1/3_4_.txt
@@ -0,0 +1,10 @@
+3. Чему будет равно JS-выражение 1000 + "108"
+ Так как 1000 - число,
+ а '108' - строка, то выражение будет равно '1000108'
+
+4. Самостоятельно разобраться с атрибутами тега script (async и defer)
+ async подключает скрипты асинхронно,
+ defer тоже подключает их асинхронно,
+ но в более строгой последовательности.
+ Они как бы не блокируют html страничку во время загрузки, а параллельно грузятся
+
From 36806adcda9f1563a1c005d61c4c261b596e8c57 Mon Sep 17 00:00:00 2001
From: Yuri <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 14 Aug 2021 15:52:07 +0500
Subject: [PATCH 39/62] Update example_1.js
---
JS/Lesson_1/example_1.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/JS/Lesson_1/example_1.js b/JS/Lesson_1/example_1.js
index d2b324f..1700427 100644
--- a/JS/Lesson_1/example_1.js
+++ b/JS/Lesson_1/example_1.js
@@ -1,4 +1,4 @@
let с = prompt('Задайте температуру в градусах по Цельсию: ')
let f = (9 / 5) * с + 32
-alert('Температура в фаренгейтах =' + f)
+alert(`Температура в фаренгейтах: ${f}`)
From 0fb4a77552004afb88dcfe54cd7eccdfade622b6 Mon Sep 17 00:00:00 2001
From: Yuri <57116431+softicer-67@users.noreply.github.com>
Date: Sat, 14 Aug 2021 16:47:21 +0500
Subject: [PATCH 40/62] Add files via upload
---
PARSING/Lesson_3/base.png | Bin 0 -> 138511 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 PARSING/Lesson_3/base.png
diff --git a/PARSING/Lesson_3/base.png b/PARSING/Lesson_3/base.png
new file mode 100644
index 0000000000000000000000000000000000000000..11734bfd3933a763bb19871045f0370790d0c1b8
GIT binary patch
literal 138511
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