Работа со строками на Python
Пусть дана строковая переменная, содержащая информацию о студентах вида:
my_string = "ФИО;Возраст;Категория;_Иванов Иван Иванович;23 года;Студент 3 курса;_Петров Семен Игоревич;22 года;Студент 2 курса;_Иванов Семен Игоревич;22 года;Студент 2 курса;_Акибов Ярослав Наумович;23 года;Студент 3 курса;_Борков Станислав Максимович;21 год;Студент 1 курса;_Петров Семен Семенович;21 год;Студент 1 курса;_Романов Станислав Андреевич;23 года;Студент 3 курса;_Петров Всеволод Борисович;21 год;Студент 2 курса"
Вариант 1. Выведите построчно информацию о студентах, чей возраст — 21 год.
Вариант 2. Выведите построчно информацию о студентах, чей возраст больше 21 года.
Вариант 3. Выведите построчно информацию о студентах, чьи фамилии начинаются на букву "А" или "Б".
Моя попытка
my_string = my_string.split(';')
for i in range(3, len(my_string) - 2, 3):
if my_string[i].startswith('21'):
print(my_string[i], my_string[i + 1], my_string[i + 2])
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Ну раз пытались, попробуйте тогда так:
my_string = "ФИО;Возраст;Категория;_Иванов Иван Иванович;23 года;Студент 3 курса;_Петров Семен Игоревич;22 года;Студент 2 курса;_Иванов Семен Игоревич;22 года;Студент 2 курса;_Акибов Ярослав Наумович;23 года;Студент 3 курса;_Борков Станислав Максимович;21 год;Студент 1 курса;_Петров Семен Семенович;21 год;Студент 1 курса;_Романов Станислав Андреевич;23 года;Студент 3 курса;_Петров Всеволод Борисович;21 год;Студент 2 курса"
students_info = my_string.split('_')
# Разбиваем строку через сплит использяю '_' как разделитель
# Получаем список:
# ['ФИО;Возраст;Категория;', 'Иванов Иван Иванович;23 года;Студент 3 курса;', ит.д..
# students_info = students_info.pop(0) мы могли бы удалить лишний
# элемент списка 'ФИО;Возраст;Категория;' но можем этого и не делать
# Вариант 1
print("Вариант 1:")
# Полученный ранее список мы можем перебрать в цикле и найти все
# вхождения '21 год' в его элементах
for student in students_info:
if '21 год' in student:
print(student)
# Вариант 2
print("\nВариант 2:")
for student in students_info:
age_str = student.split(';')[1]
# Тут мы так же итерируем список, но дополнительно разбиваем
# его элементы на еще один список через сплит по разделителю ';'
# ['Петров Всеволод Борисович', '21 год', 'Студент 2 курса']
# в age_str помещаем значение под индексом [1] - '21 год'
try:
age = int(age_str[:3])
# Тут мы делаем срез из строки '21 год', что бы получить
# только нужную часть с числом
if age > 21:
print(student)
except ValueError as ve:
pass # Тут я добавил исключение, так как не убрал из списка students_info
# 'ФИО;Возраст;Категория;' и при попытке перевода строки в int
# выбьет исключение
# Вариант 3
print("\nВариант 3:")
for student in students_info:
last_name = student.split(';')[0].split()[-1]# или 0?
# last_name1 = student.split(';')[0] - Петров Всеволод Борисович
# Тут так же через сплит мы по индексу [0] получаем строку с ФИО
# Добавляем еще один сплит без параметра и разбиваем полученную
# строку на отдельные элементы используя ' ' как разделитель по умолчанию
# Дальше по индексу [0], [1], [2] мы можем дернуть нужное ФИО
# И уже через startswith можем сравнить начинается ли найденная строка с 'А' или 'Б'
if last_name.startswith(('А', 'Б')):
print(student)