Допустим, ваш i
равен 2. Он делится на 2, поэтому if i % 2 == 0
срабатывает, а i
становится 1. И код продолжает выполняться, так что теперь мы находимся на строке if i % 2 != 0
, и это условие также истинно , потому что вы только что изменили i
, и теперь это 1. Таким образом, i
становится 4.
Ваша измененная вторая попытка, что предотвращает проверку второго условия, если первое выполнено успешно, ниже:
term = 1
i = 13
while i > 1:
print(i > 1)
if i % 2 == 0:
i = i / 2
term += 1
elif i % 2 != 0:
i = i * 3 + 1
term += 1
Также обратите внимание, что на самом деле вам не нужно проверять второе условие, так как оно определенно верно, если первое не выполняется, поэтому строка elif ...
может заменить только на else:
Вы также можете использовать ключевое слово continue
, чтобы остановить выполнение остальной части l oop, если первое условие истинно:
term = 1
i = 13
while i > 1:
print(i > 1)
if i % 2 == 0:
i = i / 2
term += 1
continue
if i % 2 != 0:
i = i * 3 + 1
term += 1
Your первая попытка имеет точно такую же проблему; исправление оставляю в качестве упражнения для читателя :)
PS не учить Python 2