Programme pour les mots croisés

Soyez le premier à donner votre avis sur cette source.

Vue 13 933 fois - Téléchargée 1 092 fois

Description

voici un petit programme très simple qui ouvre un dico et demande à l'utilisateur un mot avec des espaces et cherche dans le dictionnaire si un mot peut remplir ces espaces.
par example : d f le donnera difficile.

le zip contient le dico medium et small et la source.
Je précise aussi que cette source est compilable par shedskin.

j'attends des conseils et des critiques !!

Source / Exemple :


# variables, a typage statique pour shedskin
dicostart = []
tailleok = []
ok = []
egal = False
text = "first time"
compteur = 0

print "programme de resolution de mots croises par dictionnaire par clem120%\na tout moment vous pouvez taper help pour obtenir de l'aide"
print "-------------------------------------------------------------------------------"

# 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)"

while True:
 print "\nentrez le nom du dico :",
 adresse = raw_input()

 # interpretation de la saisie
 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"
 if adresse == "help": # l'aide a tout moment
  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)"

 # ouverture du dico
 try:
  if adresse != "help":
   Liste=file(adresse,'r')
   print "ouverture du dico..."
   Ligne=Liste.readline()
   break
 except:
  print "impossible d'ouvrir le fichier indique"

# fichier -> liste de mots, ligne par ligne
while Ligne<>"":
 dicostart.append(Ligne)

 Ligne=Liste.readline()
Liste.close()

# nouvelle liste de mots sans \n et en minuscule
dico = []
for mot in dicostart:
 mot.lower()
 dico.append(mot[0:len(mot)-1])

# entree du mot a rechercher
while True:
 tailleok = []
 ok = []
 print "veuillez entrer le mot, mettez un espace ou vous ne savez pas :",
 text = raw_input()
 if text == "":
  break
 print "--------------------------------------------------------------------------------"

 # nouvelle liste avec les mots de bonne taille
 for mot in dico:
  if len(mot) == len(text):
   tailleok.append(mot)

 # test pour savoir si les deux mots peuvent etres ==
 print "tests sur les mots..."
 for mot in tailleok:
  compteur = 0
  for lettre in mot:
   if lettre == text[compteur] or text[compteur] == " ":
    egal = True
   else:
    egal = False
    break
   compteur += 1
  if egal == True:
   ok.append(mot)

 # affichage des mots trouves
 if len(ok)>0:
  print "\nvoici la liste des mots possibles :"
  print "-------------------------------------------------------------------------------"
  for mot in ok:
   print mot, " ",
  print "\n--------------------------------------------------------------------------------"
 else:
  print "aucun mot ne correspond"

Conclusion :


Voilà avec cela vous n'avez aucune excuse pour ne pas vous mettre aux mots croisés.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
saigneurdushi Messages postés 45 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 janvier 2011
9 sept. 2010 à 11:04
Merci pour les dictionnaires :-)
xeolin Messages postés 336 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 8 novembre 2011 2
10 janv. 2010 à 15:10
deux listes, de toute façon il il te faut mettre en mémoire ta suite de if...
Clempython Messages postés 9 Date d'inscription samedi 26 décembre 2009 Statut Membre Dernière intervention 29 mars 2011 17
10 janv. 2010 à 13:52
c'est peut être plus clair mais cela demande de mettre en mémoire 2 listes de plus, qu'est ce que tu en penses ?

J'indente avec des espaces, je trouve cela plus clair, mais après chacun ses goûts.
xeolin Messages postés 336 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 8 novembre 2011 2
10 janv. 2010 à 11:17
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"

peut être remplacé par :
L1 =["latin","big","medium","small"]
L2=["top10000fr.txt","dictionary_french.dic","wordlist.txt","dictionary_latin.dic"]
for a in L1:
if a==adresse : adresse=L2[L1[adresse]]

je trouve ça plus simple lorsque tu veux ensuite rajouter des références... Ici c'est limite, mais quand tu as beaucoup de choix ça devein très pratique.

sinon c'est simpatique, peut peux changer l'indentation (tabulations) parceque là je lis très dificilement le code...

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.