ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.12.2023
Просмотров: 404
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
§ 63. Алгоритмы обработки массивов
§ 63. Алгоритмы обработки массивов
Срезы в Python – отрицательные индексы
Особенности работы со списками
Метод пузырька (сортировка обменами)
Быстрая сортировка (QuickSort)
Сортировка в Python – на месте
Преобразования «строка» – «число»
«С»: Пиксели рисунка закодированы числами (обозначающими цвет) в виде матрицы, содержащей N строк и M столбцов. Выполните поворот рисунка вправо на 90 градусов:
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
7 | 4 | 1 |
8 | 5 | 2 |
9 | 6 | 3 |
§ 68. Работа с файлами
Как работать с файлами?
файлы
текстовые
двоичные
«plain text»:
- текст, разбитый на строки;
- из специальных символов только символы перехода на новую строку
- любые символы
- рисунки, звуки, видео, …
Принцип сэндвича
открыть файл
работа с файлом
закрыть файл
хлеб
хлеб
начинка
Fin = open ( "input.txt" )
Fout = open ( "output.txt", "w" )
# здесь работаем с файлами
Fin.close()
Fout.close()
файловые переменные-указатели
"r" - чтение
"w" – запись
"a" – добавление
по умолчанию – на чтение (режим "r")
Ввод данных
Fin = open( "input.txt" )
s = Fin.readline() # "1 2"
Чтение строки:
Чтение строки и разбивка по пробелам:
s = Fin.readline().split() # ["1","2"]
Чтение целых чисел:
s = Fin.readline().split() # ["1","2"]
a, b = int(s[0]), int(s[1])
или так:
a, b = [int(x) for x in s]
или так:
a, b = map( int, s )
Вывод данных в файл
a = 1
b = 2
Fout = open( "output.txt", "w" )
Fout.write ( "{:d} + {:d} = {:d}\n".format(
a, b, a+b) )
Fout.close()
Все данные преобразовать в строку!
!
пока не конец файла
прочитать число из файла
добавить его к сумме
Задача. В файле записано в столбик неизвестное количество чисел. Найти их сумму.
Fin = open ( "input.txt" )
sum = 0
while True:
s = Fin.readline()
if not s: break
sum += int(s)
Fin.close()
если конец файла, вернёт пустую строку
Задача. В файле записано в столбик неизвестное количество чисел. Найти их сумму.
sum = 0
Fin = open ( "input.txt" )
lst = Fin.readlines()
for s in lst:
sum += int(s)
Fin.close()
прочитать все строки в список строк
Задача. В файле записано в столбик неизвестное количество чисел. Найти их сумму.
sum = 0
with open ( "input.txt" ) as Fin:
for s in Fin:
sum += int(s)
Не нужно закрывать файл!
!
или так:
sum = 0
for s in open ( "input.txt" ):
sum += int(s)
Задачи
«A»: Напишите программу, которая находит среднее арифметическое всех чисел, записанных в файле в столбик, и выводит результат в другой файл.
«B»: Напишите программу, которая находит минимальное и максимальное среди чётных положительных чисел, записанных в файле, и выводит результат в другой файл. Учтите, что таких чисел может вообще не быть.
«C»: В файле в столбик записаны целые числа, сколько их – неизвестно. Напишите программу, которая определяет длину самой длинной цепочки идущих подряд одинаковых чисел и выводит результат в другой файл.
Обработка массивов
Задача. В файле записаны в столбик целые числа. Вывести в другой текстовый файл те же числа, отсортированные в порядке возрастания.
В чем отличие от предыдущей задачи?
?
Для сортировки нужно удерживать все элементы в памяти одновременно.
!
Обработка массивов
Ввод массива:
A = []
while True:
s = Fin.readline()
if not s: break
A.append ( int(s) )
Ввод в стиле Python:
s = Fin.read().split()
A = list ( map(int, s) )
Сортировка:
A.sort()
Обработка массивов
Вывод результата:
Fout = open ( "output.txt", "w" )
Fout.write ( str(A) )
Fout.close()
или так:
for x in A:
Fout.write ( str(x)+"\n" )
[1, 2, 3]
1
2
3
или так:
for x in A:
Fout.write ( "{:4d}".format(x) )
1 2 3
Задачи
«A»: В файле в столбик записаны числа. Отсортировать их по возрастанию последней цифры и записать в другой файл.
«B»: В файле в столбик записаны числа. Отсортировать их по возрастанию суммы цифр и записать в другой файл. Используйте функцию, которая вычисляет сумму цифр числа.
«C»: В двух файлах записаны отсортированные по возрастанию массивы неизвестной длины. Объединить их и записать результат в третий файл. Полученный массив также должен быть отсортирован по возрастанию.
Обработка строк
Задача. В файле записано данные о собаках: в каждой строчке кличка собаки, ее возраст и порода:
Мухтар 4 немецкая овчарка
Вывести в другой файл сведения о собаках, которым меньше 5 лет.
пока не конец файла Fin
прочитать строку из файла Fin
разобрать строку – выделить возраст
если возраст < 5 то
записать строку в файл Fout
Чтение данных из файла
Чтение одной строки:
s = Fin.readline()
Разбивка по пробелам:
data = s.split()
Выделение возраста:
sAge = data[1]
age = int ( sAge )
Кратко всё вместе:
s = Fin.readline()
age = int ( s.split()[1] )
Обработка строк
Fin = open ( "input.txt" )
Fout = open ( "output.txt", "w" )
while True:
s = Fin.readline()
if not s: break
age = int ( s.split()[1] )
if age < 5:
Fout.write ( s )
Fin.close()
Fout.close()
Полная программа:
Обработка строк
lst = Fin.readlines()
for s in lst:
age = int ( s.split()[1] )
if age < 5:
Fout.write ( s )
или так:
for s in open ( "input.txt" ):
age = int ( s.split()[1] )
if age < 5:
Fout.write ( s )
или так:
Задачи
«A»: В файле записаны данные о результатах сдачи экзамена. Каждая строка содержит фамилию, имя и количество баллов, разделенные пробелами:
<Фамилия> <Имя> <Количество баллов>
Вывести в другой файл фамилии и имена тех учеников, которые получили больше 80 баллов.
«B»: В предыдущей задаче добавить к полученному списку нумерацию, сократить имя до одной буквы и поставить перед фамилией:
П. Иванов
И. Петров
...
Задачи
«C»: В файле записаны данные о результатах сдачи экзамена. Каждая строка содержит фамилию, имя и количество баллов, разделенные пробелами:
<Фамилия> <Имя> <Количество баллов>
Вывести в другой файл данные учеников, которые получили больше 80 баллов. Список должен быть отсортирован по убыванию балла. Формат выходных данных:
П. Иванов 98
И. Петров 96
...
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
kpolyakov@mail.ru
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь
eremin@pspu.ac.ru
Источники иллюстраций
- www.mcdonalds.com
- иллюстрации художников издательства «Бином»
- авторские материалы