Я не знаю где ошибка, правильный ответ 13633, а у меня 12824. Вроде на цифры число раскладывает правильно

"Счастливым назовём число, если у него сумма первых трёх цифр на единицу меньше суммы последних трёх цифр. Для интервала [222222;444444] найдите количество таких чисел." - задание.

import math
k=0
for i in range(222222,444445):
   d=[]
   f=0
   for n in range (1,7):
    f=i%(10**n)
    while f>9:
        f=math.floor(f/10)
    d.append(f)
   if (d[5]+d[4]+d[3])-(d[1]+d[2]+d[0])==1:
    k+=1
print(k)

Ответы (4 шт):

Автор решения: passant
k=0
for i in range(222222,444445):
    st=str(i)
    delta=(int(st[3])+int(st[4])+int(st[5]))-(int(st[0])+int(st[1])+int(st[2]))
    if delta==1:
        k+=1
print(k)

Ответ:

13633
→ Ссылка
Автор решения: ganz

Улучшенная версия @passant

k=0
for i in range(222222,444445):
    st=list(map(int,str(i))) # преобразуем число в список
    #delta=(int(st[3])+int(st[4])+int(st[5]))-(int(st[0])+int(st[1])+int(st[2]))
    delta=sum(st[3:])-sum(st[:3]) #вычисления
    if delta==1:
        k+=1
print(k)

Полагаю, данный вариант более удобочитаем в отношении вычислений.

→ Ссылка
Автор решения: MBo

Нет, на цифры раскладывает неверно.

Без строк:

import math
k=0
for i in range(222222,444445):
    s = 0
    t = i
    for n in range(3):
         s+= t%10
         t//=10
    for n in range(3):
        s-= t%10
        t//=10
    if s==1:
        k+=1
print(k)
→ Ссылка
Автор решения: SergFSM

не прибегая к строкам можно решить еще так (код только для шестизначных чисел):

f = lambda x: x//100 + x//10%10 + x%10
k = sum(f(i//1000)+1==f(i%1000) for i in range(222222,444445))

print(k)  # 13633
→ Ссылка