﻿'''
Python - analyse de données

TD 1 :

------------------------------------------------------------------------------------
Exercice 1 : 
	afficher les carrés des 10 premiers nombres en partant de 1
'''
print("exo 1 --------------------------------------------------")
for i in range(1, 11): # on boucle de 1 à 11 non compris <=> for(i=1; i<11; i++) du C ou du Java
	print(i, i*i)

'''
------------------------------------------------------------------------------------
Exercice 2 :
	afficher les carrés pairs des 10 premiers nombres en partant de 1
'''
print("exo 2 v1 --------------------------------------------------")
for i in range(2, 11): # on boucle de 1 à 11 non compris <=> for(i=2; i<11; i++) du C ou du Java
	if i*i % 2 == 0 : # on teste la parité du carré
		print(i, i*i)

# autre version
print("exo 2 v2 --------------------------------------------------")
for i in range(2, 11, 2): # on boucle de 1 à 11 non compris par pas de 2 <=> for(i=0; i<11; i=i+2) du C ou du Java
		print(i, i*i)
'''
------------------------------------------------------------------------------------
Exercice 3 :	
	afficher les carrés pairs des 10 premiers nombres 
    en partant de 1 avec le nombre en premiers:  
		n= 2  carré= 4 (1 espace après =, 2 espaces entre 2 et carré)
		n= 4  carré= 8
		etc.
		n= 10  carré= 100
'''
print("exo 3 v1 --------------------------------------------------")
for i in range(1, 11): # boucle de 0 à 9 (for (i=1; i<11; i++))
    if i*i %2 == 0: # test de parité
        print("n=", i, "carré=", i*i) 

print("exo 3 v2 --------------------------------------------------")
for i in range(2, 11, 2): # boucle de 0 à 9 (for (i=2; i<11; i=i+2))
    print("n=", i, "carré=", i*i) 
'''     
------------------------------------------------------------------------------------
Exercice 4 :
	faites la même chose sans espace après le =
		n=1  carré=1
		n=2  carré=4
		etc.
		n=10  carré=100

'''
print("exo 4 --------------------------------------------------")
for i in range(2, 11, 2): # boucle de 0 à 9 (for (i=2; i<11; i=i+2))
    print(f"n={i} - carré={i*i}") 
''' 
        
------------------------------------------------------------------------------------
Exercice 5 : 
	Comme le 3, en ajoutant le numéro du carré devant : 
	1 : n= 2  carré= 4 (1 espace après le : et le =, 2 espaces entre 2 et carré)
	2 : n= 4  carré= 16
	etc.
'''
print("exo 5 v1 --------------------------------------------------")
# la solution algorithmique standard
compteur = 0
for i in range(1, 11): # boucle de 0 à 9 (for (i=1; i<11; i++))
    if i*i %2 == 0: # test de parité
        compteur+= 1
        print(compteur, ": n=", i, "carré=", i*i) 

print("exo 5 v2 --------------------------------------------------")
# une solution compacte un peu compliquée
for i in range(2, 11, 2): # boucle de 0 à 9 (for (i=2; i<11; i=i+2))
    print(i//2, ": n=", i, "carré=", i*i)
'''
    
------------------------------------------------------------------------------------
Exercice 6 : 
	Comme le 4, en ajoutant le numéro du carré devant : 
	1: n=2  carré=4
	2: n=4  carré=16
	etc.
'''
print("exo 6 --------------------------------------------------")
compteur = 0
for i in range(1, 11): # boucle de 0 à 9 (for (i=1; i<11; i++))
    if i*i %2 == 0: # test de parité
        compteur+= 1
        print(f"{compteur}: n={i} carré={i*i}") 

'''
------------------------------------------------------------------------------------
Exercice 7 : 
	On veut obtenir le résultat formaté suivant : 
	 1: n= 2  carré=  4
	 2: n= 4  carré= 16
	...
	10: n=20  carré=400 

	pour ça, on va utiliser les f-string
	on écrit {n:2d} pour pouvoir afficher n sur 2 caractères en mettant l'unité à droite.

	On fait ça d'abord avec un nombre de carrés demandé qui vaut 10 au maximum.

'''
print("exo 7 --------------------------------------------------")
compteur = 0
for i in range(1, 21): # boucle de 0 à 9 (for (i=1; i<11; i++))
    if i*i %2 == 0: # test de parité
        compteur+= 1
        print(f"{compteur:2d}: n={i:2d} carré={i*i:3d}") 

'''
------------------------------------------------------------------------------------
Exercice 8 : 
	Pour finir, on fait en sorte que l'affichage soit toujours propre 
    quel que soit le nombre de carré demandé.
	Pour ça, le 2 dans {n:2d} sera mis dans un variable
	on peut écrire : 
	d1=2
	{n:{d1}d}

	Pour avoir le nombre de caractères, il suffit de connaitre le nombre 
    de caractères du plus grand n : dans l'exemple, c'est 20.
	Si cette valeur est dans n_max, il suffit d'écire : 
	d1 = len(str(n_max)) # on transforme n_max en string et on récupère la longueur

------------------------------------------------------------------------------------
Exercice 9 : 
	On va ajouter une ligne d'en-tête avec une ligne de -----

 i:  n carré
------------
 1:  2     4
 2:  4    16 
etc.
10: 20   400

	Pour ça, on peut écrire {'i':>2s}: pour dire que le i sera sur 2 caractères, 
    callé à droite et suivi d'un :
	Pour faire la ligne de ------, on peut écrire print(2*"-"+"--") pour les 2 premiers caractères du i (formaté sur 2 caractères) suivi de : et d'un espace, dont 2 -. Et ainsi de suite.

------------------------------------------------------------------------------------
Exercice 10 : 
Ecrire des fonctions qui font les exercices précédents à partir du 5.
Testez-les comme proposé ci-dessous : 

exo5_affiche_carres(10)
nb_carres=int(input("nb carrés (20 par exemple): "))
exo5_affiche_carres(nb_carres)

exo6_affiche_carres(10)
nb_carres=int(input("nb carrés (20 par exemple): "))
exo6_affiche_carres(nb_carres)

exo7_affiche_carres(10)
nb_carres=int(input("nb carrés (20 par exemple): "))
exo7_affiche_carres(nb_carres)

exo8_affiche_carres(10)
nb_carres=int(input("nb carrés (20 par exemple): "))
exo8_affiche_carres(nb_carres)

exo9_affiche_carres(10)
nb_carres=int(input("nb carrés (20 par exemple): "))
exo6_affiche_carres(nb_carres)

------------------------------------------------------------------------------------
Exercice 11 : 
Ecrire une fonction capitalize_texte qui met tous les mots d'un texte 
avec une majuscule en première lettre

On fera plusieurs versions :
	1 : avec title() uniquement
	2 : avec split, avec join, avec capitalize, sans title
   3 : avec split, avec capitalize, sans join, sans title
   4 : avec capitalize, avec strip, avec find, sans split, sans join
   5 : en pur axiomatique avec upper()

def capitalize_texte(texte):
    pass
    # à écrire

# tests 
print(capitalize_texte("Texte de test de la fonction capitalize_texte_2"))
print(capitalize_texte("   Texte de    test de la    fonction capitalize_texte_2   "))
print(capitalize_texte(""))
print(capitalize_texte("Texte"))
print(capitalize_texte("texte"))
print(capitalize_texte("texte "))
print(capitalize_texte("   texte   "))

------------------------------------------------------------------------------------
exercice 12
Ecrire une fonction double qui prend un texte en paramètre
et retourne le texte en doublant tous les nombres entiers positifs du texte

"33".isnumeric() vaut True
"coucou".isumeric() vaut False

def double(texte):
    pass

print(double("coucou 33 et 4"))
# Résultat : coucou 66 et 8
'''