b = [
    a ** 3 for a in range(-10, 10)
    if a % 3 == 0
]

b2 = []
for a in range(-10, 10):
    if a % 3 == 0:
        b2.append(a ** 3)
b2

"""
Explanation: Повторим немного пройденное
* Зачем нужен virtualenv?
* Какой командой ставится пакет Python?
* Чем ipython отличается от python?
* Что такое PEP8?
* Как импортировать и вызвать функцию из стороннего модуля?
* Что делает конструкция ниже?
End of explanation
"""


def checkio(arr):
    if not arr:
        return 0
    return sum(arr[::2]) * arr[-1]

"""
Explanation: Разбор задачи 1
https://py.checkio.org/mission/even-last/
End of explanation
"""


def find_message(s):
    return "".join([
        ch for ch in s if ch.isupper()
    ])

def find_message(s):
    msg = ""
    for ch in s:
        if ch.isupper():
            msg += ch
    return msg

find_message("hello world!")

"""
Explanation: Разбор задачи 2
https://py.checkio.org/mission/secret-message/
1. Нам не надо разбивать строку на слова, достаточно пройти по всем символам.
2. Как определить, что символ (строка) в верхнем регистре?
End of explanation
"""


def checkio(num):
    res = 1
    for digit in str(num):
        if digit != "0":
            res *= int(digit)
    return res

"""
Explanation: Разбор задачи 3
https://py.checkio.org/mission/digits-multiplication/
End of explanation
"""


def most_frequent(strings):
    d = {}
    for s in strings:
        if s in d:
            d[s] += 1
        else:
            d[s] = 1
    mx = 1
    res = strings[0]
    for k, v in d.items():
        if v > mx:
            mx = v
            res = k
    return res

from collections import Counter

def most_frequent(strings):
    return Counter(strings).most_common(1)[0][0]

most_frequent(["foo", "bar", "lol", "foo", "lol", "foo"])

"""
Explanation: Разбор задачи 4
https://py.checkio.org/mission/the-most-frequent/
End of explanation
"""


with open("test.txt", "w") as testfile:  # открываем на запись
    testfile.write("Немного текста\n")
    
with open("test.txt", "r") as testfile2:  # открываем на чтение
    a = testfile2.read()
    print(a)
    
with open("test.txt", "r") as testfile3: # еще бывают "rw", "rb", "wb", "a+" и т.д.
    for line in testfile3:
        print(line.split(" ")[0])

with open("test.txt", "w") as testfile:  # открываем на запись
    testfile.write("Немного текста\n")

"""
Explanation: Работа с файлами
End of explanation
"""


import os

# os.listdir("/path/to/dir")
os.getcwd()  # текущий каталог
os.mkdir("testdir")   # создать каталог
os.rmdir("testdir")   # удалить пустой каталог 
os.makedirs("testdir/some_dir/some_other_dir")  # создаем сразу дерево каталогов
os.remove("test.txt")  # удалить файл, аналог os.unlink("test.txt")

os.remove("test.txt")  
print(os.listdir("."))

import shutil

shutil.copytree("testdir", "otherdir")  # скопировать дерево целиком
shutil.rmtree("otherdir")   # удалить непустой каталог со всеми данными
shutil.copyfile("test.txt", "test2.txt") # скопировать файл
shutil.move("test2.txt", "test3.txt")  # переместить файл или каталог

import sys

sys.argv  # список аргументов, с которыми вызвана команда. Первый - сама команда.
sys.stdin  # поток ввода
sys.stdout  # поток вывода
sys.stderr  # поток ошибок

import subprocess

proc = subprocess.Popen("ls", stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
outs, errs = proc.communicate()
print(outs)
print(errs)

"""
Explanation: Система контроля версий Git
https://github.com/enchantner/python-zero

Скачать Git для Windows: https://git-scm.com/downloads
Скачать репозиторий с кодом:
git clone git@github.com:enchantner/python-zero.git


Скачать свежие обновления:
cd python-zero
git pull


Откатить изменения, если команда выше не работает:
git reset --hard HEAD


Добавить файлы для отслеживания
git add /path/to/file.txt


Зафиксировать изменения:
git commit -m "what's changed"


Залить изменения:
git push



Больше встроенных модулей!
* os - https://docs.python.org/3/library/os.html
* shutil - https://docs.python.org/3/library/shutil.html
* sys - https://docs.python.org/3/library/sys.html
* subprocess - https://docs.python.org/3/library/subprocess.html
End of explanation
"""


import json

d = json.loads(a)    # превратить строку в словарь
# print(d['glossary']['GlossDiv'])
s = json.dumps(d)   # превратить словарь обратно в строку

"""
Explanation: Форматы данных - JSON
json
{
  "glossary": {
    "title": "example glossary",
    "GlossDiv": {
      "title": "S",
      "GlossList": {
        "GlossEntry": {
          "ID": 572,
          "SortAs": "SGML",
          "GlossTerm": "Standard Generalized Markup Language",
          "Acronym": "SGML",
          "Abbrev": "ISO 8879:1986",
          "GlossDef": {
            "para": "A meta-markup language, used to create markup languages such as DocBook.",
            "GlossSeeAlso": [
              "GML",
              "XML"
            ]
          },
          "GlossSee": "markup"
        }
      }
    }
  }
}
End of explanation
"""


import yaml
a = ...
yaml.load(a)

"""
Explanation: Форматы данных - YAML
pip install pyyaml
yaml
-  nikolay:
    name: Nikolay Markov
    job: Senior Data Engineer
    skills:
      - python
      - go
      - scala
-  vasily:
    name: Vasily Poupkine
    job: Product Manager
    skills:
      - talk
      - eat
      - sleep
End of explanation
"""


from bs4 import BeautifulSoup as BS

text = """<html>
    <body>
        <div class="container">
            <h2 align='center'>Some cool text</h2>
            <section>Some text here</section>
        </div>
        <ul>
            <li class="first">First choice</li>
            <li>Second choice</li>
        </ul>
    </body>
</html>"""
soup = BS(text, "lxml")

# soup.find_all("li")[0].text
soup.find("div", {"class": "container"}).find("h2", {"align": "center"}).text

"""
Explanation: Форматы данных - HTML
pip install bs4 lxml
html
&lt;html&gt;
    &lt;body&gt;
        &lt;div class="container"&gt;
            &lt;h2 align='center'&gt;header&lt;/h2&gt;
            &lt;section&gt;Some text here&lt;/section&gt;
        &lt;/div&gt;
        &lt;ul&gt;
            &lt;li class="first"&gt;First choice&lt;/li&gt;
            &lt;li&gt;Second choice&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/body&gt;
&lt;/html&gt;
End of explanation
"""


import requests

resp = requests.get("http://python.org")

"""
Explanation: Достаем содержимое сайта
pip install requests
End of explanation
"""


