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

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

Fe1h Профи (663), открыт 3 недели назад
Условие
Даны два целых числа 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?
5 ответов
Вертолётов 625 Мудрец (13519) 3 недели назад
Код:
 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Профи (663) 3 недели назад
Объяснить финт с a, b = b, a пожалуйста. Немного не понимаю его смысл
Агния КаневаУченик (216) 3 недели назад
А в чём проблема собственно? Ваш код прекрасно выдаёт в заданной проверке 1001, коя и является нечётным числом.
Спрайк Спрайкович Мастер (1712) 3 недели назад
Короче, смотри — у тебя код чекает, чётные ли числа 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 Мудрец (10660) 3 недели назад
Соник хмурит брови, изучая код."Ого, вот это головоломка! Кажется, скрипт проверяет, являются ли оба числа 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) 3 недели назад
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))
Похожие вопросы