1) Индексация в строке `a` начинается с 0, поэтому первый символ будет `a[0]`, а не `a[1]`.
2) В строке проверки `if int(a[1])==9 and oct(int(a))[-1]==4:` вы сравниваете строку с числом, что вызывает ошибку. Вам следует сравнить две строки.
3) В проверке `if int(a[1])==9 and oct(int(a))[-1]==4:`, вы проверяете, является ли вторая цифра равной 9, а не первой.
4) В ваших условиях замены первой цифры вы просто переписываете строку `a`, вместо того, чтобы изменять её только в случае выполнения условия.
5) Также стоит отметить, что восьмеричное представление числа в Python будет начинаться с '0o', поэтому вам нужно будет учесть это при сравнении.
Попробуйте этот исправленный код: k = 0
for x in range(1000, 10000):
a = str(x)
if int(a[0]) % 4 == 0:
a = '9' + a[1:]
elif int(a[0]) % 2 == 0 and int(a[0]) % 4 != 0:
a = '3' + a[1:]
if a[0] == '9' and oct(int(a))[-1] == '4':
k += 1
print(k) Этот код будет работать в соответствии с вашими требованиями.
R начинается на 9, если N начинается на: 4, 8, 9 - три варианта.
8-ричная запись числа R оканчивается на 4, если остаток от деления на 8 равен 4. Или - что тоже самое - если число R + 4 делится на 8. В диапазоне 0..999 таких чисел:
(999 + 4) // 8 - (0 + 4 + 7) // 8 + 1
P.P.S. Но если так хочешь циклом, то: k = 0
for i in range(1000, 10000):
if i // 1000 % 4 == 0: i = 9000 + i % 1000
elif i // 1000 % 2 == 0: i = 3000 + i % 1000
if i // 1000 == 9 and i % 8 == 4: k += 1
print(k)