diff --git a/TEMA6/report.md b/TEMA6/report.md new file mode 100644 index 0000000..fa114fe --- /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('Введите пароль:') +Введите пароль:12345 +psw +'12345' +type(psw) + +``` + +Пример 1. Ввод с контролем значения. + +```py +while True: + znach=float(input('Задайте коэф.усиления = ')) + if znach<17.5 or znach>23.8: + print('Ошибка!') + else: + break + +Задайте коэф.усиления = 15.4 +Ошибка! +Задайте коэф.усиления = 21.6 +``` + +Пример 2. Ввод и обработка выражения. + +```py +import math +print(eval(input('введите выражение для расчета = '))) +введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) +1.34504378689765 +``` + +## 4. Ввод-вывод при работе с файлами. + +### 4.1 Функции для работы с путем к файлу. + +Используя функцию os.getcwd(), можно получить путь к текущему рабочему каталогу. +При обычном эхо-выводе отображаются двойные обратные слэши, при использовании print() - одинарные. + +```py +import os +os.getcwd() +'C:\\Users\\Настя\\AppData\\Local\\Programs\\Python\\Python313' +Pohil=os.getcwd(); print(Pohil) +C:\Users\Настя\AppData\Local\Programs\Python\Python313 +``` + +Была использована функция os.chdir() для смены рабочего каталога. + +```py +os.chdir('C:\\Users\\Настя\\Desktop\\python-labs\\TEMA6') +os.getcwd() +'C:\\Users\\Настя\\Desktop\\python-labs\\TEMA6' +``` + +Функция os.mkdir() создаёт новый каталог. + +```py +os.mkdir('katalog1') +os.chdir('katalog1') +os.getcwd() +'C:\\Users\\Настя\\Desktop\\python-labs\\TEMA6\\katalog1' +``` + +Функция os.listdir() возвращает список каталогов и файлов, находящихся внутри данного каталога. + +```py +os.chdir('../') +os.listdir() +['.gitkeep', '123.py', 'katalog1', 'report.md'] +``` + +Удаление каталога через os.rmdir(). + +```py +os.rmdir('katalog1') +os.listdir() +['.gitkeep', '123.py', 'report.md'] +``` +os.path.isdir() позволяет проверить наличие каталога. Для несуществующих каталогов, ровно как и для любых файлов, которые не являются в свою очередь каталогами - возвращает False. + +```py +os.path.isdir('report.md') +False +os.chdir('../') +os.path.isdir('TEMA6') +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(drkt) +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 класса _io.TextIOWrapper для работы с текстовыми данными. +В аргументе функции с именем file указывается путь и имя открываемого файла, а в аргументе с именем mode – предполагаемая цель его использования. +Файл по такой инструкции открывается только для записи в файл. Если требуются другие операции с открываемым файлом, то для второго аргумента mode могут быть заданы следующие значения: +w – запись с созданием нового файла или перезапись существующего файла, +w+ - чтение и запись/перезапись файла, +r – только чтение (это значение - по умолчанию), +r+ - чтение и/или запись в существующий файл, +a – запись в конец существующего файла или, если его нет, запись с созданием файла, +a+ - то же, но с возможностью чтения из файла. + +```py +fp=open(file=drkt+'\\zapis1.txt',mode='w') +type(fp); 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'] +``` + +Вообще говоря, аргументы функции при указании их имен могут располагаться в любом порядке. +Если же имя файла располагается на месте первого аргумента, а цель использования – на втором, то имена аргументов можно не указывать, а вводить в соответствующем порядке. +Также если путь в переменной drkt совпадает с рабочим каталогом, то его можно опустить, оставив только имя открываемого файла. + +```py +fp=open(drkt+'\\zapis1.txt','w') +fp=open('zapis1.txt','w') +``` + +Создаваемые и читаемые файлы могут быть бинарными или символьными. При открытии бинарного файла к указанным выше буквам в аргументе-цели надо добавить символ b. + +``` +fp1=open(drkt+'\\zapis2.bin',mode='wb+') +``` + +### 4.4. Закрытие файла. +Сразу после завершения работы с файлом его следует закрыть для обеспечения сохранности его содержимого. + +```py +fp.close() +``` + +### 4.5. Запись информации в файл с помощью метода write + +Метод write относится к объекту – файловой переменной. Пример: + +```py +sps=list(range(1,13)) +fp2=open('zapis3.txt','w') +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. + +```py +fp=open('zapis3.txt') +s1=fp.readline() +s2=fp.readlines() +fp.close() +s1; s2 +'[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..be9b8c6 --- /dev/null +++ b/TEMA6/task.md @@ -0,0 +1,63 @@ +# Общее контрольное задание по теме 6 + +Похил Анастасия, А-02-23 + +## Задание + +Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции: +1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк. +2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников. +3. Записывается кортеж в бинарный файл. +4. Записывается в этот же файл список и закрывается файл. +5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта. +6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение. +7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами. + +## Выполнение + +1. Создание кортежа +```py +import random +tup1=[] +for i in range(125): tup1.append(str(random.randint(6, 56))) +tup1=tuple(tup1); tup1 +('46', '21', '28', '45', '35', '15', '42', '20', '20', '31', '32', '23', '25', '56', '16', '42', '11', '44', '15', '7', '41', '27', '27', '54', '51', '15', '20', '48', '52', '15', '38', '17', '19', '56', '22', '33', '16', '53', '19', '11', '31', '10', '7', '6', '15', '16', '20', '28', '44', '26', '24', '51', '16', '17', '38', '31', '28', '26', '25', '43', '16', '23', '34', '48', '33', '53', '26', '33', '38', '29', '8', '36', '49', '53', '49', '13', '51', '13', '49', '46', '35', '13', '12', '48', '25', '56', '50', '30', '6', '56', '9', '11', '16', '38', '33', '7', '16', '10', '47', '32', '43', '38', '10', '7', '12', '35', '22', '35', '12', '39', '15', '32', '27', '42', '52', '20', '51', '10', '22', '49', '26', '6', '12', '49', '22') +``` + +2-4. Создание списка, запись кортежа и списка в бинарный файл, чтение обоих объектов из файла + +```py +sps1=['Похил', 'Сарайкина', 'Цветкова', 'Шинкаренко', 'Снегура'] +import pickle +fp=open('fil.mnz', 'wb') +pickle.dump(tup1, fp) +pickle.dump(sps1, fp) +fp.close() +fp=open('fil.mnz', 'rb') +tup2=pickle.load(fp) +sps2=pickle.load(fp) +fp.close() +``` + +5. Проверка на совпадение объектов + +```py +print('Кортежи совпадают') if tup1 == tup2 else print('Кортежи не совпадают') +Кортежи совпадают +print('Списки совпадают') if sps1 == sps2 else print('Списки не совпадают') +Списки совпадают +``` + +6. Разделение кортежа на списки по 5 чисел, представленных в строковом виде. + +```py +for i in range(0, len(tup1), 5): + exec('spisk' + str(i//5+1) + '=' + str(list(tup1[i:i+5]))) + +spisk1 +['46', '21', '28', '45', '35'] +spisk2 +['15', '42', '20', '20', '31'] +spisk3 +['32', '23', '25', '56', '16'] +``` \ No newline at end of file