le terme Bigramme désigne la combinaison de deux lettres consécutives et distinctes dans un mot. On se propose d’écrire un programme Python qui permet d’afficher le nombre d’occurrences de chaque Bigramme d’une chaîne de caractères ch non vide et formée uniquement de lettres minuscules.
Exemple : Pour Ch=’mamapappacma’ le programme affiche :
Le nombre d’occurrences de ma est 3
Le nombre d’occurrences de am est 1
Le nombre d’occurrences de ap est 2
Le nombre d’occurrences de pa est 2
Le nombre d’occurrences de ac est 1
Le nombre d’occurrences de cm est 1
Voici un principe algorithmique qui permet de calculer le nombre d'occurrences de chaque bigramme dans une chaîne de caractères.
1- Saisie de la chaîne de caractères ch :
La chaîne ch est une chaîne non vide composée uniquement de lettres minuscules.
2- Identification des bigrammes :
Un bigramme est une combinaison de deux lettres consécutives distinctes dans la chaîne.
Parcourir la chaîne et extraire tous les bigrammes possibles.
3- Comptage des occurrences des bigrammes :
Pour chaque bigramme trouvé, compter combien de fois il apparaît dans la chaîne.
4- Affichage des résultats :
Afficher chaque bigramme distinct avec son nombre d'occurrences.
Dans cet algorithme, On va utiliser 3 fonctions et une procédure:

Algorithme du programme Principal
| 
					 1 2 3 4 5  | 
						Algorithme chaîne_bigramme Debut     ch<-saisie_chaine()     afficher_occurrences(ch) Fin  | 
					
Déclaration des objets
| Objet | Type / Nature | 
|---|---|
| ch | chaîne des caractères | 
La fonction verif_lettres
Cette fonction vérifie que la chaîne est composée seulement des lettres minuscules dont deux lettres consécutives sont distinctes.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						Fonction verif_lettres(ch:chaîne):booleen Début      i<-0      test_unicite<-Vrai      # Verifier si la chaine est composee uniquement par des lettres minuscules et distinctes deux à deux       Tant que (i<long(ch)-1) et test_unicite et ('a'<=ch[i]<='z') faire         Si i>0 alors            test_unicite<-(ch[i]!=ch[i-1]) # tester si deux lettres consecutives sont distintes         fin si         i=i+1      Fin tant que      retourner 'a'<=ch[i]<='z' et test_unicite  Fin  | 
					
Déclaration des objets
| Objet | Type / Nature | 
|---|---|
| i | entier | 
| test_unicite | booléen | 
La fonction saisie_chaine
Cette fonction saisit une chaîne composée uniquement des lettres minuscules et distinctes deux à deux.
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						fonction saisie_chaine():chaine Début      Ecrire('donner une chaine contenant uniquement des lettres minuscules distinctes:')      Lire(ch)       Tant que (verif_lettres(ch)=Faux) faire          Ecrire('donner une chaine contenant uniquement des lettres minuscules distinctes:')          Lire(ch)      Fin tant que      retourner ch Fin  | 
					
Déclaration des objets
| Objet | Type / Nature | 
|---|---|
| ch | chaîne des caractères | 
La fonction nbr_occurrences
Cette fonction recherche le nombre d'occurrences d'une chaine ch1 dans une autre chaine ch.
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						fonction nbr_occurrences(ch:chaine,ch1:chaine):entier Début      cp<-0      Tant que(Pos(ch,ch1)>=0) faire          # effacer ch1 de al chaine ch         ch<-Sous_chaine(ch,0,Pos(ch,ch1)) + Sous_chaine(ch,ch.find(ch1)+2,long(ch))         cp<-cp+1       Fin tant que      retourner cp Fin  | 
					
Déclaration des objets
| Objet | Type / Nature | 
|---|---|
| cp | entier | 
La procédure afficher_occurrences
Cette procédure recherche et d’afficher le nombre d’occurrences de chaque Bigramme d’une chaîne de caractères
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						Procédure afficher_occurrences(ch:chaine) Début      ch1<-''      Pour i de 0 à long(ch)-1 faire         Si Pos(ch1,ch[i]+ch[i+1])<0alors # pour eviter la redondance des deux lettres            Ecrire('Le nombre d occurrences de ' +ch[i]+ch[i+1]+'= '+nbr_occurrences(ch,ch[i]+ch[i+1]))            ch1<-ch1+ch[i]+ch[i+1]         Fin si      Fin pour Fin  | 
					
Déclaration des objets
| Objet | Type / Nature | 
|---|---|
| ch1 | chaîne des caractères | 
| i | entier | 
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38  | 
						def verif_lettres(ch):     i=0     test_unicite=True     while (i<len(ch)-1) and test_unicite and ('a'<=ch[i]<='z'):         if i>0:             test_unicite=(ch[i]!=ch[i-1])         i=i+1     return 'a'<=ch[i]<='z' and test_unicite    # Saisie du message et placer chaque caractere du message dans une case du tableau T             def saisie_chaine():     ch=input('donner une chaine contenant uniquement des lettres minuscules distinctes: ')     while verif_lettres(ch)==False :         ch=input('donner une chaine contenant uniquement des lettres minuscules distinctes: ')     return ch def nbr_occurrences(ch,ch1):           cp=0      while(ch.find(ch1)>=0):           ch=ch[0:ch.find(ch1)]+ch[ch.find(ch1)+2:len(ch)]           cp=cp+1          return cp def afficher_occurrences(ch):     ch1=''     for i in range(len(ch)-1):         if ch1.find(ch[i]+ch[i+1])<0: # pour eviter la redondance des deux lettres            print('Le nombre d occurrences de ' +ch[i]+ch[i+1]+'= '+str(nbr_occurrences(ch,ch[i]+ch[i+1])))            ch1=ch1+ch[i]+ch[i+1] # programme principal #print(str(nbr_occurrences('mamapoima','ma'))) ch=saisie_chaine() afficher_occurrences(ch)  | 
					
Exécution du programme

Pour créer une application en Python et Designer QT qui affiche le nombre d’occurrences de chaque Bigramme d’une chaîne de caractères ch, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit nommé 'ch' pour entrer une chaîne des caractères .
QPushButton nommé 'bt_rechercher' pour chercher le nombre d’occurrences de chaque Bigramme.
QLabel nommé 'msg' pour afficher les message d'erreurs
QLabel nommé 'resultat' pour afficher le nombre d’occurrences de chaque Bigramme

Enregistrez le fichier avec l'extension .ui, par exemple bigramme-chaine-interface.ui.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51  | 
						from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets import random app = QApplication([]) windows = loadUi ("bigramme-chaine-interface.ui") def verif_lettres(ch):      i=0     test_unicite=True     # Verifier si la chaine est composee uniquement par des lettres miniscules     while(i<len(ch)-1) and (test_unicite) and (('a'<=ch[i]<='z'))  :             print(str(i))             if i>0:                test_unicite=(ch[i]!=ch[i-1])              i=i+1     if (i<len(ch)-1) or (ch[i]<'a') or (ch[i]>'z') or ((ch[i]==ch[i-1])): # si la chaine contient des lettres miniscules           windows.msg.setText("la chaine contient des caracteres non alphabetique et non distinctes")           return False     else :            return True def nbr_occurrences(ch,ch1):           cp=0      while(ch.find(ch1)>=0):           ch=ch[0:ch.find(ch1)]+ch[ch.find(ch1)+2:len(ch)]           cp=cp+1          return cp def afficher_occurrences():  windows.msg.clear()     ch= windows.ch.text()  if (verif_lettres(ch)):     ch1=''     liste=''     for i in range(len(ch)-1):         if ch1.find(ch[i]+ch[i+1])<0: # pour eviter la redondance des deux lettres            liste=liste+'Le nombre d occurrences de ' +ch[i]+ch[i+1]+'= '+str(nbr_occurrences(ch,ch[i]+ch[i+1]))+' \n'            ch1=ch1+ch[i]+ch[i+1]     windows.resultat.setText(liste) windows.bt_rechercher.clicked.connect(afficher_occurrences) windows.show() app.exec_()  | 
					
Exécution du programme

Vous pouvez voir aussi :
                                
                            
                                
                            La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
                Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info