Код в питоне выдаёт неверное значение: 0 может не так oct использовал? - Общение Python мододелов

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

Регистрация
29 Дек 2013
Сообщения
86
Репутация
8
Спасибо
1
Монет
0
А. Игнатюк) Исполнитель «Аппо» получает на вход четырехзначное число 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)
 
Регистрация
8 Сен 2013
Сообщения
97
Репутация
8
Спасибо
1
Монет
0
Обращение к первому элементу массива происходит по индексу 0.
 
Регистрация
21 Сен 2013
Сообщения
95
Репутация
0
Спасибо
0
Монет
0
У вас есть несколько ошибок в коде:

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) Этот код будет работать в соответствии с вашими требованиями.
 
Регистрация
8 Фев 2013
Сообщения
97
Репутация
0
Спасибо
0
Монет
0
oct(int(a))[-1]==4 Всегда ложное условие. Оно никаким образом не может выполниться.

Строка не бывает равна числу.
 
Регистрация
26 Ноя 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
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)
 
Сверху Снизу