
def traiterSuite(sentinelle):
    """  Somme et nombre de termes d'une suite d'entiers terminée par sentinelle
 
     :param sentinelle: valeur de la sentinelle
     :return: le tuple (somme des termes,nombre de termes)
    """
    s, nt = 0, 0
    print("Un entier [", sentinelle, "==fin]? ", sep="", end="")
    nombre = int(input())
    while nombre != sentinelle:
        s += nombre
        nt += 1
        print("Un entier [", sentinelle, "==fin]? ", sep="", end="")
        nombre = int(input())
    return (s, nt)


def afficherResultats(s, nt):
    """  Affiche les résultats
 
     :param s: somme de la suite
     :param nt: nombre de termes de la suite
    """
    if nt != 0:
        print("==> Nombre d'entiers consideres = ", nt, sep="")
        print("==> Moyenne = ", (float(s) / nt), sep="")
    else:
        print("==> OUPS, aucune entree")


def test1():
    """ @test """
    somme, ntermes = traiterSuite(-1)
    afficherResultats(somme, ntermes)


def traiterSuite2(sentinelle):
    """  Idem traiterSuite, emploi d'une structure Répéter
 
     :param sentinelle: valeur de la sentinelle
     :return: le tuple (somme des termes,nombre de termes)
    """
    s = 0
    nt = 0
    while True:
        print("Un entier [", sentinelle, "==fin]? ", sep="", end="")
        nombre = int(input())
        if nombre != sentinelle:
            s += nombre
            nt += 1
        if not(not (nombre == sentinelle)): break
    return (s, nt)


def test2():
    """ @test """
    somme, ntermes = traiterSuite2(-1)
    afficherResultats(somme, ntermes)


def traiterSuite3(sentinelle, nmin, nmax):
    """  Somme et nombre de termes d'une suite d'entiers dans un intervalle
 
     :param sentinelle: valeur de la sentinelle
     :param nmin: valeur minimale
     :param nmax: valeur maximale avec nmin <= nmax
     :return: le tuple (somme des termes,nombre de termes)
    """
    print("Somme d'entiers dans [", nmin, "..", nmax, "]", sep="")
    s = 0
    nt = 0
    print("Un entier [", sentinelle, "==fin]? ", sep="", end="")
    nombre = int(input())
    while nombre != sentinelle:
        if nmin <= nombre and nombre <= nmax:
            s += nombre
            nt += 1
        else:
            print("==> OUPS, erreur!")
        print("Un entier [", sentinelle, "==fin]? ", sep="", end="")
        nombre = int(input())
    return (s, nt)


def test3():
    """ @test """
    somme, ntermes = traiterSuite3(-1, 0, 20)
    afficherResultats(somme, ntermes)


def traiterSuite4(sentinelle, nmin, nmax):
    """  Idem traiterSuite3, emploi d'une structure Repeter
 
     :param sentinelle: valeur de la sentinelle
     :param nmin: valeur minimale
     :param nmax: valeur maximale avec nmin <= nmax
     :return: le tuple (somme des termes,nombre de termes)
    """
    print("Somme d'entiers dans [", nmin, "..", nmax, "]", sep="")
    s = 0
    nt = 0
    while True:
        print("Un entier [", sentinelle, "==fin]? ", sep="", end="")
        nombre = int(input())
        if nmin <= nombre and nombre <= nmax:
            s += nombre
            nt += 1
        elif nombre != sentinelle:
            print("==> OUPS, erreur!")
        if not(not (nombre == sentinelle)): break
    return (s, nt)


def test4():
    """ @test """
    somme, ntermes = traiterSuite4(-1, 0, 20)
    afficherResultats(somme, ntermes)


def PGMoynotes():
    test1()
    test2()
    test3()
    test4()

PGMoynotes()