Документацию читать пробовал?
ValueError is raised if the date_string and format can’t be parsed by time.strptime() or if it returns a value which isn’t a time tuple
Если входная строка или строка формата не поддаются разбору вызовом time.strptime(), или если эта функция возвращает не кортеж с описанием даты-времени, функция выбрасывает исключение ValueError.
Учись обрабатывать исключения блоком try-except.
Впрочем, если судить вот по этому:
if res == True:
...
elif res == False:
...
Стоит вообще поучить язык, а потом уже браться за ботов. Это технически сработает, но выдаёт непонимание того, как работают логические переменные.
Правильнее будет
if res:
...
else:
...
Также задачу соответствия текста шаблону часто удобнее решать регулярными выражениями. Например:
import datetime
import re
# цифра, за ней может быть ещё одна, за ними "-", "/" или ".",
# потом опять цифра, за ней может быть ещё одна, за ними "-", "/" или ".",
# потом 2 или 4 цифры
regexp = re.compile(r'(\d\d?)[-/.](\d\d?)[-/.](\d{2}|\d{4})')
text = input('Введите дату в формате DD/MM/YYYY: ')
match = regexp.search(text)
if match is None:
print('Вы ввели не дату, или ввели её в неправильном формате')
else:
day, month, year = int(regexp.group(1)), int(regexp.group(2)), int(regexp.group(3))
# тут нужна ещё проверка, так как пользователь может ввести 99/99/9999
try:
userdate = datetime.date(year, month, day)
except ValueError:
print('Это некорректная дата.')
else:
print('Дата корректна.')