Python

Что не так в коде пайтон

a = 0
mx = 0
for i in range(2461,9719+1):
if i % 10 > 3 and i % 10 < 7 and i % 100 != 1 and i % 100 != 9:
mx = max(mx,i)
a+=i
print(mx,a)

Программа выдает: 9716 13264020

Вопрос: Что я сделал не так? Почему число в разряде десятков не >3 и не <7 и как это сделать?
И в Питоне всё не так, всё не так, как надо...

Если i % 10 между 3 и 7, то i % 100 уж точно не равно ни 1, ни 9, и эти условия лишние.

И проверяете вы на принадлежность (3; 7) разряд единиц, а не десятков. Причём, это и без всякого цикла можно было найти. :-)

А в чём состоит задача-то?

Итак, самый простой вариант (у нас (97 - 25) полных диапазонов сотен, в каждом из них - по 50 чисел в интервале [30; 79], и надо учесть один неполный диапазон [2461; 2479]. А максимальное число легко находится в уме: 9719 - вне диапазона десятков [3; 7], значит, берём максимальное число из предыдущего диапазона 96xx, т.е. в десятках и единицах будет 79.
 # Ищем числа в диапазоне [2461; 9719], у которых в разряде десятков цифра из [3; 7], а в разряде сотен не 1 и не 9

print("Кол-во чисел: ", (97 - 25) * (80 - 30) + (2479 - 2461 + 1))
print("Максимальное число: ", 9679)

Нужен ли вам вариант с циклом, я даже не знаю....
Данила Юдаев
Данила Юдаев
54 053
Лучший ответ
А ведь как хорошо в нормальных языках. Есть { } или на худой конец begin / end.
И кому только пришла в голову идея давать школьникам питон?
Данила Юдаев Тут некоторые в ответах приводят код не в блоке кода. Естественно, все отступы при этом слетают, так что один отвечающий делал отступы минусами с комментарием, что их надо заменить на пробелы. Неистребима человеческая тяга делать всё через задницу.
Условие i % 10 > 3 и i % 10 < 7 проверяет только последнюю цифру числа i. Итак, такие числа, как 14, 24, 34 и т.д. пройдет условие, даже если число в категории "десятки" не больше 3 и не меньше 7.

Чтобы проверить, является ли число в категории времени больше 3 и меньше 7, вы можете использовать операции деления на целое число и по модулю. Например:
 if (i // 10) % 10 > 3 and (i // 10) % 10 < 7: 
mx = max(mx, i)
a += i
Эта строка сначала делит i на 10, чтобы получить число в категории единиц, а затем снова делит результат на 10, чтобы получить число в категории десятков. Операция по модулю с 10 дает последнюю цифру этого числа, которую можно сравнить с 3 и 7.
Данила Юдаев Тут, по-моему, без толку обсуждать, что эта программа делает неправильно, т.к. делает неправильно она абсолютно всё. Не те условия на цифры, многократно избыточное количество итераций, сумма элементов вместо подсчёта их количества, ненужное вычисление максимума, который и так известен с самого начала. В общем, проще правильный вариант дать, чем пытаться это реанимировать.