Changement de casse

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 653 fois - Téléchargée 14 fois

Contenu du snippet

J'ai fait un petit programme en mode console pour un ami, qui renvoie dans un fichier texte toutes les possiblités de casse pour un même mot.

Par exemple pour "mot", on retournera (en colonne) : mot, moT, mOt, mOT, Mot, MoT, MOt, MOT.

J'utilise en fait du binaire pour savoir s'il faut mettre une majuscule ou non.
Pour la k-ième possibilité, on transforme k en binaire et on fait correspondre le 1 à une majuscule et 0 à la minuscule.

Source / Exemple :


#!/usr/bin/python
#-*-coding: utf-8 -*-
## by Linkid (François Magimel)
## Permet d'afficher les possibilités de casse pour un mot
## En mode console

import os

def main(mot):
	fichier = open("combinaison_casse.txt", 'w')
	nb = 2**len(mot)  ## nombre de mots possibles
	for i in range(0, nb):
		bi = bin(i)[2:]  ## de 0 à nb-1 en binaire
		nbi = len(bi)  ## nombre de caractères binaires
		mot_2 = "" ## mémoire du mot final
		for j in range(0, len(mot)):
			k = len(mot)-1-j  ## pour le mot : prendre le dernier caractère de mot, de len(mot)-1 à 0
			p = nbi-1-j  ## pour le binaire : prendre le dernier caractère de bi, peut être négatif
			if p >= 0 and bi[p] == "0":
				mot_3 = mot[k]
			elif p >= 0 and bi[p] == "1":
				mot_3 = str.upper(mot[k])  ## caractère en majuscule
			else:
				mot_3 = mot[k]
			mot_2 = mot_3 + mot_2
			
		#print mot_2 ## mot final
		fichier.write(mot_2 + '\n') ## écriture dans un fichier
	
	fichier.close()
	print "Il y a " + str(nb) + " possiblilité(s)"

if __name__ == '__main__':
	mot = raw_input("Salut ! Rentre ton mot de 8 lettres...\nTon mot : "); ## retoune un string
	main(str.lower(mot)) ## l'argument de main est un mot en minuscule

Conclusion :


J'ai décidé de mettre les possibilités dans un fichier texte pour éviter d'avoir une console remplie, mais pour les trop grands mots, le fichier texte devient un peu lourd.

Donc en amélioration possible, il serait bien de faire comme dans le terminal sous GNU/Linux avec une option more pour continuer à afficher, et taper q pour arreter. Ca permettrait de ne plus avoir le fichier texte et de tout afficher dans la console.
Surement à l'aide d'un while...

Merci pour vos commentaires.

A voir également

Ajouter un commentaire

Commentaires

isqounet
Messages postés
2
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
7 janvier 2010
-
bonsoir
heu... que se passe t'il si le mot contient un chiffre ou un ' _ ' ou un '@' ??? je sais , je pinaille

Etant un éternel débutant en python (et en programmation)
le coup du binaire pour moi c'est du chinois
toutefois ce code me parait bien compliqué pour le taf qu'il doit faire
du coup ,j'ai essayé une autre solution, ça a l'air de fonctionner.

#!/usr/bin/python
#-*-coding: utf-8 -*-

mot="b@nane" ### pas d'input , un poil dans la main m'en a empêché
mot=mot.lower()

temp={}
temp2={}

maxi=len(mot)

temp[mot[0]]=0
temp[mot[0].upper()]=0

for indice in range(1,maxi):
for nn in temp:
temp2[nn+mot[indice]]=0
temp2[nn+mot[indice].upper()]=0
temp.clear()
temp.update(temp2)
temp2.clear()

print (temp.keys()) # affiche tous les mots possibles
print (len(temp.keys())) ### et le nombre
aera group
Messages postés
390
Date d'inscription
mercredi 23 août 2006
Statut
Membre
Dernière intervention
8 novembre 2010
8 -
Ouai .. ouai .. oaui pas grand intérêt si ce n'est celui du traitement de chaine de caractère mais je trouve ça un peu lège non ? Enfin, il fonctionne c'est déjà ca, 7/10
cs_linkid
Messages postés
107
Date d'inscription
mardi 29 novembre 2005
Statut
Membre
Dernière intervention
8 mai 2009
-
Salut !

Afficher le nombre de possibilités n'est pas très intéressant : il y a 2^n possibilités (n = nombre de caractère du mot entré).
Mais afficher les possibilités l'est un peu plus...

@+
creepou
Messages postés
7
Date d'inscription
mercredi 28 février 2007
Statut
Membre
Dernière intervention
8 mai 2009
-
Oui effectivement j'avais pas saisi que tu voulais générer toutes les possibilités pas juste les compter ! Plates excuses :)
creepou
Messages postés
7
Date d'inscription
mercredi 28 février 2007
Statut
Membre
Dernière intervention
8 mai 2009
-
Arf non j'avais mal compris excuse moi je pensais que tu voulais juste fair un compte :s

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.