Главная страница

книга заданий пайтон. книга практических заданий, pyton. Сборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python


Скачать 2.24 Mb.
НазваниеСборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python
Анкоркнига заданий пайтон
Дата02.10.2022
Размер2.24 Mb.
Формат файлаdocx
Имя файлакнига практических заданий, pyton.docx
ТипСборник упражнений
#709959
страница68 из 69
1   ...   61   62   63   64   65   66   67   68   69

Упражнение 163. Популярные детские имена


##

# Отображаем мужские и женские имена, бывшие самыми популярными как минимум

# в одном году с 1900–го по 2012–й

#

FIRST_YEAR = 1900

LAST_YEAR = 2012

## Загружаем первую строку из файла, извлекаем имя и добавляем его к списку имен,

# если его там еще нет

# @param fname – имя файла, из которого будут считываться данные

# @param names – список, к которому будем добавлять данные (если они отсутствуют) # @return (None) def LoadAndAdd(fname, names): # Открываем файл, читаем первую строку и извлекаем имя inf = open(fname, "r") line = inf.readline() inf.close() parts = line.split() name = parts[0]

# Добавляем имя в список, если оно там еще не присутствует if name not in names: names.append(name)

# Отображаем мужские и женские имена, бывшие самыми популярными как минимум # в одном году с 1900–го по 2012–й def main(): # Создаем списки для хранения самых популярных имен girls = [] boys = []

# Обрабатываем все годы из диапазона, читая первые строки из файлов с мужскими и женскими именами for year in range(FIRST_YEAR, LAST_YEAR + 1):

girl_fname = "../Data/BabyNames/" + str(year) + \ "_GirlsNames.txt" boy_fname = "../Data/BabyNames/" + str(year) + \ "_BoysNames.txt"

В данном решении я предположил, что файл с именами лежит не в той же папке, где файл Python. Если ваши файлы находятся в той же директории, часть пути к файлу ../Data/BabyNames/ нужно пропустить.

LoadAndAdd(girl_fname, girls)

LoadAndAdd(boy_fname, boys)

# Выводим списки print("Самые популярные имена девочек:") for name in girls: print(" ", name) print()

print("Самые популярные имена мальчиков: ") for name in boys: print(" ", name)

# Вызов основной функции main()

Упражнение 167. Проверяем правильность написания


##

# Находим и отображаем все слова в файле, написанные неправильно # from only_words import onlyTheWords import sys WORDS_FILE = "../Data/words.txt"

# Убедимся, что программе передано допустимое количество аргументов командной строки if len(sys.argv) != 2:

print("При вызове программы должен быть указан один аргумент.") print("Завершаем программу...") quit()

# Открываем файл. Выходим, если возникла ошибка try:

inf = open(sys.argv[1], "r") except:

print("Ошибка при открытии файла '%s' на чтение. Завершаем программу..." % \ sys.argv[1]) quit()

# Загружаем все слова в словарь. В значения ставим 0, но использовать его не будем valid = {} words_file = open(WORDS_FILE, "r")

for word in words_file: # Переводим слово в нижний регистр и удаляем символ новой строки word = word.lower().rstrip()

# Добавляем слово в словарь valid[word] = 0 words_file.close()

В данном решении используются словари со словами в виде ключей и неиспользуемыми значениями. В целом эффективнее в этой ситуации будет использовать наборы (set), если вы знакомы с подобной структурой данных. Списки использовать не рекомендуется из-за их медлительности при поиске элементов.

# Читаем все строки из файла, добавляя слова с ошибками в соответствующий список misspelled = [] for line in inf: # Избавляемся от знаков препинания при помощи функции из упражнения 117 words = onlyTheWords(line) for word in words: # Если слово написано неправильно и отсутствует в списке, добавляем его туда if word.lower() not in valid and word not in misspelled: misspelled.append(word)

# Закрываем анализируемый файл inf.close()

# Отображаем слова с ошибками или сообщение об их отсутствии if len(misspelled) == 0:

print("Все слова написаны правильно.") else:

print("Следующие слова написаны неправильно:") for word in misspelled: print(" ", word)

Упражнение 169. Редактирование текста в файле


##

# Редактируем файл, удаляя в нем служебные слова. Отредактированная версия

# записывается в новый файл

#

# Заметьте, что в этой программе не выполняются проверки на ошибки

# и она регистрозависимая

#

# Запрашиваем у пользователя имя файла для редактирования и открываем его inf_name = input("Введите имя файла для редактирования: ") inf = open(inf_name, "r")

# Запрашиваем у пользователя имя файла со служебными словами и открываем его sen_name = input("Введите имя файла со служебными словами: ") sen = open(sen_name, "r")

# Загружаем все служебные слова в список words = [] line = sen.readline()

while line != "":

line = line.rstrip() words.append(line) line = sen.readline()

# Закрываем файл со служебными словами sen.close()

Файл со служебными словами может быть закрыт в середине программы, поскольку все слова из него уже считаны в список.

# Запрашиваем у пользователя имя нового файла и открываем его outf_name = input("Введите имя нового файла: ") outf = open(outf_name, "w")

# Считываем все строки из исходного файла. Заменяем все служебные слова на звездочки. # Пишем строки в новый файл.

line = inf.readline() while line != "": # Ищем и заменяем служебные слова. Количество звездочек соответствует # длине исходного слова for word in words: line = line.replace(word, "*" * len(word))

# Пишем измененную строку в новый файл outf.write(line)

# Читаем следующую строку из исходного файла line = inf.readline()

# Закрываем исходный и новый файлы inf.close() outf.close()
1   ...   61   62   63   64   65   66   67   68   69


написать администратору сайта