diff --git a/TEMA6/report.md b/TEMA6/report.md new file mode 100644 index 0000000..9e99f0e --- /dev/null +++ b/TEMA6/report.md @@ -0,0 +1,474 @@ +# Отчет по Теме 6 + +Криви Анастасия, А-02-23 + +## 1. Запуск интерактивная оболочка IDLE. + +## 2. Вывод данных на экран дисплея. + +### 2.1. Вывод в командной строке + +Способ "Эхо-вывод". Он пригоден при работе в командной строке. + +```py +stroka='Автоматизированная система управления' +stroka +'Автоматизированная система управления' +``` + +### 2.2. Вывод с использованием функции print + +```py +fff=234.5;gg='Значение температуры = ' +print(gg, fff) #Можно вывести несколько объектов за одно обращение к функции + +Значение температуры = 234.5 +``` +По умолчанию выводимые объекты разделяются одним пробелом. Если нужен другой разделитель его можно указать в отдельном аргументе sep. + +```py +fff=234.5;gg='Значение температуры = ' +print(gg, fff, sep='/') +Значение температуры = /234.5 +``` +Если курсор надо оставить в той же строке, то следует использовать еще один аргумент. После end= надо указать какими символами должна закончиться выводимая строка или указать пустую строку. + +```py +print(gg, fff,sep='/',end='***'); print('____') +Значение температуры = /234.5***____ +``` +Если в какой-то момент требуется просто перейти на новую строку, можно использовать такое обращение к функции. Оператор вывода может располагаться на нескольких строках с использованием тройных кавычек. + +```py +print(""" Здесь может выводиться +большой текст, +занимающий несколько строк""") + + Здесь может выводиться +большой текст, +занимающий несколько строк +print("Здесь может выводиться", + "большой текст,", + "занимающий несколько строк") + +Здесь может выводиться большой текст, занимающий несколько строк +``` +Тройные кавычки сохраняют переносы строк, выводя текст в несколько строк, а несколько аргументов в print() разделяются пробелами и выводятся в одну строку. + +### 2.3. Вывод с использованием метода write объекта sys.stdout. + +Объект stdout представляет собой поток стандартного вывода – объект, в который программы вы-водят символьное представление данных. + +```py +import sys +sys.stdout.write('Функция write') +Функция write13 +sys.stdout.write('Функция write\n') +Функция write +14 +``` +Если это требуется, то следует в конце строки добавить один или несколько символов “\n”. Функция write() возвращает число — количество успешно записанных символов. + +## 3. Ввод данных с клавиатуры + +Для ввода с клавиатуры используется функция input. Полученный объект имеет строковый тип данных. + +```py +psw=input('Введите пароль:') +Введите пароль:1234 +psw +'1234' +type(psw) + +``` +Пример 1. Ввод с контролем значения. + +```py +while True: + znach=float(input('Задайте коэф.усиления = ')) + if znach<17.5 or znach>23.8: #Число, которое должно находиться в интервале значений от 17.5 до 23.8 + print('Ошибка!') + else: + break + +Задайте коэф.усиления = 15.4 +Ошибка! +Задайте коэф.усиления = 21.6 +``` + +Пример 2. Ввод и обработка выражения. + +```py +import math +print(eval(input('введите выражение для расчета = '))) +введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) +``` +Вывод +```py +1.34504378689765 +``` +## 4. Ввод-вывод при работе с файлами. + +### 4.1 Функции для работы с путем к файлу. + +Используя функцию os.getcwd(), можно получить путь к текущему рабочему каталогу. +При обычном эхо-выводе отображаются двойные обратные слэши, при использовании print() - одинарные. + +```py +import os +os.getcwd() +'C:\\Users\\Сергей\\AppData\\Local\\Programs\\Python\\Python313' #B получаемой символьной строке компоненты пути разделяются двойными обратными слэшами: «\\». Как обычно, при работе с файлами, размещенными в рабочем каталоге, путь доступа к ним можно не указывать +``` +```py +a=os.getcwd() +print(a) +C:\Users\Сергей\AppData\Local\Programs\Python\Python313 +os.getcwd() +'C:\\Users\\Сергей\\AppData\\Local\\Programs\\Python\\Python313' +``` + +Использование функции os.chdir() для смены рабочего каталога. + +```py +os.chdir('C:\\Users\\Сергей\\python-labs\\TEMA6') +os.getcwd() +'C:\\Users\\Сергей\\python-labs\\TEMA6' +``` +Изучение других функций. +Функция os.mkdir() создаёт новый каталог. + +```py +os.mkdir('new'); os.chdir('new'); os.getcwd() +'C:\\Users\\Сергей\\python-labs\\TEMA6\\new' +``` + +Функция os.listdir() возвращает список каталогов и файлов, находящихся внутри данного каталога. + +```py +os.listdir() +['.git', '.gitignore', 'README.md', 'TEMA0', 'TEMA1', 'TEMA2', 'TEMA3', 'TEMA4', 'TEMA5', 'TEMA6', 'TEMA7', 'TEMA8', 'TEMA9'] +``` + +Удаление каталога + +```py +os.listdir() +['.gitkeep', 'new'] +os.rmdir('new') +os.listdir() +['.gitkeep'] +``` +Проверка наличия каталога. Для несуществующих каталогов, ровно как и для любых файлов, которые не являются в свою очередь каталогами - возвращает False. + +```py +os.path.isdir('report.md') +False +os.chdir('../') +os.path.isdir('TEMA5') +True +``` +Был получен путь до файла, имя которого передаётся в качестве аргумента в os.path.abspath(). Затем из абсолютного пути был извлечен путь до каталога, в котором находится файл, затем имя самого файла, после чего был получен кортеж с путём до каталога и именем файла, находящегося внутри него. + +```py +fil=os.path.abspath('report.md'); print(fil) +C:\Users\Сергей\Desktop\python-labs\report.md +fil = os.path.abspath("oplata.dbf") +drkt=os.path.dirname(fil); print(d) +C:\Users\Сергей\Desktop\python-labs +bsn=os.path.basename(fil); print(bsn) +oplata.dbf +os.path.split(fil) +('C:\\Users\\Сергей\\Desktop\\python-labs', 'oplata.dbf') +``` + +Проверка наличия файла с известным расположением с помощью функции os.path.exists. Возвращаемое значение: True или False. + +```py +os.path.exists(fil) +True +fil1=drkt+'\\katalog1'; print(fil1) +C:\Users\Настя\Desktop\python-labs\TEMA6\katalog1 +os.path.exists(fil1) +False +``` + +Проверка на наличие файла с известным расположением с помощью функции, аргументом которой должна быть символьная строка с путем и именем интересующего файла. + +``` +os.path.isfile(fil) +True +os.path.isfile(os.path.dirname(fil)+'fil1.txt') +False +``` +dirname() возвращает путь, то os.path.basename() возвращает имя файла + +### 4.2. Общая схема работы с файлом + +Для обмена данными с файлом необходимо выполнить следующие операции: +1. Открытие файла с указанием его имени и цели (чтение, запись, добавление данных); +2. Выполнение одной или нескольких операций обмена данными с файлом; +3. Закрытие файла. +Далее рассмотрим подробно каждый из указанных пунктов. + +### 4.3. Открытие файла для записи или чтения данных – функция open + +Создание файловый объект fp для работы с текстовыми данными. +В аргументе функции с именем file указывается путь и имя открываемого файла, а в аргументе с именем mode – предполагаемая цель его использования(w=write – для записи). +```py +fp=open(file=drkt+'\\zapis1.txt',mode='w') +``` +Аргументы функции при указании их имен могут располагаться в любом порядке. +Если же имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать, а вводить в соответствующем порядке. +```py +fp=open(drkt+'\\zapis1.txt','w') +``` +Путь в переменной drkt совпадает с рабочим каталогом - его можно опустить, оставив только имя открываемого файла. + +```py +fp=open('zapis1.txt','w') +dir(fp) +['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines'] +``` +Файл по такой инструкции открывается только для записи в файл. Если требуются другие операции с открываемым файлом, то для второго аргумента mode могут быть заданы следующие значения: +w – запись с созданием нового файла или перезапись существующего файла, +w+ - чтение и запись/перезапись файла, +r – только чтение (это значение - по умолчанию), +r+ - чтение и/или запись в существующий файл, +a – запись в конец существующего файла или, если его нет, запись с созданием файла, +a+ - то же, но с возможностью чтения из файла. + +Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ b. +``` +fp1=open(drkt+'\\zapis2.bin',mode='wb+') +``` +В бинарный файл можно записать объекты любого типа. Файл символьный по умолчанию. В символьный файл можно записывать только объекты типа str. Объекты других типов надо перед записью преобразовать к этому типу. + +### 4.4. Закрытие файла. +Сразу после завершения работы с файлом его следует закрыть для обеспечения сохранности его содержимого. + +```py +fp.close() +``` + +### 4.5. Запись информации в файл с помощью метода write + +Метод write относится к объекту – файловой переменной. Cоздание списка с элементами-числами от 1 до 12 и запишите их в файл по 4 числа на строке: + +```py +sps=list(range(1,13)) +fp2.write(str(sps[:4])+'\n') +13 +fp2.write(str(sps[4:8])+'\n') +13 +fp2.write(str(sps[8:])+'\n') +16 +fp2.close() +``` + +Содержимое файла zapis3.txt: + +```py +[1, 2, 3, 4] +[5, 6, 7, 8] +[9, 10, 11, 12] +``` +Создание списка с ФИО - элементами-списками. Запись этих элементов построчно в файл. +``` +sps3=[['Иванов И.',1],['Петров П.',2],['Сидоров С.',3]] +fp3=open('zapis4.txt','w') +for i in range(len(sps3)): + stroka4=sps3[i][0]+' '+str(sps3[i][1]) + fp3.write(stroka4) + +11 +11 +12 +fp3.close() +``` +Содержимое файла zapis4.txt: + +```py +Иванов И. 1Петров П. 2Сидоров С. 3 +``` + +Добавляем '\n': + +```py +gh=open('zapis5.txt','w') +for r in sps3: + gh.write(r[0]+' '+str(r[1])+'\n') + +12 +12 +13 +gh.close() +``` +Новое одержимое файла zapis4.txt: + +```py +Иванов И. 1 +Петров П. 2 +Сидоров С. 3 +``` + +С представлением цикла в одной строке: + +```py +gh=open('zapis5.txt','w') +for r in sps3: gh.write(r[0]+' '+str(r[1])+'\n') + +12 +12 +13 +gh.close() +``` +Отображение результата идентично с предыдущим вариантом записи. +```py +Иванов И. 1 +Петров П. 2 +Сидоров С. 3 +``` + +### 4.6. Первый способ чтения информации из текстового файла. + +```py +sps1=[] +fp=open('zapis3.txt') +for stroka in fp: + stroka=stroka.rstrip('\n') #Удаление символа конца строки + stroka=stroka.replace('[','') #Удаление символа скобки, замена на пробел + stroka=stroka.replace(']','') + sps1=sps1+stroka.split(',') + +fp.close() +sps1 +['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12'] +sps +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +``` + +Полученный при чтении файла список sps1 содержит элементы строкового типа (необходим целочисленный, как в sps) + +```py +sps3=list(map(int, sps1)) +sps3 +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +``` + +### 4.7. Чтение информации из файла с помощью метода read + +В качестве аргумента метода может задаваться целое число – количество символов или, если открыт бинарный файл, - количество байт, которое должно быть прочитано, соответственно, из текстового или бинарного файла, начиная с текущего положения маркера. Если указанное число превышает количество оставшихся символов (байт) в файле, то считываются все оставши-еся символы (байты). Если это число не указано, то считываются вся информация от маркера до конца файла. Метод возвращает строку с символами или совокупность байт, прочитанных из файла. + +```py +fp=open('zapis3.txt') +stroka1=fp.read(12) +stroka2=fp.read() +fp.close() +stroka1; stroka2 +'[1, 2, 3, 4]' +'\n[5, 6, 7, 8]\n[9, 10, 11, 12]\n' +``` + +### 4.8. Чтение информации с помощью методов readline и readlines. + +Метод readline читает файл построчно, каждый вызов возвращает следующую строку. +Метод readlines читает все строки файла и возвращает их в виде списка. +```py +fp=open('zapis3.txt') +sp1=fp.readline() +sp2=fp.readlines() +fp.close() +sp1; sp2 +'[1, 2, 3, 4]\n' +['[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n'] +``` +### 4.9. Ввод-вывод объектов с использованием функций из модуля pickle. + +В модуле pickle содержатся функции для работы с бинарными файлами, в которые могут последовательно записываться или считываться целиком один или несколько объектов из оперативной памяти. + +```py +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} +fp=open('zapis6.mnz','wb') +pickle.dump(mnoz1,fp) +fp.close() +``` + +Содержимое файла zapis6.mnz: + +```py +Ђ•# Џ”(Њpen”Њtable”Њbook”ЊiPhone”ђ. +``` + +При прочтении данных из файла было получено то же самое множество, что и созданное ранее. + +```py +fp=open('zapis6.mnz','rb') +mnoz2=pickle.load(fp) +fp.close() +mnoz2 +{'book', 'table', 'pen', 'iPhone'} +mnoz1 == mnoz2 +True +``` + +При считывании объекты извлекаются из файла в той же последовательности, в которой они в него записывались. + +```py +fp=open('zapis7.2ob','wb') +pickle.dump(mnoz1,fp) +pickle.dump(sps3,fp) +fp.close() +fp=open('zapis7.2ob','rb') +obj1=pickle.load(fp) +obj2=pickle.load(fp) +fp.close() +obj1; obj2 +{'book', 'table', 'pen', 'iPhone'} +[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] +obj1 == mnoz1; obj2 == sps3 +True +True +``` + +## 5. Перенаправление потоков ввода и вывода данных + +```py +import sys +vr_out=sys.stdout +fc=open('Stroka.txt','w') +sys.stdout=fc +print('запись строки в файл') +sys.stdout=vr_out +print('запись строки в файл') +запись строки в файл +fc.close() +``` + +Содержимое файла Stroka.txt: + +```py +запись строки в файл +``` + +Подобным образом можно перенаправить и поток ввода. + +```py +tmp_in = sys.stdin +fd = open("Stroka.txt", "r") +sys.stdin = fd +sys.stdin +<_io.TextIOWrapper name='Stroka.txt' mode='r' encoding='cp1251'> +while True: + try: + line = input () + print(line) + except EOFError: + break + +запись строки в файл +fd.close() +sys.stdin=tmp_in #Не забыть вернуть стандартное назначение для потока ввода +``` + +## 6. Закончен сеанс работы с IDLE. \ No newline at end of file diff --git a/TEMA6/task.md b/TEMA6/task.md new file mode 100644 index 0000000..fc2cd26 --- /dev/null +++ b/TEMA6/task.md @@ -0,0 +1,65 @@ +# Общее контрольное задание по теме 6 + +Криви Анастасия, А-02-23 + +## Задание + +Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции: + +1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк. +2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников. +3. Записывается кортеж в бинарный файл. +4. Записывается в этот же файл список и закрывается файл. +5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта. +6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение. +7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами. + +## Выполнение + +1. Создание объекта-кортежа со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк. +```py +import random +t1=[] +for i in range(125): t1.append(str(random.randint(6,56))) + +t1=tuple(t1);t1 +('32', '20', '6', '10', '51', '52', '16', '37', '35', '8', '51', '31', '23', '47', '45', '51', '42', '56', '30', '51', '36', '33', '24', '41', '16', '33', '22', '44', '39', '27', '13', '33', '29', '8', '33', '33', '18', '34', '35', '7', '12', '14', '17', '7', '51', '31', '23', '19', '38', '50', '37', '47', '56', '56', '35', '15', '33', '11', '25', '17', '28', '7', '35', '56', '23', '12', '19', '56', '21', '45', '27', '14', '47', '34', '33', '16', '21', '48', '18', '46', '39', '31', '13', '42', '35', '24', '50', '43', '52', '34', '35', '53', '16', '23', '50', '51', '49', '17', '35', '52', '36', '29', '45', '45', '25', '25', '47', '22', '56', '50', '27', '45', '17', '51', '46', '23', '9', '28', '24', '15', '48', '35', '54', '16', '39') +``` + +2-4. Создание списка, запись кортежа и списка в бинарный файл, чтение обоих объектов из файла + +```py +s1=['Криви', 'Зеленкина', 'Капитонов', 'Шинкаренко', 'Кузьменко'] +import pickle +fp=open('fil.mnz', 'wb') +pickle.dump(t1, fp) +pickle.dump(s1, fp) +fp.close() +fp=open('fil.mnz', 'rb') +t2=pickle.load(fp) +s2=pickle.load(fp) +fp.close() +``` + +5. Проверка на совпадение объектов + +```py +print('Кортежи совпадают') if t1 == t2 else print('Кортежи не совпадают') +Кортежи совпадают +print('Списки совпадают') if s1 == s2 else print('Списки не совпадают') +Списки совпадают +``` + +6. Разделение кортежа на списки по 5 чисел, представленных в строковом виде. + +```py +for i in range(0, len(t1), 5): + exec('spisk' + str(i//5+1) + '=' + str(list(t1[i:i+5]))) + +spisk1 +['32', '20', '6', '10', '51'] +spisk2 +['52', '16', '37', '35', '8'] +spisk3 +['51', '31', '23', '47', '45'] +``` \ No newline at end of file