Пользователь № 11 аудитории К-522 1 месяц назад
Родитель cc16eb5dec
Сommit a98cdcbe60

@ -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)
<class 'str'>
```
Пример 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.

@ -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']
```
Загрузка…
Отмена
Сохранить