chaine = "Hello World"
for i in chaine:
    print(i)    

if "a" in "abcd":
    print("Oui, a est là")


#Rappel : les chaînes sont des objets immutables... démo :

chaine = "Bonjour"
for i in range(len(chaine)):
    chaine[i] = "a"

# => on n'a pas le droit de modifier chaine !!!

"""
Explanation: Rappels : Il est possible d'itérer sur une chaine de caractères. Il est également possible (en Python) de vérifier qu'un caractère est présent dans une chaîne, mais attention, ceci ne fonctionne pas dans tous les langages ! Voir les exemples ci-dessous.
End of explanation
"""


%load_ext doctestmagic

def compte_car(chaine, lettre):
    '''
    :entree chaine: chaine de caractères
    :entree lettre: un caractère recherché
    :sortie compteur: int, un entier
    :post-cond: compteur donne le nb d'occurences du caractère recherché dans la chaîne. 
    >>> compte_car("bonjour", "o")
    2
    >>> compte_car("", "i")
    0
    >>> compte_car("etoile", "j")
    0
    '''
    compteur = 0
    for caractere in chaine:
        if caractere == lettre:
            compteur +=1
    return compteur

%doctest compte_car

"""
Explanation: Exercice 1 : Écrire une méthode qui compte le nombre d'occurences (apparitions) d'un caractère dans une chaîne de caractères, tous deux passés en paramètres.
End of explanation
"""


def compte_car_bis(chaine, lettre):
    compteur = 0
    i = 0
    while i < len(chaine):
        if chaine[i] == lettre:
            compteur += 1
        i += 1
    return compteur

print("Test de compte_car")
print(compte_car("Villeurbanne", "l"))
print(compte_car("La vie est belle", "e"))
print(compte_car("Toto", "z"))

print("Test de compte_car_bis")
print(compte_car_bis("Villeurbanne", "l"))
print(compte_car_bis("La vie est belle", "e"))
print(compte_car_bis("Toto", "z"))

"""
Explanation: Exercice 2 : Même question, mais cette fois, avec un 'while' et non un 'for'
End of explanation
"""


def indice_min_char(chaine, caractere):
    '''
    :entree chaine: str
    :entre caractere: str
    :sortie indice: indice
    :post-condition: indice donne l'indice du premier caractere dans la chaine et est égal à -1 
     si la chaine est vide ou le caractère non présent
    >>> indice_min_char("Bonjour", "j")
    3
    >>> indice_min_char("","x")
    -1
    >>> indice_min_char("hello beauty", "k")
    -1
    >>> indice_min_char("hell", "l")
    2
    >>> indice_min_char("hello","o")
    5
    '''
    indice = -1
    i = 0
    while i <= len(chaine):
        if chaine[i] == caractere:
            indice = i
            i = len(chaine) + 1
    return indice

indice_min_char("ttata", "c")

%doctest indice_min_char

"""
Explanation: Exercice 3 : Écrire une méthode qui retourne l'indice de la première occurrence d'un caractère dans une chaîne. Attention à ce que vous allez dire dans le contrat.
End of explanation
"""


def estMiroir(ch1,ch2):
    '''
    :entree ch1: une chaine de caractères
    :entree ch2: une autre chaîne de caractères
    :sortie bool: True si les chaînes sont miroir, False sinon
    :pre-cond: les chaînes sont de même longueur
    '''
    invertCh1 = ""
    
    for i in range(len(ch1)):
        invertCh1 =  invertCh1 + ch1[len(ch1)-i-1]
    
    return invertCh1 == ch2

a ="toto"
b = "otot"
c = "truc"
d = "trrr"

print(estMiroir(a,b))
print(estMiroir(c,d))

"""
Explanation: Exercice 4. Écrire une méthode estMiroir qui prend en paramètres deux chaînes de caractères de même longueur et qui renvoie True si les chaînes sont miroir l'une de l'autre, et False sinon.
End of explanation
"""


def miroir(chaine):
    '''
    :entre la chaine de caractère
    :sortie la chaine de caractere avec les caracteres inversés
    '''
    stri=""

    for i in range(0,len(chaine)):
        stri+=chaine[len(chaine)-i-1]
        
    return stri

def estMiroir(a, b):
    return a == miroir(b)

print(estMiroir("Toto", "tata"))
print(estMiroir("titi", "itit"))

"""
Explanation: Ci-dessous une solution plus simple (en deux lignes, dans laquelle on réutilise miroir, que l'on a défini la dernière fois..
End of explanation
"""


