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 jdbest ce que c'est " context " ici http://www.clubic.com/telecharger-fiche10500-context.htmlLe programme doit être placé dans /share/script/python et appelé à > partir de macro/python/executer.il y a deja " HelloWorld.py " et " Capitalise.py "marioDate: 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
tombola.ods
Description: application/vnd.oasis.opendocument.spreadsheet
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
