Best Python code snippet using SeleniumBase
plateau_analysable.py
Source:plateau_analysable.py
1from plateau import Plateau2from config import log3import config as cfg4import outils5import couleurs6import copy7class PlateauAnalysable(Plateau):8 def __init__(self,*args,**kwargs):9 """Creer un plateau analysable."""10 self.vitesse_demonstration=0.1 #Possibilité de changer la vitesse de démonstration11 self.pions_definitivement_stables=None12 self.pions_stables=None13 super().__init__(*args,**kwargs)14 def chargerAnalyse(self,fenetre):15 """Charge l'ensemble des ses attributs d'analyse pour les ias qui s'en servent."""16 pions0_definitivement_stables=self.obtenirTousLesPionsDefinitivementStables(0,fenetre)17 pions1_definitivement_stables=self.obtenirTousLesPionsDefinitivementStables(1,fenetre)18 self.pions_definitivement_stables=[pions0_definitivement_stables,pions1_definitivement_stables]19 pions0_prenables=self.obtenirTousLesPionsPrenables(0,fenetre)20 pions1_prenables=self.obtenirTousLesPionsPrenables(1,fenetre)21 self.pions_prenables=[pions0_prenables,pions1_prenables]22 pions0_stables=self.obtenirTousLesPionsStables(0,fenetre)23 pions1_stables=self.obtenirTousLesPionsStables(1,fenetre)24 self.pions_stables=[pions0_stables,pions1_stables]25 #Un petit peu de présentation pour faire joli26 for i in range(2):27 self.presenter(self.pions_stables[i],self.pieces_couleur[i],fenetre,"stables")28 self.presenter(self.pions_prenables[i],self.pieces_couleur[i],fenetre,"prenables")29 self.presenter(self.pions_definitivement_stables[i],self.pieces_couleur[i],fenetre,"definitivement_stables",clear=False,pause=False)30 fenetre.attendre(0.5)31 def obtenirToutesLesLignes(self):32 """Renvoie la liste de toutes les lignes possibles de la grille."""33 lignes=[]34 tx,ty=self.taille35 m=max(self.taille)36 for y in range(ty):37 for x in range(tx):38 for direction in self.obtenirDirections():39 for n in range(m):40 position=(x,y)41 ligne=self.obtenirLigneInclus(position,direction,n)42 lignes.append(tuple(ligne))43 lignes=list(set(lignes))44 vrai_lignes=[list(ligne) for ligne in lignes]45 return vrai_lignes46 def obtenirToutesLesLignesSansDirection(self):47 """Renvoie toutes les lignes possibles de la grille mais sans prendre en compte l'ordre des positions de celles-ci."""48 lignes=self.obtenirToutesLesLignes()49 lignes_triees=[]50 for ligne in lignes:51 ligne.sort()52 lignes_triees.append(tuple(ligne))53 lignes_triees=list(set(lignes_triees))54 lignes=[]55 for ligne_triee in lignes_triees:56 lignes.append(list(ligne_triee))57 return lignes58 def presenterPionsStables(self,fenetre): #Obselète59 """Presente les pions stables a l'ecran en les trouvant, cela s'effectue avec la fenetre."""60 fenetre.clear()61 self.afficher(fenetre)62 tous_les_pions=[]63 for i in range(2):64 pions=self.obtenirTousLesPionsDefinitivementStables(i,fenetre)65 tous_les_pions.append(pions)66 self.presenter(pions,self.pieces_couleur[i],fenetre,message="pions stables",pause=False)67 if pions:68 fenetre.attendre(self.vitesse_demonstration)69 log("pions definitivement stables:",tous_les_pions)70 fenetre.clear()71 plateau.afficher(fenetre)72 for i in range(2):73 plateau.presenter(tous_les_pions[i],self.pieces_couleur[i],fenetre,message="pions stables",pause=False,clear=False)74 if tous_les_pions.count([])!=2:75 fenetre.attendre() #Par défaut la fenetre attend 1 seconde76 def obtenirTousLesPionsDefinitivementStables(self,cote,fenetre):77 """Renvoie la liste de tous les pions qui sont definitivement stables."""78 stables=[]79 pions=self.obtenirPions(cote)80 #plateau.presenter(pions,couleurs.ROUGE,fenetre,"pions"+str(cote))81 for pion in pions:82 if self.estUnPionDefinitivementStable(pion,fenetre):83 stables.append(pion)84 return stables85 def estUnPionDefinitivementStable(self,pion,fenetre):86 """Determine si un pion est définivement stable en déterminant pour chaque ligne auquel il appartient, si il peut être définitivement stable.87 Pour cela, on se ramène à un problème plus simple: c'est à dire vérifier la stabilité d'un pion dans une ligne.88 Ainsi on vérifie pour chaque ligne auquelle ce pion appartient, si celui-ci peut-être définitivment stable, et si c'est bien le cas,89 alors ce pion est définitivment stable sans équivoque."""90 cote=self.obtenirCase(pion)91 lignes=self.obtenirLignesAlentours(pion) #lignes de positions92 cote_oppose=self.obtenirCoteOppose(cote)93 stable=True94 for (i,ligne) in enumerate(lignes):95 ci=(i+4)%896 ligne_oppose=lignes[ci] #Permet de récupérer la ligne qui est située a l'opposée de la i-ème ligne.97 cases=self.obtenirCases(ligne) #lignes de contenus de cases98 cases_opposees=self.obtenirCases(ligne_oppose)99 if cote_oppose in cases:100 if cfg.CASE_VIDE in cases_opposees:101 stable=False102 if cfg.CASE_VIDE in cases:103 if (cote_oppose in cases_opposees) or (cfg.CASE_VIDE in cases_opposees):104 stable=False105 """Présentation des lignes sur l'écran pour le mode démonstration."""106 self.presenter(ligne,couleurs.BLEU,fenetre,message="ligne",pause=False)107 self.presenter(ligne_oppose,couleurs.VIOLET,fenetre,message="ligne_oppose",clear=False,pause=False)108 self.presenter(pion,couleurs.ROUGE,fenetre,"pion considéré",clear=False,pause=False)109 fenetre.attendre(self.vitesse_demonstration)110 if not stable:111 break112 return stable113 def obtenirTousLesPionsStables(self,cote,fenetre):114 """Renvoie la liste de tous les pions stables sur le plateau appartenant au joueur du côté 'cote'."""115 pions=self.obtenirPions(cote)116 pions_stables=[]117 for pion in pions:118 if self.estUnPionStable(pion,fenetre):119 pions_stables.append(pion)120 return pions121 def estUnPionStable(self,pion,fenetre,niveau=1): #Cette fonction est toujours pas fonctionnelle122 """Détermine si un pion est stable."""123 cote=self.obtenirCase(pion) #Obtient le cote du joueur ayant pose le pion124 cote_oppose=self.obtenirCoteOppose(cote) #Recupere le cote oppose avec le cote du joueur125 mouvements=self.obtenirMouvementsValides(cote_oppose) #recupere tous les mouvements enemis126 #Determine si un pion est imprenable127 if not self.estUnPionPrenable(pion): #Si c'est le cas, il est stable128 stable=True #On sauve le fait que le pion soit stable129 else: #Sinon lorsqu'il est prenable, il est stable uniquement si celui-ci devient instable apres etre pris130 stable=True #On suppose au départ le pion stable, et on cherche un mouvement qui perment de discréditer cette supposition131 for mouvement in mouvements: #Fait une itération de chaque mouvement un par un132 nouveau_plateau=copy.deepcopy(self) #On copie le plateau pour simuler chaque mouvement enemi133 nouveau_plateau.placerPion(mouvement,cote_oppose) #On joue le mouvement enemi itéré dans le nouveau plateau134 nouveau_cote=nouveau_plateau.obtenirCase(pion) #On récupère la couleur du pion après le mouvement enemi135 if nouveau_cote!=cote: #Détermine si ce pion est pris i.e. la couleur de ce pion dans le nouveau plateau,est différente de celle d'avant136 nouveau_plateau.afficher(fenetre) #Réaffiche pour le debug137 nouveau_plateau.presenter(pion,couleurs.ORANGE,fenetre,"niveau:"+str(niveau),couleur_texte=couleurs.ORANGE) #Affiche le pion que l'on considère et le niveau de récusion138 if nouveau_plateau.estUnPionStable(pion,fenetre,niveau+1): #Détermine si ce pion devient stable après être pris139 stable=False #Si c'est le cas alors forcément il n'est pas devenu instable donc le pion ne pouvait pas être stable à la base140 break #Donc comme ce pion ne peut pas être stable, il n'y a pas de raison de vérifier s'il peut l'être pour d'autre mouvements141 return stable #On renvoie le booléen correspondant à la stabilité du pion142 def obtenirTousLesPionsPrenables(self,cote,fenetre):143 """Renvoie la liste de tous les pions d'un côté 'cote' qui sont prenables au tour suivant."""144 pions=self.obtenirPions(cote)145 prenables=[]146 for pion in pions:147 if self.estUnPionPrenable(pion):148 prenables.append(pion)149 return prenables150 def estUnPionPrenable(self,pion):151 """Determine si un pion est prenable a l'instant en utilisant le pion."""152 cote=self.obtenirCase(pion)153 cote_oppose=self.obtenirCoteOppose(cote)154 mouvements=self.obtenirMouvementsValides(cote_oppose)155 prenable=False156 for mouvement in mouvements:157 nouveau_plateau=copy.deepcopy(self)158 nouveau_plateau.placerPion(mouvement,cote_oppose)159 nouveau_cote=nouveau_plateau.obtenirCase(pion)160 if nouveau_cote!=cote:161 prenable=True162 break163 return prenable164 def estLigneDefinitivementStable(self,ligne):165 """Determine si une ligne est stable."""166 ligne=outils.obtenirLigneComplete(ligne)167 stable=True168 for pion in ligne:169 if not pion in self.pions_stables:170 stable=False171 break172 return stable173 def obtenirCarres(self,cote):174 """Renvoie l'ensemble des carrés de pions dans le plateau qui appartiennent au joueur du côté 'cote'."""175 pass #A compléter176 def obtenirTriangles(self,cote):177 """Renvoie la liste des triangles de pions dans le plateau qui appartiennent au joueur du côté 'cote'."""...
main.py
Source:main.py
1import time2from tkinter import *3from joueur import Joueur4from case import Etat5from fenetre import *6import random7class BatailleNavale(object):8 def __init__(self):9 self.__f = Tk()10 self.__f.title("Bataille Navale 5x5")11 self.__f.resizable(False, False)12 self.__joueurs = self.__demander_joueurs()13 self.__lancer_partie()14 def __demander_joueurs(self) -> Joueur:15 fenetre_pseudo = DemandeJoueur(self.__f)16 for i in range(9):17 fenetre_pseudo.changer_titre_fenetre(" Entrez le pseudonyme du joueur " + str(i) + ": ")18 fenetre_pseudo.obtenir_bouton_valider().wait_variable(fenetre_pseudo.obtenir_etat_bouton_valider())19 fenetre_pseudo.supprimer_fenetre()20 return fenetre_pseudo.obtenir_joueurs()21 def __placer_bateaux(self, joueurs: list):22 for joueur in joueurs:23 joueur.placer_bateau(self.__grille.obtenir_case_aleatoire())24 def __lancer_partie(self):25 fenetre_grille = AfficherGrille(self.__f, 5, 5, 3)26 self.__grille = fenetre_grille.obtenir_grille()27 joueurs_aleatoires = random.sample(self.__joueurs, 2)28 fenetre_grille.changer_message_info(joueurs_aleatoires[0].obtenir_pseudonyme() + " joue contre " + joueurs_aleatoires[1].obtenir_pseudonyme())29 fenetre_grille.changer_texte_bouton_valider("Commencer")30 fenetre_grille.obtenir_bouton_valider().pack()31 fenetre_grille.changer_selection(3)32 fenetre_grille.obtenir_bouton_valider().wait_variable(fenetre_grille.obtenir_etat_bouton_valider())33 fenetre_grille.changer_selection(0)34 self.__placer_bateaux(joueurs_aleatoires)35 tour = 036 jouer = True37 while jouer:38 if (tour % 2) == 0:39 joueur = joueurs_aleatoires[0]40 adversaire = joueurs_aleatoires[1]41 fenetre_grille.changer_message_info("Au tour de " + joueurs_aleatoires[0].obtenir_pseudonyme())42 else:43 joueur = joueurs_aleatoires[1]44 adversaire = joueurs_aleatoires[0]45 fenetre_grille.changer_message_info("Au tour de " + joueurs_aleatoires[1].obtenir_pseudonyme())46 fenetre_grille.changer_texte_bouton_valider("Valider")47 fenetre_grille.vider_grille()48 fenetre_grille.obtenir_bouton_valider().pack_forget()49 for case in joueur.obtenir_cases_jouees():50 fenetre_grille.obtenir_grille().obtenir_case(case.obtenir_x(), case.obtenir_y()).changer_etat(Etat.INDISPONIBLE)51 fenetre_grille.obtenir_bouton_valider().wait_variable(fenetre_grille.obtenir_etat_bouton_valider())52 for case in fenetre_grille.obtenir_cases_selectionnees():53 fenetre_grille.obtenir_grille().obtenir_case(case.obtenir_x(), case.obtenir_y()).changer_etat(Etat.INDISPONIBLE)54 joueur.ajouter_case_jouee(case)55 if adversaire.obtenir_case_bateau() == case:56 fenetre_grille.changer_message_info("Victoire de " + joueur.obtenir_pseudonyme())57 case.changer_etat(Etat.DECOUVERTE)58 fenetre_grille.changer_texte_bouton_valider("Continuer le tournoi")59 fenetre_grille.obtenir_bouton_valider().wait_variable(fenetre_grille.obtenir_etat_bouton_valider())60 joueur.vider_cases_jouees()61 62 self.__joueurs.remove(adversaire)63 64 jouer = False65 break66 tour += 167 if len(self.__joueurs) == 1:68 fenetre_grille.changer_message_info(self.__joueurs[0].obtenir_pseudonyme() + " remporte le tournoi!")69 fenetre_grille.changer_texte_bouton_valider("Recommencer")70 fenetre_grille.obtenir_bouton_valider().wait_variable(fenetre_grille.obtenir_etat_bouton_valider())71 fenetre_grille.supprimer_fenetre()72 self.__joueurs = self.__demander_joueurs()73 self.__lancer_partie()74 else:75 fenetre_grille.supprimer_fenetre()76 self.__lancer_partie()77 def demarrer(self):78 self.__f.mainloop()79main = BatailleNavale()...
app.py
Source:app.py
1from flask import Flask, render_template, request, jsonify, redirect, url_for2from bd import obtenir_connexion34app = Flask(__name__)567@app.route('/')8def acceuil():9 return render_template('index.html')1011@app.route('/obtenir_description')12def obtenir_description():13 connexion = obtenir_connexion()14 curseur = connexion.cursor()15 curseur.execute('SELECT * FROM departements')16 lstDescription = curseur.fetchall()17 connexion.close()1819 return jsonify(lstDescription)2021@app.route('/obtenir_sousdescription/<string:id>')22def obtenir_sousdescription(id):23 connexion = obtenir_connexion()24 curseur = connexion.cursor()25 curseur.execute('SELECT * FROM sousdepartements WHERE idDepartement=%s', (id,))26 lstSousDescription = curseur.fetchall()27 connexion.close()2829 return jsonify(lstSousDescription)3031@app.route('/obtenir_categorie/<string:id>')32def obtenir_categorie(id):33 connexion = obtenir_connexion()34 curseur = connexion.cursor()35 curseur.execute('SELECT * FROM categories WHERE idSousDepartement=%s', (id,))36 lstCategorie = curseur.fetchall()37 connexion.close()38 39 return jsonify(lstCategorie)4041@app.route('/cree_produit', methods=['POST'])42def cree_produit_post():43 produit = request.json4445 connexion = obtenir_connexion()46 curseur = connexion.cursor()47 curseur.execute('INSERT INTO produits(nom, dpartement, sousDepartement, categorie) VALUES (%s, %s, %s, %s)', (produit[0], produit[1], produit[2], produit[3]))48 connexion.commit()49 connexion.close()5051 return jsonify(produit)5253@app.route('/recherche')54def recherche():55 return render_template('recherche.html')5657@app.route('/obtenir_recomandation/<string:recherche>')58def obtenir_recomandation(recherche):59 connexion = obtenir_connexion()60 curseur = connexion.cursor()61 var = '%' + recherche + '%'62 curseur.execute('SELECT * FROM produits WHERE nom LIKE %s LIMIT 5', (var,))63 lstRecomandation = curseur.fetchall()64 connexion.close()65 return jsonify(lstRecomandation)6667@app.route('/obtenir_AllProduits/<string:recherche>')68def obtenir_AllProduits(recherche):69 connexion = obtenir_connexion()70 curseur = connexion.cursor()71 var = '%' + recherche + '%'72 curseur.execute('SELECT * FROM produits WHERE nom LIKE %s', (var,))73 lstAllProduits = curseur.fetchall()74 connexion.close()75 return jsonify(lstAllProduits)7677if __name__ == '__main__':
...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!