Академический Документы
Профессиональный Документы
Культура Документы
A, E, I, O, U, L, N, S, T, R – 1 очко;
D, G – 2 очка;
B, C, M, P – 3 очка;
F, H, V, W, Y – 4 очка;
K – 5 очков;
J, X – 8 очков;
Q, Z – 10 очков.
А русские буквы оцениваются так:
А, В, Е, И, Н, О, Р, С, Т – 1 очко;
Д, К, Л, М, П, У – 2 очка;
Б, Г, Ё, Ь, Я – 3 очка;
Й, Ы – 4 очка;
Ж, З, Х, Ц, Ч – 5 очков;
Ш, Э, Ю – 8 очков;
Ф, Щ, Ъ – 10 очков.
Напишите программу, которая вычисляет стоимость введенного
пользователем слова. Будем считать, что на вход подается только одно слово,
которое содержит либо только английские, либо только русские буквы.
Пример ввода:
ноутбук
Пример вывода:
12
Решение:
Сначала напишем функцию isCyrillic(), которая возвращает True, если
введенное слово содержит кириллические символы, и False, если буквы –
латинские.
Затем создадим словари, где ключами будут очки, а значениями – строки из
букв. Метод items() позволяет обращаться к ключам и значениям
одновременно – если очередная буква в слове входит в одно из значений,
генератор добавит ключ в список, а метод списка sum() подсчитает стоимость
всего слова:
import re
def isCyrillic(text):
return bool(re.search('[а-яА-Я]', text))
points_en = {1:'AEIOULNSTR',
2:'DG',
3:'BCMP',
4:'FHVWY',
5:'K',
8:'JZ',
10:'QZ'}
points_ru = {1:'АВЕИНОРСТ',
2:'ДКЛМПУ',
3:'БГЁЬЯ',
4:'ЙЫ',
5:'ЖЗХЦЧ',
8:'ШЭЮ',
10:'ФЩЪ'}
text = input().upper()
if isCyrillic(text):
print(sum([k for i in text for k, v in points_ru.items() if i in v]))
else:
print(sum([k for i in text for k, v in points_en.items() if i in v]))
Пример ввода:
10
Пример вывода:
палатка
спальный мешок
удочка
термос
салфетки
жвачка
Решение:
Эту классическую задачу комбинаторной оптимизации удобно решать с
помощью словаря, в котором содержатся все вещи. Для сортировки вещей
мы воспользуемся методом sorted() и лямбда-функцией в качестве ключа
сортировки. Решение выглядит так:
things = {'зажигалка': 20, 'компас': 100, 'фрукты': 500, 'рубашка': 300,
'термос': 1000, 'аптечка': 200, 'куртка': 600, 'бинокль': 400, 'удочка': 1200,
'салфетки': 40, 'бутерброды': 820, 'палатка': 5500, 'спальный мешок': 2250,
'жвачка': 10}
ves = int(input()) * 1000
sorted_things = dict(sorted(things.items(), key=lambda x: -x[1]))
for k, v in sorted_things.items():
if v <= ves:
print(k, sep='/n')
ves -= v
Лаб.3. Email-адреса
запись – W;
чтение – R;
запуск – X.
На вход программе подается:
число n – количество файлов;
n строк с именами файлов и допустимыми операциями;
число m – количество запросов к файлам;
m запросов вида «операция файл».
Для каждого допустимого запроса программа должна возвращать OK, для
недопустимого – Access denied.
Пример ввода:
3
python.exe X
book.txt R W
notebook.exe R W X
5
read python.exe
read book.txt
write notebook.exe
execute notebook.exe
write book.txt
Пример вывода:
Access denied
OK
OK
OK
OK
Решение:
Для сопоставления соответствия команд правам доступа создадим словарь
rights, для записи введенных имен – словарь names. Конструкцияprint(('Access
denied', 'OK')[comm in names[n]]), которая выводит результат,
аналогична print('OK' if comm in names[n] else 'Access denied') и заменяет цикл
с условием:
names = {}
rights = {'W': 'write', 'R': 'read', 'X': 'execute'}
for i in range(int(input())):
x = input().split()
names[x[0]] = [rights[i] for i in x[1:]]
for i in range(int(input())):
comm, n = input().split()
print('OK' if comm in names[n] else 'Access denied')
Пример ввода:
5
Сергей Карандаш 3
Андрей Тетрадь 5
Юлия Линейка 1
Сергей Ручка 2
Юлия Книга 4
Пример вывода:
Андрей:
Тетрадь 5
Сергей:
Карандаш 3
Ручка 2
Юлия:
Книга 4
Линейка 1
Решение:
Проще всего такую задачу решить с помощью метода setdefault() – он
позволяет получить значение из словаря по заданному ключу, и
автоматически добавляет в словарь отсутствующие там элементы:
sales = {}
for _ in range(int(input())):
name, item, count = input().split()
sales[name][item] = sales.setdefault(name, {}).setdefault(item, 0) +
int(count)
for key in sorted(sales):
print(f'{key}:')
for i in sorted(sales[key].items()):
print(*i)