

################
##            ##
## Exercice 4 ##
##            ##
################

print('\nExercice 4\n')


## Question 4.1
def nombre_présents(liste_résultats):
    n = 0
    for i in range(len(liste_résultats)):
        if liste_résultats[i] != "ABS":
            n = n+1
    return n


## Question 4.2
def moyenne(liste_résultats):
    somme = 0
    for i in range(len(liste_résultats)):
        if liste_résultats[i] != "ABS":
            somme = somme + liste_résultats[i]
    return somme/len(liste_résultats)



## Question 4.3
def bilan(liste_résultats):
    tab = [0] * 3
    for i in range(len(liste_résultats)):
        if liste_résultats[i] == "ABS":
            tab[2] = tab[2]+1
        elif liste_résultats[i] <10:
            tab[1] = tab[1]+1
        else:
            tab[0] = tab[0]+1
    return tab








################
##            ##
## Exercice 5 ##
##            ##
################
print('\nExercice 5\n')


def entrelacement(s1,s2) :
    # Le assert est facultatif. Il permet de s'assurer que la condition est bien vérifiée.
    assert len(s1) == len(s2)
    res = ''
    for i in range(len(s1)) :
        res = res + s1[i] + s2[i]
    return res


print(entrelacement("abc",'123'))





################
##            ##
## Exercice 6 ##
##            ##
################
print('\nExercice 6\n')



def bien_ponctuée(s) :
    for i in range(len(s)) :
        if s[i] == '.' and i != len(s) - 1 and s[i+1] != ' ' :
            return False
    return True


assert bien_ponctuée('Un. Deux.') == True
assert bien_ponctuée('Trois.Quatre.')==False


def bien_ponctuée_bis(s) :
    for i in range(len(s)) :
        if s[i] == '.' :
            if i != len(s) - 1 :
                if s[i+1] != ' ' :
                    return False
    return True

assert bien_ponctuée_bis('Un. Deux.')==True
assert bien_ponctuée_bis('Trois.Quatre.')==False





################
##            ##
## Exercice 7 ##
##            ##
################
print('\nExercice 7\n')




def est_pangramme(s) :
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    s = s.lower()
    for i in range(len(alphabet)) :
        trouvé=False
        for j in range(len(s)):
            if s[j] == alphabet[i]:
                trouvé=True
                break
        if not trouvé:
            return False
    return True


assert est_pangramme('abcdefghijklmnopqrstuvwxyz')==True
assert est_pangramme('Portez ce vieux whisky au juge blond qui fume.')==True
assert est_pangramme('Portez ce jeune cognac à l’avocat roux qui fulmine.')==False


def est_présent(a,seq):
    for i in range(len(seq)):
        if seq[i] == a:
            return True
    return False

def est_pangramme_bis(s) :
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    s = s.lower()
    for i in range(len(alphabet)) :
        if not est_présent(alphabet[i], s):
            return False
    return True


assert est_pangramme_bis('abcdefghijklmnopqrstuvwxyz')==True
assert est_pangramme_bis('Portez ce vieux whisky au juge blond qui fume.')==True
assert est_pangramme_bis('Portez ce jeune cognac à l’avocat roux qui fulmine.')==False





################
##            ##
## Exercice 8 ##
##            ##
################
print('\nExercice 8\n')


def est_bien_parenthesée(s) :
    n = 0 # <- n est le nombre de parenthèses ouvertes non encore fermées dans s[:i]
    for i in range(len(s)) :
        if s[i] == '(' :
            n = n + 1
        elif s[i] == ')' :
            n = n - 1
            if n < 0 :
                return False
    return n == 0

assert est_bien_parenthesée('(1+2)×(x+(1-3))') == True
assert est_bien_parenthesée('(1+2)×(x+1-3))') == False
assert est_bien_parenthesée('(1+2)×()x+(1-3))') == False
