Funkcja zwraca wartość kątów trójkąta w stopniach z długości boków, wyniki są liczbami całkowitymi posortowane od najniższych do najwyższej

from math import acos, degrees

def angles(a, b, c):
    alpha = beta = gamma = 0
    if a !=0 and b != 0 and c != 0:
        if a + b < c or a + c < b or b + c < a:
            return [alpha, beta, gamma]
        else:
            alpha = int(degrees(acos(( c*c + b*b - a*a ) / (2 * c * b))))
            beta = int(degrees(acos(( a*a + c*c - b*b ) / (2 * a * c))))
            gamma = int(degrees(acos(( a*a + b*b - c*c ) / (2 * a * b))))
            return list.sort([alpha, beta, gamma])

Dlaczego w rezultacie dostaję None?

1
user8544907 3 wrzesień 2017, 19:14

2 odpowiedzi

Najlepsza odpowiedź

list.sort Sortuje listę w miejscu i zwraca None. Zamiast tego możesz użyć sorted:

return sorted([alpha, beta, gamma])
2
Mureinik 3 wrzesień 2017, 16:20

Wypróbuj ten kod:

Z acos importu matematycznego, stopni

def angles(a, b, c):
    alpha = beta = gamma = 0
    if a !=0 and b != 0 and c != 0:
        if a + b < c or a + c < b or b + c < a:
            return [alpha, beta, gamma]
        else:
            alpha = int(degrees(acos(( c*c + b*b - a*a ) / (2 * c * b))))
            beta = int(degrees(acos(( a*a + c*c - b*b ) / (2 * a * c))))
            gamma = int(degrees(acos(( a*a + b*b - c*c ) / (2 * a * b))))
            lst = [alpha, beta, gamma]
            lst.sort()
            return lst

print angles(4,4,4)
1
Kshitij Mittal 3 wrzesień 2017, 16:22