oui, c'est bien ce conTEXT là
le programme python doit être placé dans le répertoire où il y a " HelloWorld.py " et " Capitalise.py "

il apparaitra ensuite dans la liste avec les deux autres


Mario Agrillo a écrit :
Bonjour jdb
est ce que c'est " context " ici http://www.clubic.com/telecharger-fiche10500-context.html
Le programme doit être placé dans /share/script/python et appelé à > partir de 
macro/python/executer.
il y a deja " HelloWorld.py " et " Capitalise.py "
mario


Date: Tue, 15 Jul 2008 21:24:54 +0200> From: [EMAIL PROTECTED]> To: [email protected]> Subject: Re: [users-fr] Comment travailler en Python ?> > Bonjour,> j'ai installé python 2.5 et j'utilise idle pour créer le programme.> Sinon context est pas mal sous windows. C'est un freeware qui offre la > coloration syntaxique pour python> Le programme doit être placé dans /share/script/python et appelé à > partir de macro/python/executer.> J'ai créé plusieurs programmes simples, notamment un tirage de tombola à > partir du tableur, que je peux vous passer pour partir d'un> exemple qui fonctionne> > J. De BACKER a écrit :> > Bonjour,> > cette adresse pourrait peut-être vous intéresser> >> > http://www.python.org/doc/> > et> > http://wiki.python.org/moin/BeginnersGuide> >> >> > Cordialement> > jdb> >> > De : gerard [mailto:[EMAIL PROTECTED]> > Objet : Re: [users-fr] Comment travailler en Python ?> >> >> > Mario Agrillo a écrit :> > > >> Bonjour> >>> >> comment faire pour travailler sur une macro python ?> >>> >> dans la fenetre "macro Python" je fais "executer " mais il genere une erreur> >>> >> "creer" "editer" "renommer" "supprimer" restent grises , que dois je installer ?> >>> >> > > Il faut utiliser un éditeur de texte externe. L'éditeur de> > OpenOffice.org ne concerne que le Basic.> > Je n'ai jamais fait de script Python, j'utilise plutôt les extensions en> > créant des composants.> > Sur le wiki tu devrais trouver des explications pour intégrer des> > scripts Python dans OO.o.> >> > (Je ne pourrai plus répondre aux courriels ou participer aux listes> > pendant les deux prochaines semaines :-) )> >> >> >> > ---------------------------------------------------------------------> > To unsubscribe, e-mail: [EMAIL PROTECTED]> > For additional commands, e-mail: [EMAIL PROTECTED]> >> >> > > > > ---------------------------------------------------------------------> To unsubscribe, e-mail: [EMAIL PROTECTED]> For additional commands, e-mail: [EMAIL PROTECTED]>
_________________________________________________________________
Devinette: Quel est le moyen le plus rapide pour communiquer ?
http://www.startmessenger.be/fr/index.asp

# -*- coding: cp1252 -*-
# 2006-05-03 programmation de la tombola des ecoles


#importe uno
import uno
    # importe la fonction permettant de creer un nombre aleatoire dans une serie
    # et celle permettant de brouiller les listes
from random import randint
from random import shuffle
from random import choice
    #si on ne definit pas de fonction cela ne marche pas 
def tombola():

    # récupère le document actif
    document = XSCRIPTCONTEXT.getDocument()
    # prépare le travail sur les feuilles
    feuilles = document.Sheets
    feuillelots = feuilles.getByName("lots")
    feuilletirage = feuilles.getByName("tirage")
    feuillegroslots = feuilles.getByName ("gros_lots")
    feuilletickets = feuilles.getByName ("tickets")

# creer liste carnets depuis les balises
    #recupère les N° de debut et de fin
    cellule = feuilletickets.getCellByPosition (1,14)
    numdebut = cellule.Value
    cellule = feuilletickets.getCellByPosition (4,14)
    numfin = cellule.Value


# apres sauvegarde du 16 05 06 avec test ou du 15 sans test
# essai de rendre le programme plus universel en gérant les carnets commençant 
à 1  
# recupère le reste de la division par 10 
    if numdebut >= 10 :
        numdebut = numdebut % 10

# le programme d'origine est conservé dans la condition numdebut = 0
    if numdebut == 0 :
        
        #créé une liste vide
        listecarnetsentiers = [numdebut]
        finliste = numfin // 10 * 10
        testfinliste = numdebut + 10
        #ajoute tous les carnets à la liste
        while testfinliste <= finliste:
            listecarnetsentiers.append (testfinliste)
            testfinliste = testfinliste + 10

    # récupérer les grots lots et créer la liste des carnets
    # en même temps on amorce la liste des numéros tirés
        listegroslots = []
        listenumerosinterdits = []
        lignedebut = 9
        # recupère le type de la cellule, converti en chaine et compare
        chainetestempty = "pas vide"
        while chainetestempty != "<uno.Enum com.sun.star.table.CellContentType 
('EMPTY')>" :
            cellule = feuillegroslots.getCellByPosition ( 2, lignedebut)
            valeur  = cellule.Value
            testempty = cellule.Type
            chainetestempty = str(testempty)
            if str(testempty) != "<uno.Enum com.sun.star.table.CellContentType 
('EMPTY')>" :
                listegroslots.append(valeur)
                listenumerosinterdits.append(valeur)
            lignedebut = lignedebut + 1

        # pour récupérer le début du carnet, il faut diviser par 10 en gardant 
l'entier
        # et remultiplier par 10
        listecarnetsgroslots = []
        for n in listegroslots :
            debutcarnet = n//10*10
            # si deux gros lot dans le même carnet, ne l'ajoute qu'une fois 
pour ne
            # pas provoquer d'erreur lors du retrait de listecarnetsentiers
            if debutcarnet not in(listecarnetsgroslots) :
                listecarnetsgroslots.append(debutcarnet)
    #ensuite on enleve les numéros de la liste des carnets
        for n in listecarnetsgroslots :
            listecarnetsentiers.remove(n)

    # récupérer les numéros de début de carnet invendus pour les enlever de la 
liste
        listecarnetsinvendus = []
        valeur = 4
        lignedebut = 18
        while valeur != 0 :
            cellule = feuilletickets.getCellByPosition ( 0, lignedebut)
            valeur  = cellule.Value
            if valeur != 0 :
                listecarnetsinvendus.append(valeur)
            lignedebut = lignedebut + 1
    #ensuite on enleve les numéros de la liste des carnets
        for n in listecarnetsinvendus :
            listecarnetsentiers.remove(n)                      
    # et on ajoute tous les numeros du carnet dans la liste des numeros 
interdits
            for i in range(10) :
                listenumerosinterdits.append(n)
                n = n + 1

    # recupérer les numéros individuels et les ajouter dans la liste des 
numéros interdits

        # la valeur ci dessous est quelconque mais <> 0
        valeur = 4
        lignedebut = 18
        while valeur != 0 :
            cellule = feuilletickets.getCellByPosition ( 4, lignedebut)
            valeur  = cellule.Value
            if valeur != 0 :
                listenumerosinterdits.append(valeur)
            lignedebut = lignedebut + 1


    # récupère la liste des lots sur la page des lots       
        dicolots = {}
        valeur = 'a'
        lignedebut = 9
        while valeur != "" :
            cellule = feuillelots.getCellByPosition ( 1, lignedebut)
            cellule2 = feuillelots.getCellByPosition ( 0, lignedebut)
            valeur  = cellule.String
            valeur2 = cellule2.Value
            # ajouter 1000 au numéro permet de distinguer les gros lots des 
autres
            if valeur !="" :
                dicolots[valeur2 + 1000] = valeur
            lignedebut = lignedebut + 1
            
    # et sur la page des gros lots
    # amorce le dictionnaire des numéros gagnants
        dicogagnants = {}
        valeur = 'a'
        lignedebut = 9
        while valeur != "" :
            cellule = feuillegroslots.getCellByPosition ( 1, lignedebut)
            cellule2 = feuillegroslots.getCellByPosition ( 0, lignedebut)
            cellule3 = feuillegroslots.getCellByPosition ( 2, lignedebut)
            valeur  = cellule.String
            valeur2 = cellule2.Value
            valeur3 = cellule3.Value
            if valeur !="" :
                dicolots[valeur2] = valeur
                dicogagnants[valeur3] = valeur2
            lignedebut = lignedebut + 1

    # TIRAGE
    # prendre un numéro dans la liste des lots brouillée par shuffle
        listedicolots = dicolots.keys()
        shuffle(listedicolots)    
        for n in listedicolots :
    # écarte les gros lot du tirage
            if n > 1000 :
                if listecarnetsentiers != [] :
                    n2 = choice(listecarnetsentiers)
                    tranchesup = n2 + 9
                    gagnant = randint(n2, tranchesup)
                    if gagnant not in listenumerosinterdits :
                        dicogagnants[gagnant] = n
                        listenumerosinterdits.append(gagnant)
                        listecarnetsentiers.remove(n2)
    # si le numéro est dans la liste des interdits (invendus)
    # calcule la fin du carnet et ajoute un nombre de la liste ajout
    # si le nombre ainsi trouvé est > au numéro de carnet, retranche 10
    # la boucle tourne jusqu'à trouver un nombre qui n'est pas dans les N° 
interdits
                    else :
                        x = gagnant // 10 * 10 + 9
                        listeajout = [5, 4, 1, 7, 8, 6, 3, 2, 9]
                        for n3 in listeajout :
                            gagnant = gagnant + n3    
                            if gagnant > x :
                                gagnant = gagnant - 10
                            if gagnant not in listenumerosinterdits :
                                dicogagnants[gagnant] = n
                                listenumerosinterdits.append(gagnant)
                                listecarnetsentiers.remove(n2)
                                break
        # si la liste des carnets est vide
        # alors le tirage à lieu dans toute la plage de nombres
        # le test permet de ne pas sortir de la boucle sans avoir tiré un N° 
valide (non interdit)
                else :             
                    test = 0
                    while test == 0 :
                        gagnant = randint(numdebut, numfin)
                        if gagnant not in listenumerosinterdits :
                            dicogagnants[gagnant] = n
                            listenumerosinterdits.append(gagnant)
                            test = 1

    # CREATION DU RESULTAT
        listecledicogagnants = dicogagnants.keys()
        listecledicogagnants.sort()
        lignedebut = 11
        for n in listecledicogagnants :
            numerolotgagne = dicogagnants[n]
            lot = dicolots[numerolotgagne]
            cellulenumlot = feuilletirage.getCellByPosition (0,lignedebut)
            cellulegagnant =  feuilletirage.getCellByPosition (2,lignedebut)
            cellulelot = feuilletirage.getCellByPosition (1,lignedebut)
            cellulegagnant.Value = n
            cellulelot.String = lot
            if numerolotgagne > 1000 :
                cellulenumlot.Value = numerolotgagne - 1000
            else :
                cellulenumlot.Value = numerolotgagne
                cellulegagnant.CellBackColor = 13421772
                cellulegagnant.CharWeight = 150
                cellulenumlot.CellBackColor = 13421772
                cellulenumlot.CharWeight = 150
                cellulelot.CellBackColor = 13421772
                cellulelot.CharWeight = 150
            lignedebut = lignedebut + 1

# indroduit une variant si le numéro commence par 1        
    elif numdebut == 1 :        
        #créé une liste vide
        listecarnetsentiers = [numdebut]
        finliste = numfin - 9
        testfinliste = numdebut + 10
        #ajoute tous les carnets à la liste
        while testfinliste <= finliste:
            listecarnetsentiers.append (testfinliste)
            testfinliste = testfinliste + 10
           
    # récupérer les grots lots et créer la liste des carnets
    # en même temps on amorce la liste des numéros tirés
        listegroslots = []
        listenumerosinterdits = []
        lignedebut = 9
        # recupère le type de la cellule, converti en chaine et compare
        chainetestempty = "pas vide"
        while chainetestempty != "<uno.Enum com.sun.star.table.CellContentType 
('EMPTY')>" :
            cellule = feuillegroslots.getCellByPosition ( 2, lignedebut)
            valeur  = cellule.Value
            testempty = cellule.Type
            chainetestempty = str(testempty)
            if str(testempty) != "<uno.Enum com.sun.star.table.CellContentType 
('EMPTY')>" :
                listegroslots.append(valeur)
                listenumerosinterdits.append(valeur)
            lignedebut = lignedebut + 1

        # pour récupérer le début du carnet, il faut diviser par 10 en gardant 
l'entier
        # et remultiplier par 10 puis rajouter 1
        listecarnetsgroslots = []
        for n in listegroslots :
            debutcarnet = n//10*10 + 1
            # si deux gros lot dans le même carnet, ne l'ajoute qu'une fois 
pour ne
            # pas provoquer d'erreur lors du retrait de listecarnetsentiers
            if debutcarnet not in(listecarnetsgroslots) :
                listecarnetsgroslots.append(debutcarnet)

    #ensuite on enleve les numéros de la liste des carnets
        for n in listecarnetsgroslots :
            listecarnetsentiers.remove(n)

    # récupérer les numéros de début de carnet invendus pour les enlever de la 
liste
        listecarnetsinvendus = []
        valeur = 4
        lignedebut = 18
        while valeur != 0 :
            cellule = feuilletickets.getCellByPosition ( 0, lignedebut)
            valeur  = cellule.Value
            if valeur != 0 :
                listecarnetsinvendus.append(valeur)
            lignedebut = lignedebut + 1
    #ensuite on enleve les numéros de la liste des carnets
        for n in listecarnetsinvendus :
            listecarnetsentiers.remove(n)                      
    # et on ajoute tous les numeros du carnet dans la liste des numeros 
interdits
            for i in range(10) :
                listenumerosinterdits.append(n)
                n = n + 1

    # recupérer les numéros individuels et les ajouter dans la liste des 
numéros interdits

        # la valeur ci dessous est quelconque mais <> 0
        valeur = 4
        lignedebut = 18
        while valeur != 0 :
            cellule = feuilletickets.getCellByPosition ( 4, lignedebut)
            valeur  = cellule.Value
            if valeur != 0 :
                listenumerosinterdits.append(valeur)
            lignedebut = lignedebut + 1


    # récupère la liste des lots sur la page des lots       
        dicolots = {}
        valeur = 'a'
        lignedebut = 9
        while valeur != "" :
            cellule = feuillelots.getCellByPosition ( 1, lignedebut)
            cellule2 = feuillelots.getCellByPosition ( 0, lignedebut)
            valeur  = cellule.String
            valeur2 = cellule2.Value
            # ajouter 1000 au numéro permet de distinguer les gros lots des 
autres
            if valeur !="" :
                dicolots[valeur2 + 1000] = valeur
            lignedebut = lignedebut + 1
            
    # et sur la page des gros lots
    # amorce le dictionnaire des numéros gagnants
        dicogagnants = {}
        valeur = 'a'
        lignedebut = 9
        while valeur != "" :
            cellule = feuillegroslots.getCellByPosition ( 1, lignedebut)
            cellule2 = feuillegroslots.getCellByPosition ( 0, lignedebut)
            cellule3 = feuillegroslots.getCellByPosition ( 2, lignedebut)
            valeur  = cellule.String
            valeur2 = cellule2.Value
            valeur3 = cellule3.Value
            if valeur !="" :
                dicolots[valeur2] = valeur
                dicogagnants[valeur3] = valeur2
            lignedebut = lignedebut + 1

    # TIRAGE
    # prendre un numéro dans la liste des lots brouillée par shuffle
        listedicolots = dicolots.keys()
        shuffle(listedicolots)    
        for n in listedicolots :
    # écarte les gros lot du tirage
            if n > 1000 :
                if listecarnetsentiers != [] :
                    n2 = choice(listecarnetsentiers)
                    tranchesup = n2 + 9
                    gagnant = randint(n2, tranchesup)
                    if gagnant not in listenumerosinterdits :
                        dicogagnants[gagnant] = n
                        listenumerosinterdits.append(gagnant)
                        listecarnetsentiers.remove(n2)
    # si le numéro est dans la liste des interdits (invendus)
    # calcule la fin du carnet et ajoute un nombre de la liste ajout
    # si le nombre ainsi trouvé est > au numéro de carnet, retranche 10
    # la boucle tourne jusqu'à trouver un nombre qui n'est pas dans les N° 
interdits
                    else :
                        x = gagnant // 10 * 10 + 10
                        listeajout = [5, 4, 1, 7, 8, 6, 3, 2, 9]
                        for n3 in listeajout :
                            gagnant = gagnant + n3    
                            if gagnant > x :
                                gagnant = gagnant - 10
                            if gagnant not in listenumerosinterdits :
                                dicogagnants[gagnant] = n
                                listenumerosinterdits.append(gagnant)
                                listecarnetsentiers.remove(n2)
                                break
        # si la liste des carnets est vide
        # alors le tirage à lieu dans toute la plage de nombres
        # le test permet de ne pas sortir de la boucle sans avoir tiré un N° 
valide (non interdit)
                else :             
                    test = 0
                    while test == 0 :
                        gagnant = randint(numdebut, numfin)
                        if gagnant not in listenumerosinterdits :
                            dicogagnants[gagnant] = n
                            listenumerosinterdits.append(gagnant)
                            test = 1

    # CREATION DU RESULTAT
        listecledicogagnants = dicogagnants.keys()
        listecledicogagnants.sort()
        lignedebut = 11
        for n in listecledicogagnants :
            numerolotgagne = dicogagnants[n]
            lot = dicolots[numerolotgagne]
            cellulenumlot = feuilletirage.getCellByPosition (0,lignedebut)
            cellulegagnant =  feuilletirage.getCellByPosition (2,lignedebut)
            cellulelot = feuilletirage.getCellByPosition (1,lignedebut)
            cellulegagnant.Value = n
            cellulelot.String = lot
            if numerolotgagne > 1000 :
                cellulenumlot.Value = numerolotgagne - 1000
            else :
                cellulenumlot.Value = numerolotgagne
                cellulegagnant.CellBackColor = 13421772
                cellulegagnant.CharWeight = 150
                cellulenumlot.CellBackColor = 13421772
                cellulenumlot.CharWeight = 150
                cellulelot.CellBackColor = 13421772
                cellulelot.CharWeight = 150
            lignedebut = lignedebut + 1

 

Attachment: tombola.ods
Description: application/vnd.oasis.opendocument.spreadsheet

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à