Odmiana słowa miesiące w zależności od podanej liczby - python

0

Hej,
W celach edukacyjnych chciałbym Was prosić o weryfikację skryptu, który odmienia słowo miesiące w zależności od podanej liczby.
Co można zrobić lepiej, może zupełnie przerobić, użyć listy, słowniki itd.
Jestem początkujący, stąd prośba o cenne uwagi, które powinienem przysposobić na początku mojej drogi programowania :).

# odmienia słowo miesiace w zależności od liczby
def odmien_miesiace(liczba_miesiecy):

    int_liczba_miesiecy = int(liczba_miesiecy)
    int_liczba_miesiecy_ostatnia_cyfra = int(liczba_miesiecy[-1:])
    miesiace = ""

    if int_liczba_miesiecy == 1:
        miesiace = "miesiąc"
    elif int_liczba_miesiecy >=2 and int_liczba_miesiecy <= 4:
        miesiace = "miesiące"
    elif int_liczba_miesiecy >= 5 and int_liczba_miesiecy <= 21:
        miesiace = "miesięcy"
    elif int_liczba_miesiecy > 21 and int_liczba_miesiecy_ostatnia_cyfra >= 2 and int_liczba_miesiecy_ostatnia_cyfra <= 4:
        miesiace = "miesiące"
    elif int_liczba_miesiecy > 21 and (int_liczba_miesiecy_ostatnia_cyfra >= 5 and
         int_liczba_miesiecy_ostatnia_cyfra <= 9 or int_liczba_miesiecy_ostatnia_cyfra == 0 or int_liczba_miesiecy_ostatnia_cyfra == 1):
        miesiace = "miesięcy"
    else:
        miesiace = "brak"

    return miesiace


while True:
    liczba_miesiecy = input('Wprowadź liczbę miesięcy:\n> ')

    if liczba_miesiecy.isdigit():
        wynik = odmien_miesiace(liczba_miesiecy)
        print(f"Wynik: {liczba_miesiecy} {wynik}\n")
    else:
        exit(0)
1

Co można zrobić lepiej? Można to, na przykład, napisać to bez bugów:) Dla 113, 112, 114, oraz ogólnie dla ilości miesięcy kończących się na 12, 13, 14 program zwraca błędnie "miesiące", a nie "miesięcy".

0
lion137 napisał(a):

Co można zrobić lepiej? Można to, na przykład, napisać to bez bugów:) Dla 113, 112, 114, oraz ogólnie dla ilości miesięcy kończących się na 12, 13, 14 program zwraca błędnie "miesiące", a nie "miesięcy".

lion137, co myślisz o poniższym?
Oczywiście range można by zastosować do pozostałych if dla spójności:

def odmien_miesiace(liczba_miesiecy):

    int_liczba_miesiecy = int(liczba_miesiecy)
    int_liczba_miesiecy_ostatnia_cyfra = int(liczba_miesiecy[-1:])
    int_liczba_miesiecy_ostatnie_2cyfry = int(liczba_miesiecy[-2:])
    miesiace = ""

    if int_liczba_miesiecy == 1:
        miesiace = "miesiąc"
    elif int_liczba_miesiecy >=2 and int_liczba_miesiecy <= 4:
        miesiace = "miesiące"
    elif int_liczba_miesiecy >= 5 and int_liczba_miesiecy <= 21 or int_liczba_miesiecy_ostatnie_2cyfry in range(12, 15):
        miesiace = "miesięcy"
    elif int_liczba_miesiecy > 21 and int_liczba_miesiecy_ostatnia_cyfra >= 2 and int_liczba_miesiecy_ostatnia_cyfra <= 4:
        miesiace = "miesiące"
    elif int_liczba_miesiecy > 21 and (int_liczba_miesiecy_ostatnia_cyfra >= 5 and
         int_liczba_miesiecy_ostatnia_cyfra <= 9 or int_liczba_miesiecy_ostatnia_cyfra == 0 or int_liczba_miesiecy_ostatnia_cyfra == 1):
        miesiace = "miesięcy"
    else:
        miesiace = "brak"

    return miesiace
0

@black_q: Możesz też podejrzeć jak to jest zrobione w gettext (jest odniesienie do liczby mnogiej w wielu językach w tym polskiego):

https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1