Сортировка людей по возрасту python
Стоит задача сделать сортировку людей по возрасту
От 0 до 12 - дети
От 12 до 18 - подростки
От 18 до 27 - клуб 27
От 27 до 45 - молодые
От 45 до 60 - зрелые
От 60 до 74 - пожилые
От 74 до 90 - молоды в душе
От 90 и выше - долгожители
Я немного не понимаю как это всё верно сделать... Когда запускаю работает некорректно
Вот как делал я:
array = []
print("Введите ваш возраст")
age = input()
for i in age:
if i == 0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 or 10 or 11 or 12:
print("Вы занесены в группу - дети.")
else:
continue
for i in age:
if i == 13 or 14 or 15 or 16 or 17 or 18:
print("Вы занесены в группу - подростки.")
else:
continue
Ответы (3 шт):
print("Введите ваш возраст")
while True:
age = input()
if not age.isdigit():
print("Введите целое число")
else:
age = int(age)
break
if age <= 12:
print("От 0 до 12 - дети")
elif age <= 18:
print("От 12 до 18 - подростки")
elif age <= 27:
print("От 18 до 27 - клуб 27")
elif age <= 45:
print("От 27 до 45 - молодые")
elif age <= 60:
print("От 45 до 60 - зрелые")
elif age <= 74:
print("От 60 до 74 - пожилые")
elif age <= 90:
print("От 74 до 90 - молоды в душе")
else:
print("От 90 и выше - долгожители")
Приведенные ниже решения удобны если данные о возрастах получаются откуда-то с сервера или из файла если нет то можно использовать простую конструкцию if/else - это будет оптимальным решением.
Иначе можно использовать регулярки, плюс от такого подхода в том что данные находятся в одном месте изменяя строки не нужно дополнительно менять if условие
import re;
age = 27
ages = [
"От 0 до 12 - дети",
"От 12 до 18 - подростки",
"От 18 до 27 - клуб 27",
"От 27 до 45 - молодые",
"От 45 до 60 - зрелые",
"От 60 до 74 - пожилые",
"От 74 до 90 - молоды в душе",
"От 90 и выше - долгожители"
]
for i in ages:
[from_age, to_age] = [
''.join(j) # убираем пустые совпадения: ''
for j # выбираем все что относится к возрасту
in re.findall(r'От (\d+)|до (\d+|)|и (выше)', i)
]
if (to_age == 'выше' or age <= int(to_age)):
s = i.split('-')[1] # получаем определение возраста
print(f'Вы занесены в группу -{s}')
break
Но регулярки могут быть не продуктивными, поэтому можно то же сделать словарями, код получится проще не нужен будет модуль re
и так же данные нигде не будут дублироваться:
age = 100
ages = [
{'f': 0, 't': 12, 'n': 'дети'},
{'f': 12, 't': 18, 'n': 'подростки'},
{'f': 18, 't': 27, 'n': 'клуб 27'},
{'f': 27, 't': 45, 'n': 'молодые'},
{'f': 45, 't': 60, 'n': 'зрелые'},
{'f': 60, 't': 74, 'n': 'пожилые'},
{'f': 74, 't': 90, 'n': 'молоды в душе'},
{'f': 90, 't': 'выше', 'n': 'долгожители'}
]
for i in ages:
from_age, to_age, group = i['f'], i['t'], i['n']
if (to_age == 'выше' or age <= to_age):
print(f'Вы занесены в группу - {group}')
break
Можно заметить что from_age не используется поэтому его вообще можно исключить из данных если только не нужно формировать строку типа от ... до ... а так же вместо словаря использовать простой массив если данные как в данном случае не сложные.
Можно перевернуть условия:
if age >= 90:
print("От 90 и выше - долгожители")
elif age >= 74:
print("От 74 до 90 - молоды в душе")
elif age >= 60:
print("От 60 до 74 - пожилые")
elif age >= 45:
print("От 45 до 60 - зрелые")
elif age >= 27:
print("От 27 до 45 - молодые")
elif age >= 18:
print("От 18 до 27 - клуб 27")
elif age >= 12:
print("От 12 до 18 - подростки")
else:
print("От 0 до 12 - дети")