Python

Код в питоне выдаёт неверное значение: 0 Может не так oct использовал?

А. Игнатюк) Исполнитель «Аппо» получает на вход четырехзначное число N и строит новое число R по следующим правилам:
1) Если первая цифра числа N делится на 4, то заменяем её на цифру 9.
2) Если первая цифра числа N делится на 2 и не делится на 4, то заменяем её на цифру 3.
Сколько существует чисел N, для которых соответствующее число R начинается с цифры 9, а восьмеричная запись числа R оканчивается цифрой 4?

k=0
for x in range (1000,10000):
a=str(x)
if int(a[1])%4==0:
a='9'+a[1:]
if int(a[1])%2==0 and int(a[1])%4!=0:
a='3'+a[1:]
if int(a[1])==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

И вся программа:
 print(3 * ((999 + 4) // 8 - (0 + 4 + 7) // 8 + 1)) 
P.S. Зачем программисту математика?

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)
Татар Иле Патриоты
Татар Иле Патриоты
96 439
Лучший ответ
У вас есть несколько ошибок в коде:

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)
Этот код будет работать в соответствии с вашими требованиями.
Владимир Цой
Владимир Цой
56 728
Hasanali Guven Antalya спасибо большое
 oct(int(a))[-1]==4 
Всегда ложное условие. Оно никаким образом не может выполниться.

Строка не бывает равна числу.
Никита Федотов
Никита Федотов
34 941
Hasanali Guven Antalya Да, исправил. С кавычками работает
Обращение к первому элементу массива происходит по индексу 0.
Hasanali Guven Antalya бл забыл, спсибо
Hasanali Guven Antalya не помогло кстати..