#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 .