2017-10-10 5 views
0

Je dois vérifier une chaîne à partir d'une entrée utilisateur et j'ai besoin de savoir si elle contient 3 caractères identiques, par exemple "!!!" ou "qqq" ou "111" etc.Comment faire pour vérifier s'il y a 3 lettres identiques dans une chaîne python

J'ai également besoin de savoir si la chaîne a 3 lettres l'une à côté de l'autre sur le clavier l'une à côté de l'autre dans la chaîne par exemple. "qwe" ou "ert". Je n'ai aucune idée de comment faire cela et dois l'apprendre.

+2

Lire ce premier https://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions – fvu

+4

Je pense qu'il y a un certain nombre de façons contradictoires d'interpréter vos exigences . Est-ce que "123AAA456" compte comme contenant 3 du même personnage? Est-ce que "1A23A4A56" compte comme contenant 3 du même personnage? Est-ce que "AAAA" compte comme contenant 3 du même personnage? Penser à ces cas peut vous donner un aperçu de la façon d'aborder le problème. – Kevin

+2

Qu'avez-vous déjà essayé? S'il vous plaît voir [MCVE] (https://stackoverflow.com/help/mcve), [Comment demander] (https://stackoverflow.com/help/how-to-ask). – toonarmycaptain

Répondre

2

Vous posez deux questions différentes. Je suis moi-même en train d'essayer d'en savoir plus sur regex et j'ai pensé que ça pourrait t'aider.

import re 

# https://regex101.com/r/DTrSmV/1 
regex = r"(.)\1{2}" 
line = "aaa!!!oo????" 
matches = re.findall(regex, line) 

print(matches) 

Vous pouvez également utiliser itertools:

import itertools 

line = "aaa!!!oo????" 
[k for k, g in itertools.groupby(line) if len(list(g)) >= 3] 

deux retour:

["a","!","?"] 

Quant au clavier:

keyboard1 = "qwertyuiop" 
lst = [keyboard1[ind:ind+3] for ind in range(len(keyboard1)-2)] 
# lst <-- ['qwe', 'wer', 'ert', 'rty', 'tyu', 'yui', 'uio', 'iop'] 

Nous pouvons utiliser à nouveau regex et trouver des combos en les compilant:

import re 
regex = re.compile("|".join(lst)) 

string = "qwengnggnrty" 
re.findall(regex, string) 

Retours

['qwe', 'rty'] 

Bonne chance!