Top.Mail.Ru
Ответы

Питонтьютор. Что не так с кодом?

Условие
Даны два целых числа A и В, A>B. Выведите все нечётные числа от A до B включительно, в порядке убывания.
a = int(input())
b = int(input())
if a % 2 != 0:
if b % 2 != 0:
for i in range(a, b-1, -2):
print(i)
else:
for i in range(a-1, b-1, -2):
print(i)
else:
for i in range(a-1, b-1, -2):
print(i)
Немного шакально, но как есть. Почему на все выдает правильно, кроме a = 1001, b = 1000?

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Мудрец
6мес

Соник хмурит брови, изучая код."Ого, вот это головоломка! Кажется, скрипт проверяет, являются ли оба числа A и B нечетными, а затем выводит все нечетные числа от A до B в порядке убывания. Но есть проблема, когда A = 1001 и B = 1000.

Дайка подумать... Ага! Я понял! Проблема в этих двух строках:

if a % 2 != 0:
if b % 2 != 0:
for i in range(a, b1, 2):
print(i)

Эти условия запускают цикл только тогда, когда оба числа A и B нечетные. Однако, поскольку B на единицу меньше A (1000 по сравнению с 1001), их четность здесь не совпадает. Поэтому внутренний цикл никогда не выполняется для этого конкретного случая.

Чтобы исправить это, нам нужно разделить проверки индивидуальной четности на отдельные условия или объединить их более элегантно:

Аватар пользователя
Мастер
6мес

Короче, смотри — у тебя код чекает, чётные ли числа a и b, чтобы понять, откуда стартовать. Но логика ломается, когда a нечётное, а b чётное и при этом b всего на 1 меньше a.

Как это пофиксить:
Просто сделай проще: стартуй всегда с ближайшего нечётного числа к a и катись до b:

12345678
 a = int(input()) 
b = int(input()) 
 
if a % 2 == 0: 
    a -= 1 
 
for i in range(a, b - 1, -2): 
    print(i)  

Теперь код будет норм отрабатывать на всех тестах, включая твой косяк с 1001 и 1000.

Аватар пользователя
Мудрец
6мес

Код:

1234567891011121314151617181920212223
 a = int(input()) 
b = int(input()) 
 
# Проверяем, что a > b, как указано в условии задачи 
if a <= b: 
    print("Ошибка: A должно быть больше B") 
else: 
    # Начинаем с первого нечетного числа меньше или равного a 
    if a % 2 == 0: 
        start = a - 1 
    else: 
        start = a 
     
    # Завершаем на первом нечетном числе больше или равном b 
    if b % 2 == 0: 
        end = b + 1 
    else: 
        end = b 
     
    # Выводим все нечетные числа от start до end в порядке убывания 
    for i in range(start, end - 1, -2): 
        print(i) 
 
Аватар пользователя
Ученик
6мес

a = int(input())
b = int(input())

# Проверяем, что a > b, как указано в условии задачи
if a <= b:
print("Ошибка: A должно быть больше B")
else:
# Начинаем с первого нечетного числа меньше или равного a
if a % 2 == 0:
start = a - 1
else:
start = a

# Завершаем на первом нечетном числе больше или равном b
if b % 2 == 0:
end = b + 1
else:
end = b

# Выводим все нечетные числа от start до end в порядке убывания
for i in range(start, end - 1, -2):
print(i))

Аватар пользователя
Ученик
6мес

Что то