Commentçamarche.net
CodeS-SourceS
Rechercher un code, un tuto, une réponse

Le mot le plus long par dico

Soyez le premier à donner votre avis sur cette source.

Vue 7 098 fois - Téléchargée 233 fois

Description

mon premier programme python un peu élaboré, Il ouvre un dico de mots, demande à l'utilisateur la suite de lettres, si l'utilisateur rentre rand() un mode aléatoire est prévu, il cherche les plus grand mots possibles, bref ça marche très bien...
exemple: pour typhno il donnera python, thon,...
Parfait pour jouer à l'émission "des chiffres et des lettres", à condition d'avoir un bon dico.

J'attends vos critiques et vos conseils avec impatience.

Source / Exemple :


# selection du dictionnaire de mots
print "\nentrez small pour avoir le petit dico fr (ultrarapide, petit, tres fiable)"
print "entrez latin pour avoir le dico latin (rapide, moyen, tres fiable)"
print "entrez medium pour avoir le dico fr moyen (rapide, gros, moyennement fiable)"
print "entrez big pour avoir le gros dico fr (lent, tres gros, peu fiable)"
print "\nentrez le nom du dico :",
adresse = raw_input()

if adresse == "small":
 adresse = "top10000fr.txt"
elif adresse == "medium":
 adresse = "dictionary_french.dic"
elif adresse == "big":
 adresse = "wordlist.txt"
elif adresse == "latin":
 adresse = "dictionary_latin.dic"

# mise en memoire vive du dico
try:
 try:
  dico = file(adresse,'r')
  print "chargement du dictionnaire..."
  x = dico.readlines()
  dico.close() # fin de l'utilisation du fichier
 except:
  adresse += ".txt"
  dico = file(adresse,'r')
  print "ouverture du fichier nomme :", adresse
  x = dico.readlines()
  dico.close() # fin de l'utilisation du fichier
except:
 print "impossible d'ouvrir le fichier indique, le dico small sera ouvert"
 print "chargement du dictionnaire..."
 dico = file("top10000fr.txt",'r')
 x = dico.readlines()
 dico.close() # fin de l'utilisation du fichier

# conversion en liste de mots sans \n
dico = []
for mot in x:
 dico.append(mot[0:len(mot)-1])

possible = False
ok = []
last = ""

# l'utilisateur entre les lettres melees
print "\nentrez la suite de lettres : ",
lettresmeles = raw_input()
lettresmeles.lower() # lettres en minuscule
import random

# generation aleatoire rand()
if lettresmeles == "rand()":
 alphabet = "abcdefghijklmnopqrstuvwxyz"
 lettresmeles = ""
 print "entrez la taille du mot a generer :",
 taille = raw_input()
 try:
  taille = int(taille)
 except:
  taille = 9
 for un in range(taille):
  lettre = random.randrange(26)
  lettresmeles += alphabet[lettre]

print "voici le mot genere aleatoirement :", lettresmeles

# recherche des mots possibles
print "recherche en cours..."
for mot in dico:

 if possible == True:
  ok.append(last)

 last = mot
 for lettre in mot:
  if mot.count(lettre) > lettresmeles.count(lettre):
   possible = False
   break
  else:
   possible = True

if possible == True:
 ok.append(last)

compteur = -1
final = []

if len(ok) != 0:
 final.append(ok[-1])

if len(final) > 1:
 final.append(ok[-1])

if len(ok) > 1:
 try:
  while len(ok[compteur-1]) == len(ok[compteur]):
   final.append(ok[compteur-1])
   compteur -= 1
 except:
  print "impossible de trouver les plus grandes valeurs"

try:
 pourcent = str(int((float(len(final[0]))/float(len(lettresmeles)))*100))
 pourcent +=  "%"
except:
 pourcent = "0%"

if len(final) > 1:
 print "\nvoici les plus grands mots trouves : ", final, " (", len(final[0]), " lettres,", pourcent, ")"

elif len(final) > 0:
 print "\nvoici le plus grand mot trouve : ", final[0], " (", len(final[0]), "/", len(lettresmeles), " lettres,", pourcent, ")"
elif len(final) == 0:
 print "\naucun mot trouve"

if len(final) < len(ok):
 print "\nvoulez vous afficher la liste des", len(ok), "mots trouves ?",
 if raw_input() == "oui":
  print "\nliste complete des mots trouves : \n"
  for mot in ok:
   print mot

Conclusion :


je n'ai malheureusement pu mettre que le dico small et medium dans le zip.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Votre évaluation

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.