"""
Ce program permet de:
    1 – Calculer la factorielle d’un nombre
    2 – Calculer le nombre de combinaisons entre 2 nombres
    3 – Dire si un nombre est premier ou non
    4 – Calculer le PGCD entre 2 nombre
    5 – Trouver le nombre de mots dans une phrase
    6 - Quitter

"""
from os import system

def menu():
    while True:
        system("clear")
        print(50*"*")
        print("Soyez les bienvenus, vous pouvez : ")
        print("1 – Calculer la factorielle d’un nombre")
        print("2 – Calculer le nombre de combinaisons entre 2 nombres")
        print("3 – Dire si un nombre est premier ou non")
        print("4 – Calculer le PGCD entre 2 nombre")
        print("5 – Trouver le nombre de mots dans une phrase")
        print("6 - Quitter")
        rep = input("\nVous devez coisir un nombre entre 1 et 6 : ")
        if rep in ["1","2","3","4","5","6"]:
            return int(rep)
        print(50*"*")

        # prévoir une instruction qi efface l'écran


def premier(n):
    """
    cette fonction permet de dire si un nombre est premier
    ou non
    """
    for i in range(2,n//2):
        if n%i==0:
            return False
    return True

def fact(n):
    f = 1
    for i in range(2, n+1):
        f =f *i
    return f

def cnp(n,p):
    return fact(n)//(fact(p)*fact(n-p))


    
def lireEntierPositifOuNul(message):
    while True:
        rep = input(message)
        if rep.isdigit():
            return int(rep)
    
def pgcd(a,b):
    while True:
        if a>b:
            a = a-b
        else:
            b = b - a
        if a == b:
            return a


    
while True:
    # afficher le menu
    m = menu()

    # Je fait un trairement selon le menu choisi

    if m == 1 :
        print("\n1 – Calculer la factorielle d’un nombre\n\n")
        n = lireEntierPositifOuNul("Donnez n :  ")
        print(n, "! = ", fact(n))

        input("Tapez une touche pour revenir au menu ...")
        
    if m == 2 :
        print("\n\n2 – Calculer le nombre de combinaisons entre 2 nombres\n\n")
        n = lireEntierPositifOuNul("Donnez n :  ")
        p = lireEntierPositifOuNul("Donnez p :  ")
        print("CNP(", n,",",p,") = ", cnp(n,p))
        input("Tapez une touche pour revenir au menu ...")
       
    if m == 3 :
        print("\n\n3 – Dire si un nombre est premier ou non\n\n")
        n = lireEntierPositifOuNul("Donnez une valeur ")
        if premier(n):
            print(n, " est premier")
        else:
            print(n , " n'est pas premier")
        input("Tapez une touche pour revenir au menu ...")

    if m == 4 :
        print("\n\n4 – Calculer le PGCD entre 2 nombre\n\n")
        a = lireEntierPositifOuNul("Donnez a ")
        b = lireEntierPositifOuNul("Donnez b ")
        print("le PGCD entre ", a , " et ", b , " est : ", pgcd(a,b))
        
        input("Tapez une touche pour revenir au menu ...")

    if m == 5 :
        print("\n\n5 – Trouver le nombre de mots dans une phrase\n\n")
        input("Tapez une touche pour revenir au menu ...")
        
    if m == 6 :
        print("\n\nfin du programme")
        print("J'ai été ravi de faire ces calcul ...")
        print("au plaisir de vous voir la prochaine fois\n\n")
        break

    


