Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions exercise _1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"""
1. Каждое из слов «разработка», «сокет», «декоратор» представить в строковом формате и проверить
тип и содержание соответствующих переменных. Затем с помощью онлайн-конвертера преобразовать строковые
представление в формат Unicode и также проверить тип и содержимое переменных.
"""


def type_and_content(word_list):
for var in word_list:
print(f'Тип слова "{var}" равен {type(var)}')


if __name__ == '__main__':
str_list = [
'разработка',
'сокет',
'декоратор',
]
unicode_list = [
'\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430',
'\u0441\u043e\u043a\u0435\u0442',
'\u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440',
]
type_and_content(str_list)
print('-' * 40)
type_and_content(unicode_list)
21 changes: 21 additions & 0 deletions exercise _2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
"""
2. Каждое из слов «class», «function», «method» записать в байтовом типе.
Сделать это необходимо в автоматическом, а не ручном режиме, с помощью добавления литеры b к текстовому значению,
(т.е. ни в коем случае не используя методы encode, decode или функцию bytes)
и определить тип, содержимое и длину соответствующих переменных.
"""


def write_in_byte_type(str_list):
for var in str_list:
var = eval(f"b'{var}'")
print(f"Слово {var} имеет тип {type(var)} и длинну {len(var)} символов")


if __name__ == "__main__":
word_list = [
"class",
"function",
"method",
]
write_in_byte_type(word_list)
22 changes: 22 additions & 0 deletions exercise _3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""
3. Определить, какие из слов «attribute», «класс», «функция», «type» невозможно записать в байтовом типе.
Важно: решение должно быть универсальным, т.е. не зависеть от того, какие конкретно слова мы исследуем.
"""


def write_in_byte_type(str_list):
for word in str_list:
try:
word.encode('ascii')
except UnicodeEncodeError:
print(f'Слово "{word}" нельзя записать в байтовом типе')


if __name__ == '__main__':
word_list = [
'attribute',
'класс',
'функция',
'type',
]
write_in_byte_type(word_list)
31 changes: 31 additions & 0 deletions exercise _4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
"""
4. Преобразовать слова «разработка», «администрирование», «protocol», «standard» из строкового представления
в байтовое и выполнить обратное преобразование (используя методы encode и decode).
"""

words_bites = []


def string_to_bytes(str_list):
for word in str_list:
word_bite = word.encode('utf-8')
words_bites.append(word_bite)
print(word_bite)


def bytes_to_string(bite_list):
for word in bite_list:
word_string = word.decode('utf-8')
print(word_string)


if __name__ == '__main__':
word_list = [
'разработка',
'администрирование',
'protocol',
'standard',
]
string_to_bytes(word_list)
print('-' * 40)
bytes_to_string(words_bites)
31 changes: 31 additions & 0 deletions exercise _5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
"""
5. Выполнить пинг веб-ресурсов yandex.ru, youtube.com и преобразовать
результаты из байтовового в строковый тип на кириллице.
"""

import platform
import subprocess

from chardet import detect


def ping(urls, par):
for url in urls:
result = subprocess.Popen(
['ping', par, '4', url],
stdout=subprocess.PIPE,
)
for line in result.stdout:
res = detect(line)
print(res)
line = line.decode(res['encoding']).encode('utf-8')
print(line.decode('utf-8'))


if __name__ == '__main__':
url_list = [
'yandex.ru',
'youtube.com',
]
param = '-n' if platform.system().lower() == 'windows' else '-c'
ping(url_list, param)
34 changes: 34 additions & 0 deletions exercise _6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""
6. Создать текстовый файл test_file.txt, заполнить его тремя строками: «сетевое программирование», «сокет», «декоратор».
Далее забыть о том, что мы сами только что создали этот файл и исходить из того, что перед нами файл
в неизвестной кодировке. Задача: открыть этот файл БЕЗ ОШИБОК вне зависимости от того, в какой кодировке он был создан.
"""

from chardet import detect


def record_file(texts_list):
with open('test_file.txt', 'w', encoding='utf-8') as f:
for text in texts_list:
f.write(text + '\n')


def detect_encoding(file):
with open(file, 'rb') as f:
encoding = detect(f.read())['encoding']
return encoding


def open_file(file_name):
with open(file_name, 'r', encoding=detect_encoding(file_name)) as f:
print(f.read())


if __name__ == '__main__':
texts_l = [
'сетевое программирование',
'сокет',
'декоратор',
]
record_file(texts_l)
open_file('test_file.txt')
3 changes: 3 additions & 0 deletions test_file.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
сетевое программирование
сокет
декоратор