1
votes

Impossible d'imprimer les caractères en double présents dans une chaîne

J'essayais d'imprimer un caractère dupliqué présent dans une chaîne.

Il y a une chaîne a = "ctintcdctccc". J'ai écrit une boucle while imbriquée pour vérifier si le premier index de la chaîne 'a' est égal à le deuxième indice de «a». J'essayais de vérifier en prenant deux paramètres i et j en gardant la valeur de i initialement égale à 0 mais la valeur de j boucle de 0 à la longueur de la chaîne-1 afin de comparer à chaque fois chaque index de la chaîne avec le prochain index de la chaîne et imprime la valeur dupliquée.

a="ctintcdctccc"  
i=0
j=0
char=""
while i<len(a)-1:
    while j<len(a)-1:
        if a[i]==a[j+1]:
            char=char+a[i]
        j+=1
    i+=1
print(char)

La sortie que j'obtiens est char = ccccc mais n'imprime pas d'autre chaîne dupliquée 't' qui est également une valeur dupliquée.


0 commentaires

3 Réponses :


2
votes

La raison pour laquelle votre algorithme ne fonctionne pas est que vous ne réinitialisez jamais la valeur de j après la première itération. Ainsi, ce que vous vouliez faire est certainement:

from collections import Counter

a="ctintcdctccc" 
b = Counter(a)  # b = {'c': 6, 't': 3, 'i': 1, 'n': 1, 'd': 1}

Ce qui ne parvient toujours pas à faire ce que vous vouliez.

Une solution plus simple (brouillon) est:

char = {}
for i in a:
    if i in char:
        char[i] += 1
    else:
        char[i] = 1
print(char)   # char = {'c': 6, 't': 3, 'i': 1, 'n': 1, 'd': 1}

Alternativement Pour ce faire, vous pouvez utiliser Counter :

a = "ctintcdctccc"
i = 0
j = 0
char = ""
while i < len(a)-1:
    j = i+1  # reset j
    while j < len(a)-1:
        if a[i] == a[j+1]:
            char = char+a[i]
        j += 1
    i += 1

print(char) # 'cccctttccccc'


3 commentaires

Comment obtenir le résultat sans implémenter Counter et pouvez-vous expliquer ce qui ne va pas dans mon code?


Je ne comprends pas. Même si je n'ai pas initialisé j = i + 1, la valeur de j était incrémentée de 1 par (j + = 1 instruction) rt?


@ user11582315 Ceci n'est vrai que pour la première itération (i = 0), quand i atteint la valeur suivante, la valeur j est 10 et les instructions après tandis que j ne sont jamais atteints car la condition est fausse.



0
votes

En gros, votre j n’est pas réinitialisé. Ainsi, vos boucles ne sont exécutées qu'une seule fois. Réinitialisez j comme j = i avant que la boucle interne ne démarre. De plus, vous pouvez vérifier si l'élément est déjà présent dans la chaîne char .

while i<len(a)-1:
    j = i
    while j<len(a)-1:
        if a[i]==a[j+1]:
            if(a[i] not in char):
                char=char+a[i]
        j+=1
    i+=1


0 commentaires

0
votes

Vous pouvez le changer en une liste, puis utiliser count () et remove():

a="ctintcdctccc"  
a = list(a)
i = 0
dups = ''
while a:
    if a.count(a[i])>1:
        dups += a[i]*a.count(a[i])
    temp = a[i]
    for o in range(a.count(a[i])):
        a.remove(temp)
print(dups)

De cette façon, vous n'a pas besoin d'importer quoi que ce soit, et cela fonctionnera sur n'importe quel ordinateur avec python.

Alternativement, vous pouvez réparer votre code pour réinitialiser j au début de chaque itération de votre première boucle while


0 commentaires