IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

definie une booléenne en python


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Par défaut definie une booléenne en python
    Bonjour.

    J'ai un petit problème qui me tracasse depuis un grand moment mais je n'arrive pas à trouver une solution donc je me suis tourne vers vous pour trouver une piste, et je suis sûr que j'aurai une solution grâce à votre contribution.

    Alors, je m'explique brièvement ce que je veux faire et le problème qui m’empêche de progresser.
    En effet, je veux définir une fonction en python qui permettra de vérifier dans une base si un élève est libre ou pas par rapport à son emploi du temps.
    Dans ma base les tables nécessaires pour cette fonction: table categorie(definie si eleve ou etudiant), etablissement, classe, et emplois_du_temps.

    donc j'ai définie une fonction booléenne dans laquelle à partir de l'identifiant de l'utilisateur qui nous renvoie une valeur 1 ou 0.

    je precise le langage c'est python.
    voici la fonction que j'ai defini:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    def eleveAutorise(login):
        conn = connexionBD()     
        cursor = conn.cursor()
        cursor.execute("SELECT categorie_id FROM compte c,categorie ca where c.categorie_id=ca.id  and libelle_cat=%s and login=%s", ('eleve',login))
        row = cursor.fetchone ()  
        if (row == None): 
            return 1 
        else:
            cursor.execute("SELECT c.idEta FROM compte c ,etablissement e where c.idEta=e.idEta and e.nomEta=%s and login=%s",  ('Lnlm', login))
            row1 = cursor.fetchone ()  
    	if (row1 != None):
    		cursor.execute("SELECT c.idclass FROM compte c,classe cl where c.idclass=cl.idClass and c.idEta=%s and login=%s",  (row1[0], login))
    		row2 = cursor.fetchone ()  
    		jours = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"]
    		j= jours[time.localtime()[6]]
    		cursor.execute("SELECT * FROM emploi_du_temps  where idClass=%s and jour=%s",(row2[0],j))
    		row3 = cursor.fetchone ()  
    		conn.close()
    		from datetime import datetime
    		#datetime(2000, 1, 1)
    		maintenant = datetime.now() 
    		if((maintenant.hour >7 and  maintenant.minute<=30) and (maintenant.hour<8 and  maintenant.minute<=20)):
    			if(row3[2]=="L"):
    				return 1 
    			else:
    				return 0
    		else:
    			if((maintenant.hour >8 and  maintenant.minute<=20) and (maintenant.hour<9 and  maintenant.minute<=20)):
    				if(row3[3]=="L"):
    					return 1  
    				else:
    					return 0
    			else:
    				if((maintenant.hour >9 and  maintenant.minute<=20) and (maintenant.hour<10 and  maintenant.minute<=10)):
    					if(row3[4]=="L"):
    						return 1  
    					else:
    						return 0
    				else:
    					if((maintenant.hour >10 and  maintenant.minute<=10) and (maintenant.hour<11 and  maintenant.minute<=5)):
    						if(row3[5]=="L"):
    							return 1  
    						else:
    							return 0
    					else:
    						if((maintenant.hour >11 and  maintenant.minute<=05) and (maintenant.hour<11 and  maintenant.minute<=30)):
    							if(row3[6]=="L"):
    								return 1  
    							else:
    								return 0 
    						else:
    							if((maintenant.hour >11 and  maintenant.minute<=30) and (maintenant.hour<12 and  maintenant.minute<=20)):
    								if(row3[7]=="L"):
    									return 1  
    								else:
    									return 0
    							else:
    								if((maintenant.hour >12 and  maintenant.minute<=20) and (maintenant.hour<13 and  maintenant.minute<=15)):
    									if(row3[8]=="L"):
    										return 1  
    									else:
    										return 0
    								else:
    									if((maintenant.hour >13 and  maintenant.minute<=15) and (maintenant.hour<15 and  maintenant.minute<=00)):
    										if(row3[9]=="L"):
    											return 1  
    										else:
    											return 0
    									else:
    										if((maintenant.hour >15 and  maintenant.minute<=00) and (maintenant.hour<16 and  maintenant.minute<=00)):
    											if(row3[10]=="L"):
    												return 1  
    											else:
    												return 0
    										else:
    											if((maintenant.hour >16 and  maintenant.minute<=00) and (maintenant.hour<17 and  maintenant.minute<=00)):
    												if(row3[11]=="L"):
    													return 1  
    												else:
    													return 0			
     
     
     
     
        	else:
    		return 1


    Probleme:
    il n'affiche aucun problème de syntaxe mais me renvoie toujours la valeur "0"
    donc je demande à tout celui qui a une piste de m'orienter pour ce problème.
    je suis débutant en python aussi.

    Merci d'avance.

  2. #2
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Bonjour koreimy,

    On va tâcher de t'aider à avancer. En lisant ton post, une question me vient à l'esprit: sais tu où tu passes précisément?

    C'est le premier point. Tu peux éventuellement rajouter des "print" pour tracer ta route dans le code. Profite en pour "printer" maintenant, et row3.

    A la première lecture, je n'ai rien vu de choquant. Je pencherai donc plutôt pour un problème de données en BDD ou de requête.

    Effectue les test indiqué et revient avec les résultat, cela nous aidera à avancer sur ce probleme.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Par défaut
    Merci d'avoir répondu si rapidement.
    effectivement j'ai teste bien 'maintenant ' et 'row3 ' me renvoient bien les bons résultats.


    cordialement.

  4. #4
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Vis-a-vis des données récupérées via les print, est-il cohérent que tu récupères la valeur 0 en retour?

    Dans ton code, en relisant je tique un peu sur tes prédicats:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (maintenant.hour >7 and  maintenant.minute<=30) and (maintenant.hour<8 and  maintenant.minute<=20)
    20<=minutes<=30, je comprend, mais 7<hour<8, je voit mal, sachant que les heures sont des entiers. Tu peut le vérifier avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print maintenant.hour, type(maintenant.hour)
    Les prédicats ne sont jamais vérifiés, et tu passes donc systématiquement dans les else qui te renvoie alors 0. Que souhaites tu tester précisément dans ces prédicats?

    Sinon concernant le reste ton code, je te suggère de le simplifie et de l'optimiser:
    >Le from...import... est à mettre en entete de fichier, pas dans le code (PEP)
    >Utilise plutot True et False pour des booleens en Python (PEP)
    >Utilise une variable booléenne au début de ta fonction que tu définit intialement à False. Tu la redefinit dans les if à True quand les predicats sont vérifiés. A la fin de ton code tu n'effectues qu'un seul return
    >ton dernier else a l'air mal indenté


    Une version corrigée (à tester) serait donc par exemple (prédicats non corrigés):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    def eleveAutorise(login):
    	"""
                    Fonction permettant de savoir si un eleve/etudiant est dispo
            """
    	retour = False
     
    	conn = connexionBD()	 
    	cursor = conn.cursor()
    	cursor.execute("SELECT categorie_id FROM compte c,categorie ca where c.categorie_id=ca.id  and libelle_cat=%s and login=%s", ('eleve',login))
    	row = cursor.fetchone () 
     
    	if (row == None): 
    		retour = True
    	else:
    		cursor.execute("SELECT c.idEta FROM compte c ,etablissement e where c.idEta=e.idEta and e.nomEta=%s and login=%s",  ('Lnlm', login))
    		row1 = cursor.fetchone ()  
     
    	if (row1 != None):
    		cursor.execute("SELECT c.idclass FROM compte c,classe cl where c.idclass=cl.idClass and c.idEta=%s and login=%s",  (row1[0], login))
    		row2 = cursor.fetchone ()  
    		jours = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"]
    		j= jours[time.localtime()[6]]
    		cursor.execute("SELECT * FROM emploi_du_temps  where idClass=%s and jour=%s",(row2[0],j))
    		row3 = cursor.fetchone ()  
    		conn.close()
    		from datetime import datetime
    		#datetime(2000, 1, 1)
     
    		maintenant = datetime.now() 
    		if((maintenant.hour >7 and  maintenant.minute<=30) and (maintenant.hour<8 and  maintenant.minute<=20)):
    			if(row3[2]=="L"):
    				retour = True
    		else:
    			if((maintenant.hour >8 and  maintenant.minute<=20) and (maintenant.hour<9 and  maintenant.minute<=20)):
    				if(row3[3]=="L"):
    					retour = True
    			else:
    				if((maintenant.hour >9 and  maintenant.minute<=20) and (maintenant.hour<10 and  maintenant.minute<=10)):
    					if(row3[4]=="L"):
    						retour = True  
    				else:
    					if((maintenant.hour >10 and  maintenant.minute<=10) and (maintenant.hour<11 and  maintenant.minute<=5)):
    						if(row3[5]=="L"):
    							retour = True
    					else:
    						if((maintenant.hour >11 and  maintenant.minute<=05) and (maintenant.hour<11 and  maintenant.minute<=30)):
    							if(row3[6]=="L"):
    								retour = True
    						else:
    							if((maintenant.hour >11 and  maintenant.minute<=30) and (maintenant.hour<12 and  maintenant.minute<=20)):
    								if(row3[7]=="L"):
    									retour = True 
    							else:
    								if((maintenant.hour >12 and  maintenant.minute<=20) and (maintenant.hour<13 and  maintenant.minute<=15)):
    									if(row3[8]=="L"):
    										retour = True
    								else:
    									if((maintenant.hour >13 and  maintenant.minute<=15) and (maintenant.hour<15 and  maintenant.minute<=00)):
    										if(row3[9]=="L"):
    											retour = True
    									else:
    										if((maintenant.hour >15 and  maintenant.minute<=00) and (maintenant.hour<16 and  maintenant.minute<=00)):
    											if(row3[10]=="L"):
    												retour = True
    										else:
    											if((maintenant.hour >16 and  maintenant.minute<=00) and (maintenant.hour<17 and  maintenant.minute<=00)):
    												if(row3[11]=="L"):
    													retour = True
     
    	else:
    		retour = True
     
    	return retour

  5. #5
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Essaie peut etre quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((maintenant.hour =7 and  maintenant.minute>=30) or (maintenant.hour=8 and  maintenant.minute<=20))
    EDIT:

    Une version corrigée non testée pour t'aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    def eleveAutorise(login):
    	"""
                    Fonction permettant de savoir si un eleve/etudiant est dispo
            """
    	retour = False
    	horaires = [(7,30),(8,20),(9,20),(10,10),(11,5),(11,30),(12,20),(13,15),(15,0),(16,0),(17,0)]
     
    	conn = connexionBD()	 
    	cursor = conn.cursor()
    	cursor.execute("SELECT categorie_id FROM compte c,categorie ca where c.categorie_id=ca.id  and libelle_cat=%s and login=%s", ('eleve',login))
    	row = cursor.fetchone () 
     
    	if (row == None): 
    		retour = True
    	else:
    		cursor.execute("SELECT c.idEta FROM compte c ,etablissement e where c.idEta=e.idEta and e.nomEta=%s and login=%s",  ('Lnlm', login))
    		row1 = cursor.fetchone ()  
     
    	if (row1 != None):
    		cursor.execute("SELECT c.idclass FROM compte c,classe cl where c.idclass=cl.idClass and c.idEta=%s and login=%s",  (row1[0], login))
    		row2 = cursor.fetchone ()  
    		jours = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"]
    		j= jours[time.localtime()[6]]
    		cursor.execute("SELECT * FROM emploi_du_temps  where idClass=%s and jour=%s",(row2[0],j))
    		row3 = cursor.fetchone ()  
    		conn.close()
    		from datetime import datetime
    		#datetime(2000, 1, 1)
     
    		maintenant = datetime.now() 
    		for i in range(len(horaires)):
    			if ((maintenant.hour = horaires[i][0] and maintenant.minute >= horaires[i][1]) or \
    				(maintenant.hour = horaires[i+1][0] and maintenant.minute <= horaires[i+1][1])):
    					if(row3[i+2]=="L"):
    						retour = True
    	else:
    		retour = True
     
    	return retour

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations forums :
    Inscription : Juillet 2013
    Messages : 114
    Par défaut
    merci c'est tres gentil je vais essayer...

Discussions similaires

  1. commande taille libe d'une partition en python
    Par mnes14 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/08/2008, 11h20
  2. Réponses: 1
    Dernier message: 26/10/2007, 21h53
  3. Que choisir pour une application de "gestion d'une todo liste" ? Python ou Java ?
    Par Yoshidu62 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 10/08/2007, 09h03
  4. Supprimer les doubles d'une liste en python
    Par Sebcaen dans le forum Général Python
    Réponses: 2
    Dernier message: 22/10/2006, 18h41
  5. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo