diff --git a/TEMA6/OPLATA.DBF.py b/TEMA6/OPLATA.DBF.py new file mode 100644 index 0000000..e69de29 diff --git a/TEMA6/Stroka.txt b/TEMA6/Stroka.txt new file mode 100644 index 0000000..48d3f7e --- /dev/null +++ b/TEMA6/Stroka.txt @@ -0,0 +1 @@ + diff --git a/TEMA6/report6.md b/TEMA6/report6.md new file mode 100644 index 0000000..c471762 --- /dev/null +++ b/TEMA6/report6.md @@ -0,0 +1,350 @@ +# Отчёт по Теме 6 +Таболин Иван, А-01-23 +## 1. Запуск среды IDLE и первоначальная настройка. +```py +import os +os.chdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6") +``` +## 2. Вывод данных на экран дисплея. +## 2.1. Вывод в командной строке. +"Эхо-вывод" +```py +stroka='Автоматизированная система управления';stroka +'Автоматизированная система управления' +``` +## 2.2. Вывод с использованием `print`. +Вывод сразу нескольких объектов за одно обращение к функции. +```py +fff=234.5;gg='Значение температуры = ' +print(gg,fff) +Значение температуры = 234.5 +``` +По умолчанию выводимые объекты разделяются пробелом, но можно указать разделитель в отдельном аргументе `sep`. +```py +print(gg,fff,sep='/') +Значение температуры = /234.5 +``` +После вывода автоматически осуществляется переход на другую строку. Если курсор надо оставить в той же строке, используется аргумент `end`. +```py +print(gg,fff,sep='/',end='***');print('___') +Значение температуры = /234.5***___ +``` +С помощью обращения к функции `print` без указания аргументов можно перейти на новую строку. +С помощью тройных кавычек оператор вывода может располагаться на нескольких строках +```py +print("""Здесь может выводиться +большой текст, +занимающий несколько строк""") +Здесь может выводиться +большой текст, +занимающий несколько строк +print("Здесь может выводиться", + "большой текст,", + "занимающий несколько строк") +Здесь может выводиться большой текст, занимающий несколько строк +``` +В первом случае вывод осуществляется на разных строках в соответствии с аргументом функции (аргумент один). А во втором случае у функции три аргумента, разделитель между которыми по умолчанию является пробелом. +## 2.3. Вывод с помощью `write` объекта `sys.stdout`. +```py +import sys +sys.stdout.write('Функция write') +Функция write13 +sys.stdout.write('Функция write\n') +Функция write +14 +``` +Метод `write` объекта `sys.stdout` выводит текст и возвращает количество байтов, записанных в строку. +## 3. Ввод данных с клавиатуры. +```py +psw=input('Введите пароль:') +Введите пароль:12345 +psw +'12345' +``` +Пример 1. Ввод с контрлем значения. +```py +while True: + znach=float(input('Задайте коэф. усиления = ')) + if znach<17.5 or znach>23.8: + print('Ошибка!') + else: + break + + +Задайте коэф. усиления = 15.4 +Ошибка! +Задайте коэф. усиления = 21.6 +``` +Пример 2. Ввод и обработка выражения, подлежащего расчету +```py +print(eval(input('введите выражение для расчета = '))) +введите выражение для расчета = math.log10(23/(1+math.exp(-3.24))) +1.34504378689765 +``` +## 4. Ввод-вывод при работе с файлами. +Модуль `os` был импортирован в начале работы. +```py +os.getcwd() + +'C:\\Users\\User\\Desktop\\python-labs\\TEMA6' +Tabolin=os.getcwd();print(Tabolin) + +C:\Users\User\Desktop\python-labs\TEMA6 +Tabolin + +'C:\\Users\\User\\Desktop\\python-labs\\TEMA6' +``` +Изучение некоторых методов модуля `os`. +```py +os.mkdir("directory1") # создание папки directory1 +os.rmdir("directory1") # удаление папки directiry1 +os.listdir() # вывод всех папок рабочего каталога + +['.gitkeep', 'report6.md', 'Ris1.png', 'Ris2.png'] +import os.path +os.path.isdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6") # проверяет наличие указанного пути в рабочем каталоге + +True +os.path.isdir("C:\\Users\\User\\Desktop\\python-labs") + +True +os.path.isdir("C:\\Users\\User\\Desktop\\python-labs\\TEMA6\\report6.md") +False +``` + +```py +fil=os.path.abspath("oplata.dbf") +print(fil) +C:\Users\User\Desktop\python-labs\TEMA6\oplata.dbf +``` + +```py +fil=os.path.abspath("report6.md") +print(fil) +C:\Users\User\Desktop\python-labs\TEMA6\report6.md +``` +Выделение пути доступа к файлу и имя файла из строки, полученной в результате выполнения метода `os.path.abspath` +```py +drkt=os.path.dirname(fil) +print(drkt) +C:\Users\User\Desktop\python-labs\TEMA6 +name=os.path.basename(fil);print(name) +report6.md +``` +```py +os.path.split(fil) # создает кортеж с двумя элементами: путь к файлу и название файла +('C:\\Users\\User\\Desktop\\python-labs\\TEMA6', 'report6.md') +type(os.path.split(fil)) + +``` +```py +os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA6') # проверяет .существует ли путь +True +os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA5') +True +os.path.exists('C:\\Users\\User\\Desktop\\python-labs\\TEMA10') +False +os.path.isfile(fil) # проверяет наличие файла с известным расположением +True +``` +## 4.2. Общая схема работы с файлом. +Для обмена данными с файлом необходимо выполнить слдующие операции: + открыть файл с указанием его имени и цели (чтение, запись, добавление данных) + выполнить одну или несколько операций обмена данными с файлом + закрыть файл +## 4.3. Открытие файла для записи или чтения данных. +Выполняется с помощью функции `open`. +```py +fp=open(file=drkt+'\\zapis1.txt',mode='w') +``` +`fp` - файловый объект, он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя файла. +В качестве аргументов указывается путь и имя, открываемого файла, а также цель использования (`w=write` - для записи). +```py +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'] +``` +Некоторые значения аргумента `mode`: + w – запись с созданием нового файла или перезапись существующего файла, + w+ - чтение и запись/перезапись файла, + r – только чтение (это значение - по умолчанию), + r+ - чтение и/или запись в существующий файл, + a – запись в конец существующего файла или, если его нет, запись с созданием файла, + a+ - то же, что и в «a», но с возможностью чтения из файла. +Для того, чтобы открыть бинарный файл требуется добавить символ `b` указанным выше значениям аргумента `mode`, например: +```py +fp1=open(drkt+'\\zapis2.bin',mode='wb+') +``` +Значение символьного файла `t` указывается по умолчанию, указывать его не требуется. +## 4.4. Закрытие файла. +```py +fp.close() +fp1.close() +``` +## 4.5. Запись информации в файл. +Выполняется с поомщью метода `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() +``` + +```py +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() +``` + +```py +gh=open('zapis5.txt','w') +for r in sps3: + gh.write(r[0]+' '+str(r[1])+'\n') + + +12 +12 +13 +gh.close() +``` + +## 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() +print(sps1) +['1', ' 2', ' 3', ' 4', '5', ' 6', ' 7', ' 8', '9', ' 10', ' 11', ' 12'] +``` +```py +sps2=[] +for i in sps1: + sps2.append(int(i)) + +print(sps2) +[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() +print(stroka1,stroka2,sep='\n') +[1, 2, 3, 4] + +[5, 6, 7, 8] +[9, 10, 11, 12] +``` +## 4.8. Третий способ чтения ифнормации. +С помощью методов `readline` и `readlines`. +`readline` читает одну строку, начиная с положения маркера +`readlines` читает все строки и возвращает список +```py +fp=open('zapis3.txt', 'r') +stroka1=fp.readline();print(stroka1) +[1, 2, 3, 4] + +stroka2=fp.readline();print(stroka2) +[5, 6, 7, 8] + +fp.close() + +fp=open('zapis3.txt','r') # файл открыт заново, для того чтобы вернуть маркер в начало +vse_stroki=fp.readlines();print(vse_stroki) +['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n'] +vse_stroki +``` +## 4.9. Ввод-вывод объектов. +С использованием функций из модуля `pickle` +```py +import pickle +mnoz1={'pen','book','pen','iPhone','table','book'} +fp=open('zapis6.mnz','wb') +pickle.dump(mnoz1, fp) +fp.close() +``` +```py +fp=open('zapis6.mnz','rb') +mnoz2=pickle.load(fp) +fp.close() +print(mnoz2) +{'book', 'pen', 'iPhone', 'table'} +mnoz1 == mnoz2 +True +``` +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() +print(obj1,obj2,sep='\n') +{'book', 'pen', 'iPhone', 'table'} +[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]] +``` +## 5. Перенаправление потоков ввода и вывода данных. +```py +import sys +vr_out=sys.stdout # запомнили текущий вывод в переменной +fc=open('Stroka.txt','w') +sys.stdout=fc # перенаправиои вывод в открытый файл +print('запись строки в файл') # вывели строку в файл (на экарне она не отобразилась) +sys.stdout=vr_out # вернули предыдущий вывод +print('запись строки на экран') +запись строки на экран +fc.close() +``` + +```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. diff --git a/TEMA6/task6.md b/TEMA6/task6.md new file mode 100644 index 0000000..1faf9a8 --- /dev/null +++ b/TEMA6/task6.md @@ -0,0 +1,92 @@ +# Общее контрольное задание по Теме 6 +Таболин Иван, А-01-23 +## Задание +Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции: + 1. Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представ-ленными в виде символьных строк. + 2. Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников. + 3. Записывается кортеж в бинарный файл. + 4. Записывается в этот же файл список и закрывается файл. + 5. Открывается этот файл для чтения и считывает из него данные в 2 новых объекта. + 6. Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообще-ние. + 7. Разделяется кортеж на совокупности по 5 чисел в каждой и они записываются в виде отдельных списков со своими именами. +## Решение +1. +```py +stroka='' +for i in range(125): + stroka+=str(random.randint(6,56))+' ' +stroka=stroka[:-1] +kort=tuple(stroka.split(' '));print(kort, len(kort)) +('15', '8', '50', '41', '20', '49', '43', '34', '22', '11', '42', '34', '15', '23', '25', '42', '9', '10', '26', '28', '26', '7', '30', '50', '19', '23', '9', '39', '19', '13', '27', '46', '20', '32', '13', '28', '7', '27', '18', '41', '28', '10', '27', '44', '32', '22', '37', '7', '6', '46', '34', '36', '8', '47', '43', '30', '9', '23', '20', '52', '26', '34', '50', '50', '47', '50', '46', '50', '29', '46', '23', '8', '29', '21', '32', '29', '36', '9', '53', '11', '34', '10', '28', '17', '10', '21', '40', '30', '23', '26', '48', '15', '48', '9', '29', '17', '42', '28', '37', '23', '30', '38', '9', '55', '17', '35', '31', '52', '17', '12', '27', '9', '53', '14', '17', '22', '11', '13', '54', '45', '15', '52', '23', '11', '37') 125 +``` +2. +```py +surnames=['Tabolin','Berezhkov','Krishtul','Stepanischev','Filippov'] +print(surnames) +['Tabolin', 'Berezhkov', 'Krishtul', 'Stepanischev', 'Filippov'] +``` +3. +```py +import pickle +fb=open('taskb.bin','wb') +pickle.dump(kort, fb) +``` +4. +```py +pickle.dump(surnames,fb) +fb.close() +``` +5. +```py +fb=open('taskb.bin','rb') +inp1=pickle.load(fb) +inp2=pickle.load(fb) +print(inp1,inp2,sep='\n') +('15', '8', '50', '41', '20', '49', '43', '34', '22', '11', '42', '34', '15', '23', '25', '42', '9', '10', '26', '28', '26', '7', '30', '50', '19', '23', '9', '39', '19', '13', '27', '46', '20', '32', '13', '28', '7', '27', '18', '41', '28', '10', '27', '44', '32', '22', '37', '7', '6', '46', '34', '36', '8', '47', '43', '30', '9', '23', '20', '52', '26', '34', '50', '50', '47', '50', '46', '50', '29', '46', '23', '8', '29', '21', '32', '29', '36', '9', '53', '11', '34', '10', '28', '17', '10', '21', '40', '30', '23', '26', '48', '15', '48', '9', '29', '17', '42', '28', '37', '23', '30', '38', '9', '55', '17', '35', '31', '52', '17', '12', '27', '9', '53', '14', '17', '22', '11', '13', '54', '45', '15', '52', '23', '11', '37') +['Tabolin', 'Berezhkov', 'Krishtul', 'Stepanischev', 'Filippov'] +fb.close() +``` +6. +```py +if (inp1==kort) and (inp2==surnames): + print('Вывод в файл и последующее чтение из файла выполнено корректно.') +else: + print('Ошибка!') + + +Вывод в файл и последующее чтение из файла выполнено корректно. +``` +7. +```py +for i in range(125//5): + exec('spis'+str(i)+'='+str(list(inp1[i:i+5]))) + +for i in range(125//5): + exec('print(spis'+str(i)+')') + +['15', '8', '50', '41', '20'] +['8', '50', '41', '20', '49'] +['50', '41', '20', '49', '43'] +['41', '20', '49', '43', '34'] +['20', '49', '43', '34', '22'] +['49', '43', '34', '22', '11'] +['43', '34', '22', '11', '42'] +['34', '22', '11', '42', '34'] +['22', '11', '42', '34', '15'] +['11', '42', '34', '15', '23'] +['42', '34', '15', '23', '25'] +['34', '15', '23', '25', '42'] +['15', '23', '25', '42', '9'] +['23', '25', '42', '9', '10'] +['25', '42', '9', '10', '26'] +['42', '9', '10', '26', '28'] +['9', '10', '26', '28', '26'] +['10', '26', '28', '26', '7'] +['26', '28', '26', '7', '30'] +['28', '26', '7', '30', '50'] +['26', '7', '30', '50', '19'] +['7', '30', '50', '19', '23'] +['30', '50', '19', '23', '9'] +['50', '19', '23', '9', '39'] +['19', '23', '9', '39', '19'] +``` diff --git a/TEMA6/taskb.bin b/TEMA6/taskb.bin new file mode 100644 index 0000000..ed03c29 Binary files /dev/null and b/TEMA6/taskb.bin differ diff --git a/TEMA6/zapis1.txt b/TEMA6/zapis1.txt new file mode 100644 index 0000000..e69de29 diff --git a/TEMA6/zapis2.bin b/TEMA6/zapis2.bin new file mode 100644 index 0000000..e69de29 diff --git a/TEMA6/zapis3.txt b/TEMA6/zapis3.txt new file mode 100644 index 0000000..8132aa8 --- /dev/null +++ b/TEMA6/zapis3.txt @@ -0,0 +1,3 @@ +[1, 2, 3, 4] +[5, 6, 7, 8] +[9, 10, 11, 12] diff --git a/TEMA6/zapis4.txt b/TEMA6/zapis4.txt new file mode 100644 index 0000000..edd0c45 --- /dev/null +++ b/TEMA6/zapis4.txt @@ -0,0 +1 @@ + . 1 . 2 . 3 \ No newline at end of file diff --git a/TEMA6/zapis5.txt b/TEMA6/zapis5.txt new file mode 100644 index 0000000..ecde2d7 --- /dev/null +++ b/TEMA6/zapis5.txt @@ -0,0 +1,3 @@ + . 1 + . 2 + . 3 diff --git a/TEMA6/zapis6.mnz b/TEMA6/zapis6.mnz new file mode 100644 index 0000000..2c76364 Binary files /dev/null and b/TEMA6/zapis6.mnz differ diff --git a/TEMA6/zapis7.2ob b/TEMA6/zapis7.2ob new file mode 100644 index 0000000..387f56e Binary files /dev/null and b/TEMA6/zapis7.2ob differ