Четное и нечетное число

#python #python-3.x

#python #python-3.x

Вопрос:

Я получаю ошибку при вычислении четных и нечетных чисел в диапазоне 2008 2009 2010 и 2011. На самом деле этот код для вычисления победителя команды А, каждый нечетный год команда будет выигрывать. Вот почему в моем коде, когда его нечетный год, он будет 1.

 i = 0
sum = 0

n = list(map(int, input("Year : ").split()))
for i in n :
    if i % 2 != 0 :
        sum  = 1
    else :
        sum = 0
print("Win :", sum)

# Input
2008 2009 2010 2011
# Output
1 (This is the problem, it should be 2 wins but i dont know why the output is always 1)
 

Комментарии:

1. else: sum = 0 кажется неправильным, нет?

2. Я думаю, что нет, я не даю значения для четного числа

3. для первой итерации sum = 0. i четно, поэтому sum = 0. На второй итерации i нечетно. следовательно, сумма =1, а сумма теперь равна 1. На третьей итерации i является четным. Итак, теперь в блоке else вы присваиваете sum значение 0. Значение, сумма = 0. на следующей итерации i нечетное, следовательно, сумма = 1. Но поскольку сумма = 0, сумма изменяется на 1. и вот как вы получаете результат 1. По сути, ваш блок else изменяет сумму на 0, когда встречается четный год, и весь прогресс теряется.

4. @illusion Спасибо, что объяснили это, я удалил эту сумму = 0, и это работает так, как я хочу

Ответ №1:

Я думаю, вам это не нужно else :sum = 0 . Вы можете продолжить с

 i = 0
sum = 0

n = list(map(int, input("Year : ").split()))
for i in n :
    if i % 2 != 0 :
        sum  = 1
  
print("Win :", sum)
 

Комментарии:

1. Я вижу, я попробовал это, как только вы ответили, и да, это сработало так, как я хочу. Спасибо, что помогли мне…

Ответ №2:

juanpa_arrivillaga пытался заставить вас заметить, что когда вы сталкиваетесь с четным годом, вы устанавливаете сумму в 0. Когда это нечетный год, вы увеличиваете сумму. Всякий раз, когда вы устанавливаете сумму в 0, это отменяет любое увеличение, которое вы делали в предыдущих итерациях цикла. Попробуйте вывести sum в конце каждого цикла и посмотреть, говорит ли он то, что, по вашему мнению, он должен сказать.

Ответ №3:

 else :
    sum = 0
 

Этот оператор возвращает значение sum обратно к нулю.
Следовательно, вы можете просто отказаться от него.

Комментарии:

1. Да, я его удалил

2. тогда теперь он должен давать правильный результат