[Scodoc-devel] pb formules de calcul de moyennes définies par l'utilisateur

Dominique SOUDIERE dominique.soudiere at univ-lehavre.fr
Lun 29 Aou 10:24:42 CEST 2016


Bonjour,

Je n'ai pas beaucoup de temps aussi je vous donne ma moulinette qui 
finalement n'a pas été mise en place car la mesure de pénalisation a été 
boulée en CEVU.

Cela vous deonnera peut-être une piste.

Dominique


# Fonction Le Havre, par Dom. Soud.
def sign(x):
     if x > 0:
         return 1
     else:
         return 0

def bonus_iutlh(notes_sport, coefs, infos=None):

     """ Mettre coef >0 aux bonus et 0 aux malus ... rien d'autre

     Bonus:
     La note de sport de nos étudiants va de 0 à 20 points.
       m2=m1*(1+0.005*((10-N1)+(10-N2))
    m2 : nouvelle moyenne de l'unité d'enseignement si note de sport 
et/ou de langue supérieure à 10
    m1 : moyenne de l'unité d'enseignement avant bonification
    N1 : note de sport si supérieure à 10
    N2 : note de seconde langue si supérieure à 10
     Par exemple : sport 15/20 et langue 12/20 : chaque UE sera 
multipliée par 1+0.005*7,
     ainsi que la moyenne générale.

     Malus:
     Pour le malus On recupere les notes dont le coef est nul puis on 
les affecte de -0.1
     dés que depassement du seuil global de 5 demi journees d'absences
     """
     # les coefs >0 comptent pour bonus les autres malus
     notesbonus=[(x-10)*y for x,y in zip(notes_sport,coefs) if x>10 and y>0]
     # seules les notes dont le coeff malus est de 0
     # seuil mini de 5 absences pour prise en compte
     totalabsences=sum([x for x,y in zip(notes_sport,coefs) if y==0])
     notesmalus=[-0.1*x*sign(totalabsences-5)*(1-y) for x,y in 
zip(notes_sport,coefs) if y==0]
     # calcul des points bonus
     pointsbonus = sum(notesbonus)
     # Calcul des malus sur UE puis MoyGen
     nbre_UE=len(infos['moy_ues'])
     malusUE=[] # contiendra les notes de malus dans l'ordre
     for x in range(0,nbre_UE):
         if x<len(notesmalus):
             malusUE.append(notesmalus[x])
         else:
             malusUE.append(0)
     # Au Havre le bonus est coefficient multiplicateur
     factorbonus = (1. + (0.005 * pointsbonus))
     # bonus nul puisque les moyennes sont directement modifiées par factor
     bonus = 0
     # Modifie les moyennes de toutes les UE:
     i=0
     pointsmalus=0
     sumc=0
     numUEs=[infos['moy_ues'][ue_id]['ue']['numero'] for ue_id in 
infos['moy_ues'] if infos['moy_ues'][ue_id]['sum_coefs']>0]
     numUEs.sort()
     for ue_id in infos['moy_ues']:
         ue_status = infos['moy_ues'][ue_id]
         if ue_status['sum_coefs'] > 0:
             # modifie moyenne UE ds semestre courant
             ue_status['cur_moy_ue'] = ue_status['cur_moy_ue'] * 
factorbonus + malusUE[numUEs.index(ue_status['ue']['numero'])]
             if not ue_status['is_capitalized']:
pointsmalus+=ue_status['sum_coefs']*malusUE[numUEs.index(ue_status['ue']['numero'])] 
# Cumul du malus pondere
                 sumc+=ue_status['sum_coefs']
                 # si non capitalisee, modifie moyenne prise en compte
                 ue_status['moy'] = ue_status['cur_moy_ue']
             i+=1
     if sumc!=0:
         pointsmalus=pointsmalus/sumc  # Moyenne de malus a ajouter a la 
moyenne generale
     else:
         pointsmalus=0
     # Modifie la moyenne générale
     infos['moy'] = infos['moy'] * factorbonus + pointsmalus
     #open('/tmp/log','a').write( pprint.pformat(ue_status) + '\n\n' )
     return bonus


Le 29/08/2016 à 10:10, philippe coste a écrit :
>
> Bonjour à tous,
>
> A l'IUT de Cachan il a été décidé d'appliquer dans nos MCC un malusà 
> toutes les UEs académiques (hors stage) de 0.5 pts par demi-journée 
> d'absences non justifiées au delà d'un seuil supérieur à 5. Je dois 
> donc écrire une formule personnalisée de calcul de moyenne d'UE pour 
> chaque UE.
>
> Cette formule marche MAIS il se produit un phénomène bizarre : Je 
> modifie les absences d'un étudiant et je retourne sur sa fiche : pas 
> de prise en compte sur ses moyennes d'UE alors que le nombre de ses 
> absences non justifiées est à jour. Je retourne dans la formule, je ne 
> la modifie pas et je l'enregistre. Je retourne sur la fiche de 
> l'étudiant : les moyennes d'UE sont cette fois correctes avec la prise 
> en compte des absences. Si j'ajoute une absence ou que j'en supprime 
> une : même problème : ll faudra que je retourne dans la formule et que 
> je l'enregistre sans la modifier pour que la prise en compte se fasse 
> sur les moyennes.
>
> J'ai essayé plusieurs écritures de formules sans que cela ne change ce 
> phénomène. Voici deux exemples de formules :
>
> * la plus simple :
>
> ifelse(moy_valid, max(ifelse(nb_abs_nojust>5, 
> moy_val-(0.5*(nb_abs_nojust-5)), moy_val), 0), moy)
>
> * la plus compliquée :
>
> ifelse(moy_valid, max(ifelse(max(cmp(nb_abs_nojust,5),0), 
> moy_val-(0.5*(nb_abs_nojust-5)), moy_val), 0), moy)
>
>
> Je n'ai absolument pas ce problème pour une formule qui bonifie l'UE 
> FSH avec les options telles que le sport, LV2... et qui est :
>
> ifelse(moy_valid, 
> min(max(moy_val+((notes[3]+notes[4]+notes[5]+notes[6]+notes[7])-10)/10, 
> moy), 20), moy)
>
>
> Je soumets donc ce petit problème à votre sagacité. Comment peut-on 
> résoudre ce problème ?
>
> Merci d'avance.
>
>
> Cordialement,
>
> Philippe Coste
>
> -- 
> _____________________________________________________________________
> Dr Ph. Coste
> Maître de Conférences / Associate Professor
>
> Centre de Nanosciences et de Nanotechnologies
> site d'Orsay
> bat 220
> Université de Paris-Sud
> F-91405 Orsay cedex (France)
>
> Tel  : + 33 1 69 15 40 18 	IUT de Cachan
> 9, Ave de la division Leclerc
> F-94234 Cachan cedex (France)
>
>
>
> Tel : +33 1 41 24 11 32
>
>
> e-mail  : philippe.coste at u-psud.fr
>
>
> _____________________________________________________________________
>
>
>
> _______________________________________________
> Scodoc-devel mailing list
> Scodoc-devel at rt.iutv.univ-paris13.fr
> https://www-rt.iutv.univ-paris13.fr/mailman/listinfo/scodoc-devel

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20160829/8e77755f/attachment-0001.html>
-------------- section suivante --------------
Une pièce jointe autre que texte a été nettoyée...
Nom: non disponible
Type: image/gif
Taille: 14096 octets
Desc: non disponible
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20160829/8e77755f/attachment-0001.gif>


Plus d'informations sur la liste de diffusion Scodoc-devel