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

philippe coste philippe.coste at u-psud.fr
Mar 30 Aou 15:01:02 CEST 2016


Bonjour,

Merci Mais cans notre cas c'est la moyenne d'une UE qui est bonifiée et 
pas directement la moyenne géérale. C'est pourquoi je passai par le 
champ spécifique de calcul de moyennes d'UE. Je laisse passr le coupde 
feu de la rentrée et je m'y recolle.

Amicalement,

Philippe Coste


Le 29/08/2016 à 10:24, Dominique SOUDIERE a écrit :
>
> 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
>

-- 
_____________________________________________________________________
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


_____________________________________________________________________

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20160830/047c0d13/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/20160830/047c0d13/attachment-0002.gif>
-------------- section suivante --------------
Une pièce jointe autre que texte a été nettoyée...
Nom: logos_siganture.gif
Type: image/gif
Taille: 14096 octets
Desc: non disponible
URL: <https://www-rt.iutv.univ-paris13.fr/pipermail/scodoc-devel/attachments/20160830/047c0d13/attachment-0003.gif>


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