С помощью строк вообще без проблем 
def f(n):
    if n <=5:
        return n + 15
    if n % 2 == 0 and n > 5:
        return f(n//2)+n*n*n-1
    if n % 2 != 0 and n>5:
        return f(n-1) + 2*n*n+1
if __name__ == '__main__':
    count = 0
    for i in range(1, 1001):
        check = str(f(i))
        if check.count('8') >= 2:
            count += 1
    print(count)
и вариант через остатки
def f(n):
    if n <=5:
        return n + 15
    if n % 2 == 0 and n > 5:
        return f(n//2)+n*n*n-1
    if n % 2 != 0 and n>5:
        return f(n-1) + 2*n*n+1
def calc_eight(n):
    count = 0
    while n:
        rem = n % 10
        if rem == 8:
            count += 1
        n = n // 10
    return count
if __name__ == '__main__':
    count = 0
    for i in range(1, 1001):
        check = f(i)
        if calc_eight(check) >= 2:
            count += 1
    print(count)
ошибка ваша в переменно k. Она у вас показывает, сколько цифр 8 в кадом числе от 1 до 1000. И для каждого числа i она должна быть обнулена. У вас этого нет.