Напишите функцию tpl_sort(), которая сортирует кортеж, состоящий из целых чисел по возрастанию и возвращает его. Если хотя бы один элемент не является целым числом, то функция возвращает исходный кортеж.
def tpl_sort(tpl):
for element in tpl:
if not isinstance(element, int):
return tpl
return tuple(sorted(tpl))
# Тесты
print(tpl_sort((5, 5, 3, 1, 9)))
print(tpl_sort((5, 5, 2.1, '1', 9)))
(1, 3, 5, 5, 9)
(5, 5, 2.1, '1', 9)
Функция slicer() на вход принимает кортеж и случайный элемент. Требуется вернуть новый кортеж, начинающийся с первого появления элемента в нем и заканчивающийся вторым его появлением включительно.
Если элемента нет вовсе – вернуть пустой кортеж.
Если элемент встречается только один раз, то вернуть кортеж, который начинается с него и идет до конца исходного.
def slicer(any_tuple, element):
if element in any_tuple:
if any_tuple.count(element) > 1:
first_index = any_tuple.index(element)
second_index = any_tuple.index(element, first_index + 1) + 1
return any_tuple[first_index:second_index]
else:
return any_tuple[any_tuple.index(element):]
else:
return ()
BEGIN_INDEX = 0
END_INDEX = -1
def slicer(any_tuple, element):
first = second = BEGIN_INDEX
if element in any_tuple:
first = any_tuple.index(element)
if any_tuple.count(element) > 1:
second = any_tuple.index(element, first + 1) + 1
else:
second = END_INDEX
return any_tuple[first:second]
# Тесты
print(slicer((1, 2, 3), 8))
print(slicer((1, 8, 3, 4, 8, 8, 9, 2), 8))
print(slicer((1, 2, 8, 5, 1, 2, 9), 8))
()
(8, 3, 4, 8)
(8, 5, 1, 2, 9)
Перед студентом стоит задача: на вход функции sieve() поступает список целых чисел. В результате выполнения этой функции будет получен кортеж уникальных элементов списка в обратном порядке.
def sieve(lst):
unique = []
[unique.append(item) for item in reversed(lst) if item not in unique]
return tuple(unique)
# Тесты
print(sieve([1, 2, 3, 3, 2]))
print(sieve([2, 1, 3, 1, 2, 5, 5, 9, 2, 0, 0]))
print(sieve((1, 2, 3, 4, 5, 6, 7)))
(2, 3, 1)
(0, 2, 9, 5, 1, 3)
(7, 6, 5, 4, 3, 2, 1)
Николай знает, что кортежи являются неизменяемыми, но он с этим не готов соглашаться. Ученик решил создать функцию del_from_tuple(), которая будет удалять первое появление определенного элемента из кортежа по значению и возвращать кортеж без оного. Попробуйте повторить шедевр не признающего авторитеты начинающего программиста. К слову, Николай не всегда уверен в наличии элемента в кортеже (в этом случае кортеж вернется функцией в исходном виде).
def del_from_tuple(tpl, elem):
if elem in tpl:
elem_index = tpl.index(elem)
return tpl[:elem_index] + tpl[elem_index + 1:]
return tpl
# Тесты
print(del_from_tuple((1, 2, 3), 1))
print(del_from_tuple((1, 2, 3, 1, 2, 3, 4, 5, 2, 3, 4, 2, 4, 2), 3))
print(del_from_tuple((2, 4, 6, 6, 4, 2), 9))
def del_from_tuple(tpl, elem):
lst = list(tpl)
if elem in tpl:
lst.remove(elem)
return tuple(lst)
# Тесты
print(del_from_tuple((1, 2, 3), 1))
print(del_from_tuple((1, 2, 3, 1, 2, 3, 4, 5, 2, 3, 4, 2, 4, 2), 3))
print(del_from_tuple((2, 4, 6, 6, 4, 2), 9))
(2, 3)
(1, 2, 1, 2, 3, 4, 5, 2, 3, 4, 2, 4, 2)
(2, 4, 6, 6, 4, 2)
Создайте кортеж из 7-ми именованных кортежей учащихся ВУЗов. В именованном кортеже будут присутствовать следующие поля: имя студента, возраст, оценка за семестр, город проживания. Функция good_students() будет принимать этот кортеж, вычислять среднюю оценку по всем учащимся и выводить на печать следующее сообщение: “Ученики {список имен студентов через запятую} в этом семестре хорошо учатся!”. В список студентов, которые выводятся по результатам работы функции, попадут лишь те, у которых оценка за семестр равна или выше средней по всем учащимся.
from collections import namedtuple
Student = namedtuple('Student', 'name age mark city')
students = (
Student('Елена', '13', 7.1, 'Москва'),
Student('Ольга', '11', 7.9, 'Иваново'),
Student('Елизавета', '14', 9.1, 'Тверь'),
Student('Дмитрий', '12', 5.2, 'Челябинск'),
Student('Максим', '15', 6.1, 'Самара'),
Student('Николай', '11', 8.7, 'Владивосток'),
Student('Артур', '13', 5.8, 'Екатеринбург')
)
def good_students(students):
total_mark = 0
for student in students:
total_mark += student.mark
avg_mark = total_mark / len(students)
good_mark_students = [student.name for student in students if student.mark >= avg_mark]
print('Ученики ', ', '.join(good_mark_students), ' в этом семестре хорошо учатся!')
good_students(students)
Ученики Ольга, Елизавета, Николай в этом семестре хорошо учатся!