Solveur de captcha / resoudre les calculs mathematique (basique) ecris en lettre

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 356 fois - Téléchargée 18 fois

Contenu du snippet

####### Permet de résoudre les captcha de type calculs mathématique ##########

Fonctionnement:
- Entrée: question au format chaîne de caractère (ex:"Combien font quatre fois deux ?")
- Sortie: réponse au format numérique (ex:8)

Capacité:
- Accepte les phrases contenant soit des chiffre écris en numérique soit des chiffre écris en lettre jusqu'à dix soit les deux.
- Opérateurs de calcul et calcul gérés:
  • addition ['+' 'plus']
  • soustraction ['-' 'moins']
  • multiplication ['fois' '*' 'x' 'multiplier par']
  • division ['/' 'diviser par']


Contraintes:
- Pas d'operande en lettre ou en chiffre au dessus de 10
(ex: combien font douze diviser par 4) < pas possible !
(ex: combien font 12 diviser par deux) < pas possible !
(ex: combien font neuf fois dix) < possible !
- Pas plus de deux opérandes
(ex: combien font quatre fois trois diviser par deux) < pas possible !
(ex: combien font huit diviser par deux) < ok !
- Pas d'espace entre l'opérateur et les chiffres
(ex: combien font 4/2) < pas possible !
(ex: combien font 4 / 2) < ok !

#####################################
Ex
Combien font 3 fois 5
Combien font 6 diviser par 2
Combien font 6 / 3 ?
Quel est le resultat de 2 fois 8 ?
Quel est le resultat de 2 fois 8 ?
Combien font trois fois 5 ?
Combien font 10 diviser par 5 ?
Quel chiffre est egale à huit diviser par deux
Combien font 7 moins 2
huit moins 3 egale

################################################

Source / Exemple :


#!/usr/bin/env python
# -*- coding: utf8 -*-
class fr_num_capcha_resolve(object):
	
	def chif2num(self,string):
		convert=[['un',1],['deux',2],['trois',3],['quatre',4],['cinq',5],['six',6],['sept',7],['huit',8],['neuf',9],['zero','0'],['dix','10']]
		for each in convert:
			if each[0].replace('é','e')==string.lower().replace('é','e') or str(each[1])==string:
				return int(each[1])		
		return ''
	
	def answer_to(self,question):		
		op=0
		qs=question.split(' ')	
		
		for each in range(0,len(qs)):
			if qs[each]=="plus" or qs[each]=='+':
				self.operation_type= "addition"
				var1=self.chif2num(qs[each-1])
				var2=self.chif2num(qs[each+1])
				op=1
			if qs[each]=="moins" or qs[each]=='-':
				self.operation_type= "soustraction"
				var1=self.chif2num(qs[each-1])
				var2=self.chif2num(qs[each+1])
				op=-1
			if qs[each]=="multiplier" or qs[each]=="fois" or qs[each]=='x' or qs[each]=='*':
				self.operation_type= "multiplication"
				var1=self.chif2num(qs[each-1])
				if qs[each]=="multiplier" and qs[each+1].lower()=="par":
					var2=self.chif2num(qs[each+2])
				else:
					var2=self.chif2num(qs[each+1])
				op=2
			if qs[each]=="diviser" or qs[each]=='/':
				self.operation_type= "division"
				var1=self.chif2num(qs[each-1])
				if qs[each+1].lower()=="par":
					var2=self.chif2num(qs[each+2])
				else:
					var2=self.chif2num(qs[each+1])
				op=-2

		if op!=0:
			if op==-1 or op==1:
				return var1+(op*var2)
			if op==2:
				return var1*var2
			if op==-2:
				return var1/var2

	def __init__(self,question):
		#print(question)
		self.answer=self.answer_to(question)

print fr_num_capcha_resolve("Combien font huit diviser par 2").answer

###########QUELQUE EXEMPLE FONCTIONNEL##########

#Combien font 3 fois 5
#Combien font 6 diviser par 2
#Combien font 6 / 3 ?
#Quel est le resultat de 2 fois 8 ?
#Quel est le resultat de 2 fois 8 ?
#Combien font trois fois 5 ?
#Combien font 10 diviser par 5 ?
#Quel chiffre est egale à huit diviser par deux 
#Combien font 7 moins 2'
#huit moins 3 egale'

################################################

Conclusion :


Certes Peu utile..

Mais ce code s'avère efficace pour démontrer la quasi nul utilité des captchas à base de calculs mathématique enfantins.

un lien externe pour des infos complémentaires.
http://www.xmco.fr/article-captcha.html

Bonne journée

A voir également

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.