Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Fe1h Профи (674), на голосовании 2 недели назад
Условие
Даны два целых числа 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?
Голосование за лучший ответ
Вертолётов 625 Мудрец (15078) 1 месяц назад
Код:
 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)
Fe1hПрофи (674) 1 месяц назад
Объяснить финт с a, b = b, a пожалуйста. Немного не понимаю его смысл
Агния КаневаУченик (219) 1 месяц назад
А в чём проблема собственно? Ваш код прекрасно выдаёт в заданной проверке 1001, коя и является нечётным числом.
Спрайк Спрайкович Мастер (1740) 1 месяц назад
Короче, смотри — у тебя код чекает, чётные ли числа a и b, чтобы понять, откуда стартовать. Но логика ломается, когда a нечётное, а b чётное и при этом b всего на 1 меньше a.

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

if a % 2 == 0:
a -= 1

for i in range(a, b - 1, -2):
print(i)
Теперь код будет норм отрабатывать на всех тестах, включая твой косяк с 1001 и 1000.
Fghh Мудрец (10832) 1 месяц назад
Соник хмурит брови, изучая код."Ого, вот это головоломка! Кажется, скрипт проверяет, являются ли оба числа 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), их четность здесь не совпадает. Поэтому внутренний цикл никогда не выполняется для этого конкретного случая.

Чтобы исправить это, нам нужно разделить проверки индивидуальной четности на отдельные условия или объединить их более элегантно:
Егор Губин Ученик (122) 1 месяц назад
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))
Похожие вопросы