🏆 151 курс за 1 подписку: хватит выбирать — бери все и сразу!

Один клик — 151 возможность. Подпишись на OTUS сейчас!
Техномир мчится вперед, а вместе с ними растут и требования к специалистам. OTUS придумал крутую штуку — подписку на 151 курс по всем ключевым направлениям IT!
-
Почему подписка OTUS меняет правила игры:
- Доступ к 151 курсу от практикующих экспертов
- В 3 раза выгоднее, чем покупать каждый курс отдельно
- До 3 курсов одновременно без дополнительных затрат
- Свобода выбора направления — меняй треки когда угодно
Изучай новое, развивайся в своем темпе, меняй направления — подпишись на OTUS и прокачивай скилы по полной!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576. Erid 2VtzqupFnNL
Стоимость заказа
Имеется текстовый файл prices.txt с информацией о заказе из интернет магазина. В нем каждая строка с помощью символа табуляции \t
разделена на три колонки:
- наименование товара;
- количество товара (целое число);
- цена (в рублях) товара за 1 шт. (целое число).
Напишите программу, подсчитывающую общую стоимость заказа.
Решение
Способ 1:
from operator import mul
with open('prices.txt') as file:
print(sum(map(lambda line: mul(*map(int, line.split()[1:])), file)))
Способ 2:
import pandas as pd
df = pd.read_csv('prices.txt', sep ='\t', header = None)
df.columns = ['Товар', 'Количество', 'Цена']
df['Итого'] = df['Количество'] * df['Цена']
summa_zakaza = sum(df['Итого'])
print(summa_zakaza)
Способ 3:
with open('prices.txt') as f:
print(sum(eval('*'.join(s.split()[1:])) for s in f))
Способ 4:
with open('prices.txt') as f:
print(sum(map(lambda x: int(x[1]) * int(x[2]), map(str.split, f.readlines()))))
Способ 5:
from functools import reduce
with open('prices.txt') as f:
file = open('prices.txt', mode='r', encoding='utf-8')
print(reduce(lambda x, y: x + int(y[1]) * int(y[2]), [i.split('\t') for i in [i.strip() for i in file.readlines()]], 0))
Поиск слова в текстовом файле
Напишите программу, которая принимает поисковый запрос и выводит названия текстовых файлов, содержащих искомую подстроку. Все файлы располагаются в директории D:\Python\Textfiles.
Формат ввода
Строка, содержащая поисковый запрос.
Формат вывода
Список текстовых файлов, содержащих введенную пользователем подстроку.
Пример ввода:
словарь
Пример вывода:
challenges-for-beginners-5.md
dictionaries-2.md
dictionaries.md
challenges-for-beginners.md
merge-dictionaries.md
dictionaries-4.md
dictionaries-3.md
Решение
Поскольку слово может встречаться в одном и том же файле несколько раз, есть смысл сохранять результаты поиска во множестве set
.
import os
if __name__ == '__main__':
folder = 'D:\\Python\\Textfiles'
answ = set()
search = input()
for filename in os.listdir(folder):
filepath = os.path.join(folder, filename)
with open(filepath, 'r', encoding = 'utf-8') as fp:
for line in fp:
if search in line:
answ.add(filename)
for i in answ:
print(i)
Словарь из CSV-файла
Имеется файл data.csv, содержащий информацию в csv-формате. Напишите функцию read_csv() для чтения данных из этого файла. Она должна возвращать список словарей, интерпретируя первую строку как имена ключей, а каждую последующую строку как значения этих ключей. Функция read_csv() не должна принимать аргументов.
Решение
Способ 1:
import csv
def read_csv():
with open("data.csv") as f:
a = [{k: v for k, v in row.items()}
for row in csv.DictReader(f, skipinitialspace=True)]
return a
Способ 2:
def read_csv():
with open('data.csv') as file:
keys = file.readline().strip().split(',')
return [dict(zip(keys, line.strip().split(','))) for line in file]
Способ 3:
def read_csv():
with open('data.csv', encoding='utf-8') as file:
info = list(map(lambda x: x.strip().split(','), file.readlines()))
return [dict(zip(info[0], j)) for j in info[1:]]
Способ 4:
from csv import DictReader
def read_csv():
with open('data.csv') as file_object:
data = DictReader(file_object)
ans = list(data)
return ans
Способ 5:
def read_csv():
with open("data.csv") as data_file:
dict_list = []
keys = data_file.readline().strip().split(",")
for values in data_file:
dict_list.append(dict(zip(keys, values.strip().split(","))))
return dict_list
Информация о файле
Имеется файл file.txt с текстом на латинице. Напишите программу, которая выводит следующую статистику по тексту:
- количество букв латинского алфавита;
- число слов;
- число строк.
Пример ввода и вывода
Предположим, что file.txt содержит приведенный ниже текст:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
В этом случае программа должна вывести информацию о файле в следующем виде:
Input file contains:
108 letters
20 words
4 lines
Решение
Способ 1:
with open('file.txt') as f:
txt = f.read()
print('Input file contains:')
print(sum(map(str.isalpha, txt)), 'letters')
print(len(txt.split()), 'words')
print(txt.count('\n') + 1, 'lines')
Способ 2:
with open('file.txt') as f:
res = f.readlines()
f.seek(0)
words = f.read().split()
let = sum(len([y for y in x if y.isalpha()]) for x in words)
print('Input file contains:')
print(f'{let} letters')
print(f'{len(words)} words')
print(f'{len(res)} lines')
Способ 3:
with open('file.txt') as f:
print('Input file contains:')
print(len(list(filter(lambda x: x.isalpha(), f.read()))), 'letters')
f.seek(0)
print(len(f.read().split()), 'words')
f.seek(0)
print(len(list(f.readlines())), 'lines')
Способ 4:
with open('file.txt') as file:
lst = file.read()
lines = lst.count('\n') + 1
words = len(lst.split())
letters = len([c for c in lst if c.isalpha()])
print(f'Input file contains:\n{letters} letters\n{words} words\n{lines} lines')
Способ 5:
with open('file.txt') as f:
t = f.read()
f.seek(0)
print('Input file contains:')
print(f'{len(list(filter(str.isalpha, t)))} letters')
print(f'{len(t.split())} words')
print(f'{len(f.readlines())} lines')
Запрещенные слова
Напишите программу, которая получает на вход строку с названием текстового файла, и выводит на экран содержимое этого файла, заменяя все запрещенные слова звездочками *
(количество звездочек равно количеству букв в слове). Запрещенные слова, разделенные символом пробела, хранятся в текстовом файле forbidden_words.txt. Все слова в этом файле записаны в нижнем регистре. Программа должна заменить запрещенные слова, где бы они ни встречались, даже в середине другого слова. Замена производится независимо от регистра: если файл forbidden_words.txt содержит запрещенное слово exam, то слова exam, Exam, ExaM, EXAM и exAm должны быть заменены на ****
.
Формат ввода
Строка текста с именем существующего текстового файла, в котором необходимо заменить запрещенные слова звездочками.
Формат вывода
Текст, отредактированный в соответствии с условием задачи.
Пример ввода вывода
Предположим, что forbidden_words.txt содержит следующие запрещенные слова:
hello email python the exam wor is
А текст файла, подлежащего цензуре, выглядит так:
Hello, world! Python IS the programming language of thE future. My EMAIL is....
PYTHON is awesome!!!!
Тогда программа должна вывести отредактированный текст в таком виде:
*****, ***ld! ****** ** *** programming language of *** future. My ***** **....
****** ** awesome!!!!
Решение
Способ 1:
with open('forbidden_words.txt') as forbidden_words, open(input()) as to_change:
pattern, text = forbidden_words.read().split(), to_change.read()
text_lower = text.lower()
for word in pattern:
text_lower = text_lower.replace(word, '*' * len(word))
result = ''.join((y, x)[x == '*'] for x, y in zip(text_lower, text))
print(result)
Способ 2:
with open('forbidden_words.txt') as f:
forbidden_words = {word: '*' * len(word) for word in f.read().split()}
with open(input()) as f:
s = f.read()
s_lower = s.lower()
for forbidden_word in forbidden_words:
s_lower = s_lower.replace(forbidden_word, forbidden_words[forbidden_word])
print(*map((lambda c1, c2: '*' if c2 == '*' else c1), s, s_lower), sep='')
Способ 3:
with open("forbidden_words.txt", encoding="utf-8") as file, open(input()) as infile:
text = infile.read()
for f in file.read().strip("\n").split():
pos = text.lower().find(f)
while pos > -1:
text = text[:pos] + "*" * len(f) + text[pos+len(f):]
pos = text.lower().find(f)
print(text)
Способ 4:
import re
with open(input()) as inp, open('forbidden_words.txt') as fw:
text, forbidden = inp.read(), fw.read().split()
for i in forbidden:
text = re.sub(i, '*' * len(i), text, flags=re.I)
print(text)
Способ 5:
with open(input(), encoding='utf-8') as r, open('forbidden_words.txt', encoding='utf-8') as s:
w = s.read().split()
v = r.read()
l = v.lower()
for i in w:
l = l.replace(i, '*' * len(i))
[print(j if j == '*' else i, end='') for i, j in zip(v, l)]
Комментарии