prgm qui compte le nombre de fois qu'un nombre apparaît dans une liste python

–2 votes
def compter(e,l):

    n= 0

    while n <len(l):
        if l[e] ==e:
            compteur = compteur +1
        print(compteur,end='')
demandé 1-Jan par yann
edité 4-Jan par lucas

2 Réponses

0 votes

Comme il n'y a pas de question, je vais en poser une : comment assurer que son code python est lisible de manière standard ?

Voici une première piste de réponse, rien de neuf mais si ça peut rendre service…

Le «naming»

Il y n'y a que deux choses difficiles en informatique : l'invalidation de cache, et donner un nom aux choses
-- Phil Karlton

Nommer les variables, les fonctions, c'est délicat. Une bonne méthode, c'est de se poser des questions. Par exemple :

Est-ce qu'il s'agit d'une fonction ?

Si oui, alors il est probable que cette fonction réalise une opération. Et cette opération est probablement plus ou moins réductible à un verbe. Avoir ce verbe dans la fonction pourrait être pratique.
Et il s'applique dans un contexte ou sur un/des objets particuliers, ce serait donc cool d'avoir aussi une indication là-dessus. Et si en plus on devine à peu près ce que ça retourne, alors là c'est le pompon.

Exemples: count_number_of_dots, build_Bidule, make_it_rain, get_Bidule_from_file

Mauvais Exemples : dots, bidule, rain, file_Bidule

Contre-Exemples : len, int, main

Est-ce qu'il s'agit d'une variable référençant un objet ?

Si oui, alors le meilleur nom pour la variable est probablement le nom de l'objet, ou un nom s'y rapportant, avec un indicatif sur son usage. Parce qu'avoir ce genre de code, c'est potentiellement assez lisible :

bidule = get_Bidule_from_file()
bidule.do_machin()

À condition qu'il n'y ait pas 2 Bidules à gérer. Typiquement, quand on fait une interface graphique, on a une réference vers l'objet root (la tk.Root, la QMainWindow,…), là ça s'entends.

Mais sinon, il vaut mieux avoir un indicatif. Et que le nom de la variable n'ait pas besoin qu'on vous demande pour savoir ce qu'elle veut dire. Mieux vaut éviter les réductions de noms à la con à ce propos, ça devient vite illisible si on fait pas attention.

Mieux vaut long et simple que court et complexe.

Exemples: best_Bidule, current_index, max_y, attribut_principal_dassertion

Mauvais Exemples : bb, i, my, attrbt_prncpl_dssrtn

Contre-Exemples : idx, err, obj, attr (ce sont surtout des appellations standards trouvées dans beaucoup de code, d'où le fait qu'elles soient acceptables)

Est-ce qu'il s'agit d'une collection d'objets ?

Si oui, alors un bon nom pour cette variable serait certainement le même que s'il s'agissait d'un objet seul, mais soit (1) mit au pluriel (best_Bidule devient bests_Bidules), ou (2) avec un indicatif de collection, par exemple, pile_de_Bidules (notons la présence du pluriel).

Lorsque la collection a un nom spécifique, on peut aussi utiliser ce nom à condition qu'il ait été bien défini quelque part. Par exemple, cartes_dans_ma_main peut devenir simplement main, mais il faut alors faire attention à ce que main ne puisse être confondu avec autre chose (une fonction main par exemple), ni ne soit trop nébuleux (là c'est évident, mais saviez-vous qu'un groupe de sanglier se nomme une compagnie ? Moi non plus, jusqu'au jour où j'ai lu le code d'un éthologue).

Dans cet exemple particulier, on peut lever les ambiguïtés en utilisant main_du_joueur : on rappelle bien le contexte dans lequel ce nom/cette variable est utilisée.

Le style

Souvent, dans les codes, on remarque des petites inconsistences n'ayant pas d'influence sur le code, mais qui le rende plus désagréable à lire.

Des espaces après, mais par avant le = lors d'une assignation de variable, le nom d'une fonction qui est en CamelCase alors que toutes les autres sont en snake_case, le nom d'une variable réutilisé pour un autre objet dans la même fonction,…

Ces petits détails comptent, car ils complexifient la compréhension du code, et donc son écriture, son débuggage, et son caractère pédagogique.

Pour régler ce problème, Python propose une norme d'écriture, la PEP 8.

Un tuto ici, ou

Et voici Black, un petit programme qui réécrit «correctement» un fichier python ; il n'y a même plus besoin de réfléchir au style, l'ordinateur s'en occupe tout seul ! Tuto ici.

répondu 4-Jan par lucas (2,340 points)
+1 vote

Pas besoin de réinventer la roue, utilise list.count() :

def compter(e, l):
    return l.count(e)

L'utilisation d'une fonction est peut-être de trop, tu pourrais utiliser directement count().

répondu 5-Jan par Tiger-222 (1,190 points)
...