добавил отчет и ОКЗ

main
PodolskyNK 3 недель назад
Родитель 391f7fe49e
Сommit 11d1382048

@ -0,0 +1,8 @@
{\rtf1\ansi\ansicpg1251\cocoartf2867
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
\f0\fs24 \cf0 123}

@ -0,0 +1 @@
запись строки в файл

@ -0,0 +1,335 @@
# Отчет по Теме 6
Подольский Никита, А-01-23
## 1. Начало работы
Запуск IDLE, установление рабочего каталога
## 2. Вывод данных на экран дисплея
### 2.1 Вывод в командной строке.
```python
stroka='Автоматизированная система управления'
stroka
'Автоматизированная система управления'
```
### 2.2 Вывод с использованием функции print
```python
>>> fff=234.5;gg='Значение температуры = '
>>> print(gg, fff) #Можно вывести несколько объектов за одно обращение к функции
Значение температуры = 234.5
>>> print(gg, fff, sep='/')
Значение температуры = /234.5
>>> print(gg, fff,sep='/',end='***'); print('____')
Значение температуры = /234.5***____
>>> print()
>>> print(""" Здесь может выводиться
большой текст,
занимающий несколько строк""")
Здесь может выводиться
большой текст,
занимающий несколько строк
>>> print("Здесь может выводиться",
"большой текст,",
"занимающий несколько строк")
Здесь может выводиться большой текст, занимающий несколько строк
```
### 2.3 Вывод с использованием метода write объекта sys.stdout
Объект stdout представляет собой поток стандартного вывода – объект, в который программы выводят символьное представление данных. Обычно это – экран дисплея. Объект находится в модуле sys, который надо импортировать
```python
>>> import sys
>>> sys.stdout.write('Функция write')
Функция write13
>>> sys.stdout.write('Функция write\n')
Функция write
14
```
## 3.Ввод данных с клавиатуры.
```python
>>> psw=input('Введите пароль:')
Введите пароль:12345
>>> type(psw)
<class 'str'>
>>> while True:
znach=float(input('Задайте коэф.усиления ='))
if znach<17.5 or znach>23.8:
print('Ошибка!')
else:
break
Задайте коэф.усиления =15.4
Ошибка!
Задайте коэф.усиления =21.6
>>> import math
print(eval(input('введите выражение для расчета = ')))
введите выражение для расчета = math.log10(23/(1+math.exp(-3.24)))
1.34504378689765
```
## 4.Ввод-вывод при работе с файлами.
### 4.1. Функции для работы с путем к файлу.
```python
>>> import os
>>> os.getcwd()
'/Users/nickpod/Documents'
>>> Podolsky = os.getcwd()
>>> print(Podolsky)
'/Users/nickpod/Documents'
```
#### 4.2
```python
>>> os.chdir("/Users/nickpod/Documents/python-labs")
>>> os.getcwd()
'/Users/nickpod/Documents/python-labs'
>>> os.mkdir("aa") #Создание папки в рабочем каталоге
>>> os.rmdir("aa") #Удаление папки
>>> os.path.isdir("/Users/nickpod/Documents/python-labs") #Проверка существует ли каталог
True
>>> os.path.abspath("OPLATA.DBF")
'/Users/nickpod/Documents/python-labs/README.md'
>>> fil=os.path.abspath("OPLATA.DBF")
>>> fil
'/Users/nickpod/Documents/python-labs/OPLATA.DBF'
>>> drkt=os.path.dirname(fil)
>>> drkt
'/Users/nickpod/Documents/python-labs'
>>> os.path.basename(fil)
'OPLATA.DBF'
>>> os.path.split(fil)
('/Users/nickpod/Documents/python-labs', 'OPLATA.DBF')
>>> os.path.exists(fil)
True
>>> os.path.isfile(fil)
True
>>> os.path.isfile(os.path.dirname(fil)+'fil1.txt')
False
>>> os.listdir(".")
['TEMA4', '.DS_Store', 'TEMA3', 'TEMA2', 'TEMA5', 'README.md', '.gitignore', 'TEMA9', 'TEMA0', 'TEMA7', 'TEMA6', 'TEMA1', 'TEMA8', '.git']
```
![[Pasted image 20251124095143.png]]
### 4.3.Открытие файла для записи или чтения данных – функция open.
```python
>>> fp=open(file=drkt+'\\zapis1.txt',mode='w')
>>> drkt
'/Users/nickpod/Documents/python-labs'
>>> 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']
>>> fp=open(drkt+'\\zapis1.txt','w')
>>> fp=open('zapis1.txt','w')
>>> fp
<_io.TextIOWrapper name='zapis1.txt' mode='w' encoding='UTF-8'>
>>> fp1=open(drkt+'\\zapis2.bin',mode='wb+')
>>> drkt
'/Users/nickpod/Documents/python-labs'
>>> fp.close()
```
Здесь *fp* – это файловый объект, который в других языках программирования обычно называют файловой переменной. Он сохраняет ссылку на открываемый файл и позволяет в дальнейшем ссылаться на файл, не указывая путь и имя открытого файла.
w – запись с созданием нового файла или перезапись существующего файла,
w+ - чтение и запись/перезапись файла,
r – только чтение (это значение - по умолчанию),
r+ - чтение и/или запись в существующий файл,
a – запись в конец существующего файла или, если его нет, запись с созданием файла,
a+ - то же, что и в «a», но с возможностью чтения из файла.
Если файл – символьный, то его тип обозначается «t», но это – значение по умолчанию и его можно не указывать. В символьный файл можно записывать только объекты типа str. Объекты других типов надо перед записью преобразовать к этому типу.
### 4.5. Запись информации в файл с помощью метода write.
```python
>>> 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()
```
Числа `13`, `13`, `16`, которые выводит интерпретатор, — это просто сколько символов он записал в файл при каждом вызове `write`.
**Результат:**
![[Pasted image 20251124102125.png]]
```python
>>> 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()
>>> gh=open('zapis5.txt','w')
>>> for r in sps3:
gh.write(r[0]+' '+str(r[1])+'\n')
12
12
13
>>> gh.close()
```
**Результат:**
![[Pasted image 20251124102259.png]]
![[Pasted image 20251124102316.png]]
### 4.6. Первый способ чтения информации из текстового файла.
```python
>>> 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']
>>> for i in range(len(sps1)):
sps1[i] = int(sps1[i])
>>> sps1==sps
True
```
### 4.7. Чтение информации из файла с помощью метода read.
```python
>>> fp=open('zapis3.txt')
>>> stroka1=fp.read(12)
>>> stroka2=fp.read()
>>> fp.close()
>>> print(stroka1)
[1, 2, 3, 4]
>>> print(stroka2)
[5, 6, 7, 8]
[9, 10, 11, 12]
```
### 4.8. Чтение информации с помощью методов readline и readlines.
```python
>>> fp=open('zapis3.txt')
>>> strok1 = fp.readline()
>>> strok1
'[1, 2, 3, 4]\n'
>>> print(strok1)
[1, 2, 3, 4]
>>> fp.close()
>>> fp=open('zapis3.txt');stroka1=fp.readlines()
>>> print(stroka1)
['[1, 2, 3, 4]\n', '[5, 6, 7, 8]\n', '[9, 10, 11, 12]\n']
>>> fp.close()
```
### 4.9. Ввод-вывод объектов с использованием функций из модуля pickle
В модуле **pickle** содержатся функции для работы с бинарными файлами, в которые могут последовательно записываться или считываться целиком один или несколько объектов из оперативной памяти.
```python
>>> import pickle
>>> mnoz1={'pen','book','pen','iPhone','table','book'} #Объект типа «множество»
>>> fp=open('zapis6.mnz','wb') # Бинарный файл – на запись
>>> pickle.dump(mnoz1,fp) #dump – метод записи объекта в файл
>>> fp.close()
>>> fp=open('zapis6.mnz','rb')
>>> mnoz2=pickle.load(fp) #load – метод чтения объекта из бинарного файла
>>> fp.close()
>>> mnoz2 == mnoz1
True
>>> mnoz1
{'book', 'table', 'pen', 'iPhone'}
>>> mnoz2
{'table', 'book', 'pen', 'iPhone'}
>>> sps3
[['Иванов И.', 1], ['Петров П.', 2], ['Сидоров С.', 3]]
>>> fp=open('zapis7.2ob','wb')
>>> pickle.dump(mnoz1,fp)
>>> pickle.dump(sps3,fp)
>>> fp.close()
>>> fp=open('zapis7.2ob','rb')
>>> obj1=pickle.load(fp) #Первое обращение к load читает первый объект
>>> obj2=pickle.load(fp) #Второе – читает второй
>>> fp.close()
>>> sps3==obj2
True
>>> mnoz1==obj1
True
```
![[Pasted image 20251124104208.png]]
![[Pasted image 20251124104800.png]]
## 5.Перенаправление потоков ввода и вывода данных.
```python
>>> import sys
>>> vr_out=sys.stdout #Запоминаем текущий поток вывода
>>> fc=open('Stroka.txt','w') #Откроем файл вывода
>>> sys.stdout=fc #Перенацеливаем стандартный поток вывода на файл
>>> print('запись строки в файл') #Вывод теперь будет не на экран, а в файл
>>> sys.stdout=vr_out #Восстановление текущего потока
>>> print('запись строки на экран') #Убеждаемся, что вывод на экран восстановился
запись строки на экран
>>> fc.close()
>>> 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 #Не забыть вернуть стандартное назначение для потока ввода
```
![[Pasted image 20251124104911.png]]
## 6. Закрытие среды IDLE

@ -0,0 +1,74 @@
# Общее контрольное задание по теме 6
Подольский Никита, А-01-23
## Задание
Придумайте инструкции и запишите их в файл с расширением .py , которые выполняют следующие операции:
·       Создаётся объект-кортеж со 125 целыми случайными числами из диапазона от 6 до 56, представленными в виде символьных строк.
·       Создаётся объект-список с вашей фамилией и 4 фамилиями ваших одноклассников.
·       Записывается кортеж в бинарный файл.
·       Записывается в этот же файл список и закрывается файл.
·       Открывается этот файл для чтения и считывает из него данные в 2 новых объекта.
·       Проверяется на совпадение новых объектов с исходными и выводится соответствующее сообщение.
·       Разделяется кортеж на  совокупности по 5 чисел в каждой и они записываются  в виде отдельных списков со своими именами.
## Решение
``` python
import random
import pickle
# фиксируем сид
SEED = 12345
random.seed(SEED)
rn = tuple(str(random.randint(6, 56)) for i in range(125))
print(rn)
spis = ["Podolsky", "Bushmanov", "Terehov", "Melnikov", "Zhalnin"]
fp = open('data.bin', 'wb')
pickle.dump(rn, fp)
pickle.dump(spis, fp)
fp.close()
fp = open('data.bin', 'rb')
rn1 = pickle.load(fp)
print(rn1)
spis1 = pickle.load(fp)
fp.close()
if rn == rn1:
print("Переменные rn и rn1 совпадают")
else:
print("Переменные rn и rn1 не совпадают")
if spis == spis1:
print("Переменные spis и spis1 совпадают")
else:
print("Переменные spis и spis1 не совпадают")
#разбиение кортежа на списки по 5 элементов
for i in range(0, 125, 5): # идём по кортежу шагом 5
exec('list' + str(i // 5 + 1) + ' = ' + # создаём list1 итд
str(list(rn1[i:i+5]))) # берём по 5 элементов
print(list1)
print(list2)
print(list5)
('32', '52', '6', '25', '29', '18', '23', '42', '33', '16', '29', '13', '33', '22', '41', '46', '17', '45', '41', '17', '28', '53', '52', '11', '39', '53', '32', '43', '38', '16', '15', '19', '52', '10', '18', '27', '26', '7', '35', '27', '7', '38', '50', '53', '32', '6', '6', '48', '16', '55', '43', '17', '24', '12', '47', '32', '12', '49', '42', '17', '53', '30', '20', '39', '44', '51', '27', '8', '20', '13', '37', '19', '53', '54', '41', '48', '17', '22', '43', '33', '39', '14', '8', '16', '25', '6', '15', '20', '28', '40', '27', '16', '30', '26', '6', '9', '9', '51', '34', '11', '30', '17', '56', '6', '55', '51', '29', '19', '49', '38', '54', '13', '36', '45', '9', '6', '46', '37', '26', '55', '45', '32', '41', '18', '29')
('32', '52', '6', '25', '29', '18', '23', '42', '33', '16', '29', '13', '33', '22', '41', '46', '17', '45', '41', '17', '28', '53', '52', '11', '39', '53', '32', '43', '38', '16', '15', '19', '52', '10', '18', '27', '26', '7', '35', '27', '7', '38', '50', '53', '32', '6', '6', '48', '16', '55', '43', '17', '24', '12', '47', '32', '12', '49', '42', '17', '53', '30', '20', '39', '44', '51', '27', '8', '20', '13', '37', '19', '53', '54', '41', '48', '17', '22', '43', '33', '39', '14', '8', '16', '25', '6', '15', '20', '28', '40', '27', '16', '30', '26', '6', '9', '9', '51', '34', '11', '30', '17', '56', '6', '55', '51', '29', '19', '49', '38', '54', '13', '36', '45', '9', '6', '46', '37', '26', '55', '45', '32', '41', '18', '29')
Переменные rn и rn1 совпадают
Переменные spis и spis1 совпадают
['32', '52', '6', '25', '29']
['18', '23', '42', '33', '16']
['28', '53', '52', '11', '39']
```

@ -0,0 +1,41 @@
import random
import pickle
# фиксируем сид
SEED = 12345
random.seed(SEED)
rn = tuple(str(random.randint(6, 56)) for i in range(125))
print(rn)
spis = ["Podolsky", "Bushmanov", "Terehov", "Melnikov", "Zhalnin"]
fp = open('data.bin', 'wb')
pickle.dump(rn, fp)
pickle.dump(spis, fp)
fp.close()
fp = open('data.bin', 'rb')
rn1 = pickle.load(fp)
print(rn1)
spis1 = pickle.load(fp)
fp.close()
if rn == rn1:
print("Переменные rn и rn1 совпадают")
else:
print("Переменные rn и rn1 не совпадают")
if spis == spis1:
print("Переменные spis и spis1 совпадают")
else:
print("Переменные spis и spis1 не совпадают")
#разбиение кортежа на списки по 5 элементов
for i in range(0, 125, 5): # идём по кортежу шагом 5
exec('list' + str(i // 5 + 1) + ' = ' + # создаём list1 итд
str(list(rn1[i:i+5]))) # берём по 5 элементов
print(list1)
print(list2)
print(list5)

@ -0,0 +1,3 @@
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 10, 11, 12]

@ -0,0 +1 @@
Иванов И. 1Петров П. 2Сидоров С. 3

@ -0,0 +1,3 @@
Иванов И. 1
Петров П. 2
Сидоров С. 3

Двоичные данные
TEMA6/zapis6.mnz

Двоичный файл не отображается.

Двоичные данные
TEMA6/zapis7.2ob

Двоичный файл не отображается.
Загрузка…
Отмена
Сохранить