Поиск наибольшего нечетного числа из 3 переменных — обратная связь

#python #python-3.x

#python #python-3.x

Вопрос:

ниже приведен код, который я написал, чтобы попытаться решить эту проблему. Однако всякий раз, когда у меня возникает случай: z> y (где и z, и y нечетные, а x четные), как показано ниже, я получаю вывод как «y — наибольшее нечетное число».

Кто-нибудь может увидеть, где я ошибаюсь?

 x= 2
y= 3
z= 17

#condition 1: all odds

if x%2 !=0 and y%2 !=0 and z%2!=0:
            if (x>y) and (x>z):
                print('x is largest odd')
            elif (y>x) and (y>z):
                    print ('y is largest odd')
            elif (z>x) and (z>y):
                print('z is largest odd')

# condition 2: z is even but x amp; y are odd
            else:
                if x%2!=0 and y%2 !=0 and z%2==0:
                        if (x>y):
                            print('x is largest odd')
                        else:
                            print('y is largest odd')
                        
#condition 3: y is even but x and z are odd
                else:
                    if x%2 !=0 and y%2==0 and z%2 !=0:
                            if (x>z):
                                print('x is largest odd')
                            else:
                                print('z is largest odd')
                    
#condition 4 x is even by y and z are odd
                    else:
                        if x%2==0 and y%2 !=0 and z%2 !=0:
                            if (z>y):
                                print('z is largest odd')
                            else:
                                print('y is largest odd')
else:
    if x%2 !=0:
        print('x is largest odd')
    elif y%2 !=0:
        print('y is largest odd')
    elif z%2 !=0:
        print ('z is largest odd')
    elif x%2 == 0 and y%2==0 and z%2==0 :
        print ('no odds')
  

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

1. Что вы обнаружили, когда попытались отладить этот код?

2. Один из способов — поместить в список только ваши нечетные числа, а затем просто сделать max(odds) .

3. Вы проводили какую-либо отладку? Я бы рекомендовал прочитать ericlippert.com/2014/03/05/how-to-debug-small-programs .

Ответ №1:

Если вы храните все свои числа в списке, вы можете использовать max() понимание списка и списка, чтобы довольно легко определить наибольшее нечетное число.

Вы также можете встроить некоторые проверки, которые, если ваше понимание вернется [] , затем выведут, что никаких шансов найдено не было.

 numbers = [2, 3, 17]
odds = [x for x in numbers if x%2 != 0]

if odds:
    print(max(odds))
else:
    print('No odds Found')
  

Ответ №2:

Я хотел бы немного показать вам свой процесс отладки, поскольку это может помочь.

Я добавил число (от 1 до 4) к каждой из «print y является наибольшим нечетным», чтобы выяснить, какая из них печатается.

В приведенном вами примере вы достигаете этой части кода.

 else:
    if x%2 !=0:
        print('x is largest odd')
    elif y%2 !=0:
        print('y is largest odd')
    elif z%2 !=0:
        print ('z is largest odd')
    elif x%2 == 0 and y%2==0 and z%2==0 :
        print ('no odds')
  

Как :

 elif y%2 !=0:
  

появляется перед следующим else, если вы печатаете «y — наибольшее нечетное число», прежде чем достичь

 elif z%2 !=0:
  

Теперь, почему мы должны доходить до этой части кода и не улавливать :

 #condition 4 x is even by y and z are odd
                    else:
                        if x%2==0 and y%2 !=0 and z%2 !=0:
                            if (z>y):
                                print('z is largest odd')
                            else:
                                print('y is largest odd')
  

Ответ находится в ваших циклах «if, else». Вы используете if, делаете отступ на другой уровень, создаете новое if, тогда ваше else переходит к этому новому if три раза.

Вместо этого вы хотели бы сделать что-то в этом роде :

 if x%2 !=0 and y%2 !=0 and z%2!=0:

elif x%2!=0 and y%2 !=0 and z%2==0:

elif x%2 !=0 and y%2==0 and z%2 !=0:

elif x%2==0 and y%2 !=0 and z%2 !=0:

else:
  

и откажитесь от многократного (неуместного) использования else .