Ввожу 8 9 10 min() выбирает 9 max() 10. max — min = -1. Как так?
Потому что нужно почитать документацию на функцию max
Если max\min передать строки - он найдет строку(!) подходящую лексиграфически, то есть в алфавитном порядке.
Строка '10' < '9', так  как 1 идет раньше 9.

Не надо переопределять встроенные имена. Считайте их зарезервированными и недоступными для именования переменных
max = max(s)
min = min(s)
Потому что в s - строки, а не числа, сортировка их лексикографическая.
s = [int(n) for n in s.split()]