2014-09-18 2 views
-2

J'essaye depuis un certain temps maintenant d'imaginer un moyen de générer toutes les capitalisations possibles d'un mot en Python. Par exemple:Comment obtenir toutes les capitalisations d'un mot?

hello 
Hello 
HEllo 
... 
heLLo 
... 
HeLlO 

J'ai trouvé quelques fonctions intégrées qui fonctionnent sur la capitalisation (.capitalize() par exemple), mais ils semblent traiter les cas typiques (des phrases simples, bibliographie). Je vous serais reconnaissant d'un soupçon sur l'endroit où regarder les for boucles j'ai pensé, ainsi que récursion n'étaient pas une solution (je ne les citerai pas ici, ils étaient si mal)


Précision : puisque entre 5 et 9 personnes (via une mise en attente, downvote et commentaires) ont besoin d'une clarification, je vais essayer d'en faire une, en utilisant des mots différents.

J'ai une chaîne composée de caractères de a à z (appelé plus tard mot). Je voudrais, en Python, obtenir une liste de ces mot, mais en majuscules de toutes les manières possibles (c'est-à-dire, un mélange de majuscules (comme M) et minuscules (comme f). une liste similaire à celle ci-dessus (avec des variations du mot hello.

Je suis bien contente que je n'ai pas demandé comment multiplier deux nombres, j'aurais besoin de clarifier avec un cours intensif dans les anneaux algébriques

+2

Quel est le problème de la vie réelle est abordée par cette question? – Wolf

+0

Cela sent comme un [problème XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Qu'essayez-vous de faire? - Quel est ton objectif final, OP? – amphetamachine

+0

Je ne sais pas ce qui n'est pas clair dans ma question: ayant un mot, j'aimerais avoir un algorithme pour obtenir une liste de toutes les capitalisations de ce mot. En Python. Le problème de la vie réelle est que je veux obtenir cette liste (parce que j'en ai besoin pour quelque chose de complètement sans rapport avec la question). Je serais heureux de clarifier, mais je ne sais pas quoi clarifier davantage ici. – WoJ

Répondre

5

Utilisation de itertools.product:

import itertools 
for chars in itertools.product('hH', 'eE', 'lL', 'lL', 'oO'): 
    print(''.join(chars)) 

OU

word = 'hello' 
for chars in itertools.product(*zip(word, word.upper())): 
    print(''.join(chars)) 

sortie:

hello 
hellO 
helLo 
helLO 
heLlo 
heLlO 
heLLo 
heLLO 
... 
+0

+1 pour la seconde – Wolf

+0

+1, La seule chose que j'ajouterais, c'est que ceci peut être écrit comme un doublon avec une compréhension de la liste: '['' .join (l) pour l dans itertools.product ('hH' , 'eE', 'lL', 'lL', 'oO')] – miku

0

Quand réinterprétant le se de la question, il pourrait aussi vouloir dire:

Comment évaluer la contribution d'un keybord avec une touche Maj décalée (si le cas n'est pas important)?

Ensuite, je serais probablement essayer ce

import re 

m = re.match(user_input, "hello", re.IGNORECASE); 

... ou tout simplement ce

user_input.lower() == "hello" 
Questions connexes