Кортежи и словари
.docx1.Даны ящики, которые вмещают 5 кг, 10 кг и 15 кг яблок. Необходимо выяснить, сколько ящиков разного размера понадобится для того, чтобы распределить X кг яблок. X – вводится во время работы программы. (Чем меньше ящиков, тем лучше.)
Мы создадим кортеж с размерами ящиков, например (15, 10, 5). Таким образом, у нас есть 3 разных типа ящиков, которые могут вместить 15 кг, 10 кг и 5 кг яблок соответственно.
Для хранения количества ящиков каждого размера мы будем использовать словарь, где ключами будут размеры ящиков, а значениями — количество таких ящиков.
Будем начинать с самого большого ящика (15 кг), пока не распределим все яблоки.
После этого переходим к меньшему размеру ящика (10 кг), и затем к 5 кг.
Для каждого типа ящика будем вычислять, сколько его нужно для оставшихся яблок и обновлять остаток.
def distribute_apples(X):
# Размеры ящиков
box_sizes = (15, 10, 5)
# Словарь для хранения количества ящиков
box_count = {size: 0 for size in box_sizes}
# Процесс распределения яблок по ящикам
for size in box_sizes:
box_count[size] = X // size # Считаем, сколько ящиков данного размера поместится
X %= size # Оставшиеся яблоки после использования ящиков этого размера
# Если остались яблоки, которые не могут поместиться в ящики
if X > 0:
print("Оставшиеся яблоки не помещаются в доступные ящики.")
return
# Выводим результат
print(f"Для {X} кг яблок потребуется:")
for size in box_sizes:
if box_count[size] > 0:
print(f"{box_count[size]} ящиков по {size} кг")
# Вводим количество яблок
X = int(input("Введите количество яблок в кг: "))
distribute_apples(X)
Результат:
Для 35 кг яблок потребуется:
2 ящика по 15 кг
1 ящик по 5 кг
2.В кортеже хранятся: имя и оценки студентов вашей группы. Напишите программу, которая выводит имена студентов, у которых оценка равна введенной с клавиатуры оценке.
def find_students_with_grade(students, grade):
# Пробегаем по каждому студенту и его оценкам
for name, grades in students:
if grade in grades:
print(name)
# Пример данных: кортежи, где первый элемент - имя, второй - список оценок
students = [
("Alice", [5, 4, 3, 5]),
("Bob", [2, 3, 5, 5]),
("Charlie", [3, 4, 3, 4]),
("David", [4, 4, 5, 5])
]
# Вводим нужную оценку
grade = int(input("Введите оценку: "))
# Выводим имена студентов с этой оценкой
find_students_with_grade(students, grade)
Результат:
Alice
Bob
David
3. Создайте словарь «Рыбы», а его элементы разделите на 3 вида: «речные», «озерные» и «морские рыбы». Выведите на экран сначала только ключи, а потом элементы словаря.
Для создания словаря с разделением рыбы на три вида (речные, озерные и морские), мы можем использовать структуру, где ключами будут являться категории (например, "речные", "озерные", "морские"), а значениями — списки рыбы, относящейся к каждой категории.
Затем, программа выведет сначала ключи словаря, а затем элементы (рыбы), соответствующие этим ключам.
# Создаем словарь
fishes = {
"речные": ["щука", "окунь", "карп"],
"озерные": ["форель", "плотва", "сазан"],
"морские": ["тунец", "лосось", "сельдь"]
}
# Выводим только ключи словаря
print("Ключи словаря (категории рыб):")
for key in fishes.keys():
print(key)
# Выводим элементы словаря (рыбы)
print("\nЭлементы словаря (рыбы):")
for key, values in fishes.items():
print(f"{key}: {', '.join(values)}")
Результат:
Ключи словаря (категории рыб):
речные
озерные
морские
Элементы словаря (рыбы):
речные: щука, окунь, карп
озерные: форель, плотва, сазан
морские: тунец, лосось, сельдь
4. Дан кортеж (3, 's', 1, 5, 's'). Выведите на экран: количество всех элементов кортежа, количество строк 's', индекс первого вхождения 's' в кортеж
# Данный кортеж
t = (3, 's', 1, 5, 's')
# 1. Количество всех элементов в кортеже
total_elements = len(t)
# 2. Количество строк 's' в кортеже
count_s = t.count('s')
# 3. Индекс первого вхождения строки 's'
first_index_s = t.index('s')
# Выводим результаты
print(f"Количество всех элементов кортежа: {total_elements}")
print(f"Количество строк 's' в кортеже: {count_s}")
print(f"Индекс первого вхождения 's': {first_index_s}")
Результат:
Количество всех элементов кортежа: 5
Количество строк 's' в кортеже: 2
Индекс первого вхождения 's': 1
len(t) — возвращает количество элементов в кортеже.
t.count('s') — подсчитывает, сколько раз встречается элемент 's' в кортеже.
t.index('s') — находит индекс первого вхождения строки 's' в кортеже.
5. Дан словарь d = {'1': 1.29, '2': 0.43}. Используя доступ к элементам словаря по ключу, найдите произведение 1.29*0.43, после чего добавьте результат в словарь, а затем выведите значение нового элемента на экран.
# Исходный словарь
d = {'1': 1.29, '2': 0.43}
# 1. Получаем значения по ключам
value1 = d['1']
value2 = d['2']
# 2. Находим произведение
result = value1 * value2
# 3. Добавляем результат в словарь
d['result'] = result
# 4. Выводим значение нового элемента
print(f"Значение нового элемента 'result': {d['result']}")
6. Создайте словарь, связав его с переменной school, и наполните данными, которые бы отражали количество учащихся в разных классах (1а, 1б, 2б, 6а, 7в и т. п.). Внесите изменения в словарь согласно следующему: а) в одном из классов изменилось количество учащихся, б) в школе появился новый класс, с) в школе был расформирован (удален) другой класс. Вычислите общее количество учащихся в школе.
Функции для внесения изменений:
change_students(class_name, new_count) — изменяет количество учащихся в указанном классе.
add_class(class_name, students) — добавляет новый класс.
remove_class(class_name) — удаляет класс.
Дополнительная информация:
print_max_min_class() — выводит класс с наибольшим и наименьшим количеством учащихся.
calculate_total_students() — выводит общее количество учащихся в школе.
sort_classes_by_students() — сортирует классы по количеству учащихся (по убыванию) и выводит информацию.
Внесение изменений и вывод:
В программе есть функции, которые изменяют количество учащихся в классе, добавляют новый класс и удаляют класс. После каждого изменения выводится результат.
Программа сортирует классы и выводит информацию о классе с наибольшим и наименьшим количеством учащихся.
# Исходный словарь с количеством учащихся в разных классах
school = {
'1а': 25,
'1б': 28,
'2б': 30,
'6а': 22,
'7в': 26,
'5а': 24,
'3б': 29
}
# Функция для отображения информации о классе
def print_class_info():
print("Информация о классах:")
for class_name, students in school.items():
print(f"{class_name}: {students} учащихся")
# а) Изменим количество учащихся в нескольких классах
def change_students(class_name, new_count):
if class_name in school:
old_count = school[class_name]
school[class_name] = new_count
print(f"Количество учащихся в классе {class_name} изменилось с {old_count} на {new_count}.")
else:
print(f"Класс {class_name} не найден.")
# б) Добавим новый класс
def add_class(class_name, students):
if class_name not in school:
school[class_name] = students
print(f"Класс {class_name} добавлен с {students} учащимися.")
else:
print(f"Класс {class_name} уже существует.")
# в) Удалим класс
def remove_class(class_name):
if class_name in school:
del school[class_name]
print(f"Класс {class_name} был удален.")
else:
print(f"Класс {class_name} не найден.")
# г) Выводим класс с наибольшим и наименьшим количеством учащихся
def print_max_min_class():
max_class = max(school, key=school.get)
min_class = min(school, key=school.get)
print(f"Класс с наибольшим количеством учащихся: {max_class} ({school[max_class]} учащихся)")
print(f"Класс с наименьшим количеством учащихся: {min_class} ({school[min_class]} учащихся)")
# д) Выводим количество учащихся в школе
def calculate_total_students():
total_students = sum(school.values())
print(f"Общее количество учащихся в школе: {total_students}")
# е) Сортировка классов по количеству учащихся
def sort_classes_by_students():
sorted_classes = sorted(school.items(), key=lambda x: x[1], reverse=True)
print("Сортировка классов по количеству учащихся:")
for class_name, students in sorted_classes:
print(f"{class_name}: {students} учащихся")
# Основной цикл программы
def main():
# Отображаем начальное состояние
print_class_info()
# Вносим изменения в классы
change_students('1б', 27) # Изменим количество учащихся в классе 1б
add_class('8а', 24) # Добавим новый класс 8а
remove_class('7в') # Удалим класс 7в
# Выводим класс с наибольшим и наименьшим количеством учащихся
print_max_min_class()
# Выводим общее количество учащихся
calculate_total_students()
# Сортируем классы по количеству учащихся
sort_classes_by_students()
# Запуск программы
if __name__ == "__main__":
main()
Результат :
