Си в принципе тоже вариант, хотя типизация в нем послабее, а она очень важна когда начинаешь изучать программирование
А классический for как раз в паскале, когда указываешь диапазон индексов, и дельту изменения индекса.
Поэтому я считаю что некоторые классические языки должны остаться, пусть только как учебные.
важно понять суть кода
а от блок-схем мне понятнее не становится.
3.5.2.1 Structure and union specifiers
...
An implementation may allocate any addressable storage unit large
enough to hold a bit-field. If enough space remains, a bit-field that
immediately follows another bit-field in a structure shall be packed
into adjacent bits of the same unit. If insufficient space remains,
whether a bit-field that does not fit is put into the next unit or
overlaps adjacent units is implementation-defined. The order of
allocation of bit-fields within a unit (high-order to low-order or
low-order to high-order) is implementation-defined. The alignment of
the addressable storage unit is unspecified.
>>> lst = [('7', '1'), ('5', '2'), ('8', '3'), ('4', '4')]
>>>
>>> [(a == b and 'равно') or 'не равно' for a, b in lst]
['не равно', 'не равно', 'не равно', 'равно']
>>>
>>> [('не равно', 'равно')[a == b] for a, b in lst]
['не равно', 'не равно', 'не равно', 'равно']
>>>
Далее ваши тест кейсы по сути покрывают функционал оператора + языка на котором вы пишите, в этом не особо много смысла.
Да и почему нельзя было добавить markdown я не понимаю.