Почему программа по нахождению медианы не работает?
def midnumber(a,b,c):
def more_or_less(a1,b1,c1):
if a1 < b1 and a1 > c1:
return(a1)
if a1 > b1 and a1 < b1:
return(a1)
a2 = more_or_less(a,b,c)
b2 = more_or_less(b,a,c)
c2 = more_or_less(c,b,a)
if a2 > c2 and a2 > b2:
return(a2)
if b2 > c2 and b2 > a2:
return(b2)
if c2 > a2 and c2 > b2:
return(c2)
print(midnumber(1,5,3))
Почему программа не работает? Выдаёт в консоли '>' not supported between instances of 'NoneType' and 'int' на 10 строчке
Ответы (2 шт):
Потому что есть только два варианта, в которых more_or_less() вернет число (из которых один вообще невозможен, что оставляет вообще только один вариант), и куча вариантов, в которых эта функция не вернет ничего (т.е. вернет None) и именно это и происходит. Поэтому у вас как миниму две переменные из a2, b2, c2 содержат None.
Потому что ваша программа вообще непонятно что делает. Ладно, медианой вы обозвали среднее из трех чисел, но вот это - что???
if a1 > b1 and a1 < b1:
Все намного проще:
def midnumber(a,b,c):
return {a,b,c}.difference({min(a,b,c),max(a,b,c) }).pop()
print(midnumber(1,5,3))
или так
def midnumber1(a,b,c):
return sorted([a,b,c])[1]
print(midnumber1(1,5,3))
Но если вдруг вы еще не учили ни наборы ни даже списки, то пишем в лоб:
def midnumber2(a,b,c):
if (a>c and c>b) or (b>c and c>a):
return c
elif (a>b and b>c) or (c>b and b>a):
return b
elif (c>a and a>b) or (b>a and a>c):
return a
print(midnumber2(3,5,1))