Anagramme

Moderator: Mod

Anagramme

Postby JREM » Mon Dec 14, 2009 6:59 pm

Salut je suis actuellement entrain de me pencher sur le challenge "Parcours dictionnaire",

je suis débutant en python et en programmation en général.

J'ai trouvé une bonne base:

[code:1:2a6644ce38]wordlist=open("C:\Users\Jerem\Desktop\wordlist.txt","r")
anagram = raw_input("Enter anagram: ")
anagram=anagram.replace("\n", "")

anlen = len(anagram)
nochar = 0
found = False
i=0
solution=[]


for line in wordlist:
curtry= line
curtry = curtry.replace("\n", "")
#print curtry
for i in range(anlen):
if anagram.count(anagram[i]) == curtry.count(anagram[i]):
#print anagram[i]
nochar+=1

if nochar==anlen:
if len(curtry)==anlen:
#print curtry
#print len(curtry)
solution.append(curtry)



nochar=0

print solution
[/code:1:2a6644ce38]

je souhaite modifier ce code afin qu'il se connecte sur la page du challenge et trouve les 10 mot, ensuite il trouve les mot correspondant dans la wordlist.txt et qui renvoi la réponse dans un fichier txt sous la forme word1, word2, ect..

Actuellement je cherche avec le module urllib2 afin de se connecter à la page.
JREM
Projets
 
Posts: 60
Joined: Sun Aug 03, 2008 8:58 pm

Postby TorTukiTu » Mon Dec 14, 2009 11:02 pm

C'est bien JEREM,

Lis donc la doc de ce module, trouve toi quelques exemples. Et n'oublies pas de gérer les cookies :) .

La tortue.
User avatar
TorTukiTu
Site Admin
 
Posts: 1960
Joined: Thu Feb 07, 2008 10:24 pm
Location: Devant son pc durant la redaction de ce message

Postby JREM » Mon Dec 14, 2009 11:53 pm

merci,
je me suis pas encore pencher sur le code mais je dois utiliser mon cookie pour m'identifier sur le challenge.

sinon pour recup les mot de la page, le module html parser est nécessaire ?
JREM
Projets
 
Posts: 60
Joined: Sun Aug 03, 2008 8:58 pm

Postby TorTukiTu » Tue Dec 15, 2009 12:08 pm

Si c'est au format txt, ton parseur ne te servira à rien. Regarde la source et voit si c'est du xml.

La tortue.
User avatar
TorTukiTu
Site Admin
 
Posts: 1960
Joined: Thu Feb 07, 2008 10:24 pm
Location: Devant son pc durant la redaction de ce message

Postby THE-DEATH » Tue Dec 15, 2009 3:54 pm

L'utilisation de librairies n'est pas nécessaires au fond, lorsque l'on regarde elles ne servent que pour aider a la programmation donc la question n'a pas de sens. Sinon si tu utilises urllib tu peux toujours utiliser une regexp
User avatar
THE-DEATH
 
Posts: 971
Joined: Wed Jul 23, 2008 10:49 am
Location: 127.0.0.1

Postby JREM » Tue Dec 15, 2009 9:00 pm

merci pour vos aides,

voila mon code pour se connecter à la page du challenge, il fonctionne:

[code:1:77c0021510]import urllib2
requete = urllib2.Request('http://hackbbs.org/miss/15/gene.php/')
requete.add_header('Cookie', 'PHPSESSID=mon PHPSESSID')
resultat = urllib2.urlopen(requete)
the_page = resultat.read()
print the_page
[/code:1:77c0021510]

j'ai mis un print pour vérifier que je récupère bien la source html du challenge.

maintenant ma question est comment récupérer les mots entre les balises sans les balises exemples:

[code:1:77c0021510]<td><li>lilnnco</li></td> </tr><td><li>ioranlce</li></td> </tr><td><li>emecerdb</li></td> </tr><td><li>achciog</li></td> </tr><td><li>ngries</li></td> </tr><td><li>ttoaot</li></td> </tr><td><li>lthuibsl</li></td> </tr><td><li>ndalisy</li></td> </tr><td><li>eublrt</li></td> </tr><td><li>eyfrdd</li></td>[/code:1:77c0021510]
JREM
Projets
 
Posts: 60
Joined: Sun Aug 03, 2008 8:58 pm

Postby TorTukiTu » Tue Dec 15, 2009 10:11 pm

Et String.split() ?
User avatar
TorTukiTu
Site Admin
 
Posts: 1960
Joined: Thu Feb 07, 2008 10:24 pm
Location: Devant son pc durant la redaction de ce message

Postby JREM » Tue Dec 15, 2009 11:48 pm

j'ai du mal... en faite je voudrais extraire tout les mots dont les balises commence par <td><li> et finissent par </li></td>

ensuite on à les 10 mots séparer avec un espace.
JREM
Projets
 
Posts: 60
Joined: Sun Aug 03, 2008 8:58 pm

Postby THE-DEATH » Wed Dec 16, 2009 12:42 am

Je l'ai dis plus haut... les regexp.
Ici on aurait quelque chose comme :

[code:1:36d19ac236]
import re

txt='<td><li>lilnnco</li></td> </tr><td><li>ioranlce</li></td> </tr><td><li>emecerdb</li></td> </tr><td><li>achciog</li></td> </tr><td><li>ngries</li></td> </tr><td><li>ttoaot</li></td> </tr><td><li>lthuibsl</li></td> </tr><td><li>ndalisy</li></td> </tr><td><li>eublrt</li></td> </tr><td><li>eyfrdd</li></td>'

regexp='<td><li>((?:[a-z][a-z]+))<\\/li><\\/td>'
print(re.findall(regexp, txt))
[/code:1:36d19ac236]
User avatar
THE-DEATH
 
Posts: 971
Joined: Wed Jul 23, 2008 10:49 am
Location: 127.0.0.1

Postby JREM » Wed Dec 16, 2009 6:49 pm

me revoila;

pour le moment ma source ressemble à sa:

[code:1:26302fd4ed]import urllib2, re, string
requete = urllib2.Request('http://hackbbs.org/miss/15/gene.php/')
requete.add_header('Cookie', 'PHPSESSID=XXXXXXXXXXXXXXXXXXXXXXXXX]')
resultat = urllib2.urlopen(requete)
the_page = resultat.read()

regexp='<td><li>((?:[a-z][a-z]+))<\\/li><\\/td>'
word = (re.findall(regexp, the_page))
print word
[/code:1:26302fd4ed]

sa me renvois les mots sous cette forme[code:1:26302fd4ed]['bfedgca', 'floreg', 'vatelr', 'unerdth', 'eloggo', 'elabrts', 'istbhllu', 'ugusat'][/code:1:26302fd4ed]

je pense que sa serait plus simple sans les [ , ' pour les décrypter.

Je voulais utiliser la fonction String.split() pour le faire mais j'ai du mal à la faire fonctionner.
Last edited by JREM on Wed Dec 16, 2009 8:01 pm, edited 2 times in total.
JREM
Projets
 
Posts: 60
Joined: Sun Aug 03, 2008 8:58 pm

Postby THE-DEATH » Wed Dec 16, 2009 7:40 pm

tu veux utiliser split pour la transformer en liste, tu n'as pas remarqué que c'en était déjà une ? ... faut t'informer un peu plus mon grand.
[code:1:035e0f4ce1]
words = re.findall( regexp, the_page )
for word in words:
print( word )
[/code:1:035e0f4ce1]
User avatar
THE-DEATH
 
Posts: 971
Joined: Wed Jul 23, 2008 10:49 am
Location: 127.0.0.1

Postby JREM » Wed Dec 16, 2009 7:57 pm

merci de m'avoir répondu je vais chercher.
Last edited by JREM on Thu Dec 31, 2009 3:46 pm, edited 1 time in total.
JREM
Projets
 
Posts: 60
Joined: Sun Aug 03, 2008 8:58 pm

Postby JREM » Wed Dec 16, 2009 11:17 pm

Bon maintenant je résume:

Connexion à la page challenge: ok
Récupération de la source et des mots: ok
Enlever les balise ect..: ok

Ce qui me reste à faire:
Trouver les anagrammes:
Et renvoyer le resulat sous la form word1, word2,

Donc maintenant ma base c'est:

[code:1:68a178aafc]import urllib2, re, string
requete = urllib2.Request('http://hackbbs.org/miss/15/gene.php/')
requete.add_header('Cookie', 'PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxx')
resultat = urllib2.urlopen(requete)
the_page = resultat.read()
regexp='<td><li>((?:[a-z][a-z]+))<\\/li><\\/td>'
word = (re.findall(regexp, the_page))
for word in word:
print(word)[/code:1:68a178aafc]

Etant donnés que j'ai très peu de connaissance en python j'ai chercher une source pour résoudre les anagrammes.

Elle fonctionne très bien mais pour un seul mot.

[code:1:68a178aafc]wordlist=open("C:\Users\Jerem\Desktop\wordlist.txt","r")
anagram = raw_input("Enter anagram: ")
anagram=anagram.replace("\n", "")

anlen = len(anagram)
nochar = 0
found = False
i=0
solution=[]


for line in wordlist:
curtry= line
curtry = curtry.replace("\n", "")
#print curtry
for i in range(anlen):
if anagram.count(anagram[i]) == curtry.count(anagram[i]):
#print anagram[i]
nochar+=1

if nochar==anlen:
if len(curtry)==anlen:
#print curtry
#print len(curtry)
solution.append(curtry)



nochar=0[/code:1:68a178aafc]

Quand je modifie de cette façon:
[code:1:68a178aafc]import urllib2, re, string
requete = urllib2.Request('http://hackbbs.org/miss/15/gene.php/')
requete.add_header('Cookie', 'PHPSESSID=xxxxxxxxxxxxxxxxxxxx')
resultat = urllib2.urlopen(requete)
the_page = resultat.read()
regexp='<td><li>((?:[a-z][a-z]+))<\\/li><\\/td>'
word = (re.findall(regexp, the_page))
for word in word:
wordlist=open("C:\Users\Jerem\Desktop\wordlist.txt","r")
anagram = word
anagram=anagram.replace("\n", "")

anlen = len(anagram)
nochar = 0
found = False
i=0
solution=[]


for line in wordlist:
curtry= line
curtry = curtry.replace("\n", "")
#print curtry
for i in range(anlen):
if anagram.count(anagram[i]) == curtry.count(anagram[i]):
#print anagram[i]
nochar+=1

if nochar==anlen:
if len(curtry)==anlen:
#print curtry
#print len(curtry)
solution.append(curtry)



nochar=0

print solution[/code:1:68a178aafc]

Je reçois la réponse que du dernier mot.
JREM
Projets
 
Posts: 60
Joined: Sun Aug 03, 2008 8:58 pm

Postby TorTukiTu » Thu Dec 17, 2009 10:03 am

JREM, on ne te prendra pas par la main.

Tu en as assez demandé. Cherche un peu deux ou trois jours et si tu n'y arrives toujours pas, là tu pourras reposter et on te répondra.

La tortue.
User avatar
TorTukiTu
Site Admin
 
Posts: 1960
Joined: Thu Feb 07, 2008 10:24 pm
Location: Devant son pc durant la redaction de ce message


Return to Python

Who is online

Users browsing this forum: No registered users and 1 guest

cron