Программа работает не правильно

a = int(input())
if (a%2 == 0):
    a = a // 2
    print(a)
if (a%2 !=0):
    print(a)

В теории код должен чётные числа делить на два, а не чётные оставлять как есть и выводить на экран. Но когда я ввожу, например, "6", он выводит "3" два раза, а должен один. Что я не так сделал?


Ответы (3 шт):

Автор решения: Sergei Kirjanov

print(a // 2 if a%2 == 0 else a)

а вообще, старайтесь не делать запись и чтение одной переменной несколько раз в перемешку -- багов меньше будет.

→ Ссылка
Автор решения: Эникейщик

Читайте комментарии

a = int(input()) # а равно 6
if (a%2 == 0):   # 6%2 равно 0, заходим внутрь
    a = a // 2   # а теперь равно 3!!!
    print(a)     # печатаем 3
if (a%2 !=0):    # 3%2 не равно 0, заходим внутрь
    print(a)     # печатаем 3

Как исправить.

Так

a = int(input())
if (a % 2 == 0):
    print(a // 2)
if (a % 2 != 0):
    print(a)

Но лучше так

a = int(input())
if (a % 2 == 0):
    print(a // 2)
else:
    print(a)

PS. В следующий раз давайте вопросу заголовок, отражающий проблему. Тут в каждом вопросе программа работает неправильно.

→ Ссылка
Автор решения: MarianD

Ваша проблема заключается в том, что в строке

a = a // 2

вашего кода вы переписываете содержание переменной a, и когда это новое содержание (а не оригинальное, как вы хотели) удовлетворяет тесту в следующей строке

if (a%2 != 0):

то это новое значение тоже выводиться. :-(

Но вы хотите или первую возможность, или вторую возможность. Значит, просто вместо if-if использовать if-else:

a = int(input())
if (a % 2 == 0):
    a = a // 2
    print(a)
else:                # здесь разница
    print(a)
→ Ссылка