9 compétences en programmation Python qui distinguent un débutant d'un expérimenté

Une traduction de l'article a été préparée avant le début du cours de développeur Python .




Python est un langage fantastique. Sa syntaxe est si simple que vous n’avez même pas besoin de rechercher un point-virgule supplémentaire dans votre code. Je dirais même que Python est l'un des meilleurs langages pour un débutant.

Vous commencez avec un ensemble complet de bibliothèques et vous en ajoutez de plus en plus à mesure que vous acquérez de l'expérience en programmation.

Après un certain temps, vous pouvez vous sentir coincé quand il s'avère que vous avez écrit trop de code pour une opération simple. En fait, ce n'est pas aussi mauvais qu'on pourrait le penser. Comprendre la logique de ce sur quoi vous travaillez est beaucoup plus important que le nombre de lignes. Le code court est meilleur, mais si la logique est cassée, votre code ne fonctionnera pas comme prévu. Mais avec l'expérience et une approche créative du travail, votre code deviendra plus court et meilleur.

Débutant ou confirmé?


Alors, qu'est-ce qui distingue un débutant d'un programmeur expérimenté en matière de programmation en Python?

Dans cet article, je voudrais me concentrer sur les problèmes suivants:

  • Résolution de problèmes et l'art de poser des questions
  • Comprendre pourquoi le code fonctionne (ou non)
  • Travailler avec des cordes
  • Travailler avec des listes
  • Utilisation de boucles
  • Utiliser des fonctions (et une terminologie appropriée)
  • Programmation orientée objet
  • Le respect du PEP

Résolution de problèmes et l'art de poser des questions


En tant que programmeur, je dirai que si vous n'avez pas suffisamment d'expérience dans la résolution de problèmes, il vous sera difficile de commencer à écrire un excellent code. Si vous avez des problèmes à résoudre des problèmes, il vous sera probablement difficile de trouver les meilleures solutions à vos problèmes. La programmation ne consiste pas seulement à écrire du code. La compétence de résolution de problèmes est la compétence dont vous aurez besoin pour sortir de la catégorie novice.

Poser des questions sur la programmation est également très important. Si vous demandez simplement à quelqu'un de résoudre le problème pour vous, sans rien essayer, vous faites la mauvaise chose. Ce n'est pas facile, mais si vous n'essayez pas de résoudre les problèmes vous-même, vous n'obtiendrez aucun avantage de la solution de quelqu'un d'autre à votre problème.

Si vous voulez savoir comment je formule des questions de programmation, voici un article séparé à ce sujet.

Problème xy


"J'ai besoin d'obtenir les trois derniers caractères d'une chaîne."
"Non, il n'en a pas besoin! Vous devez obtenir l'extension de fichier. "

Le problème XY est une chose très drôle. Vous avez le problème X et lorsque vous appelez le support, vous posez des questions sur le problème Y, dont la solution, comme vous le pensez, résoudra le problème X. [1]

Le cas décrit ci-dessus illustre bien cette situation. Si vous souhaitez obtenir l'extension de fichier, vous pouvez supposer que vous avez besoin des 3 derniers caractères de la ligne.

À quoi cela pourrait ressembler:

def extract_ext(filename):
    return filename[-3:]
print (extract_ext('photo_of_sasquatch.png'))
>>> png

À la perfection! Eh bien, essayez maintenant avec. Un photo_of_lochness.jpeg
utilisateur pourrait poser des questions sur l'extension dès le début. Le problème Y est les trois derniers caractères. Le problème X est une extension.

def extract_ext(filename):
    return filename.split('.')[-1]
print (extract_ext('photo_of_sasquatch.png'))
print (extract_ext('photo_of_lochness.jpeg'))
>>> png
>>> jpeg

C'est tout!

Vous pouvez également utiliser la bibliothèque standard os.path.splitext().
Vous pouvez vous y familiariser ici .

Comprendre pourquoi le code fonctionne (ou non)


Lorsque vous êtes nouveau, vous pouvez broyer un petit morceau de code pendant plusieurs jours. Et lorsque ce code commencera soudainement à fonctionner, vous ressentirez un soulagement et passerez à la partie suivante. Et c'est la pire chose que vous puissiez faire. Accepter silencieusement que le code fonctionne et ne pas comprendre pourquoi il fonctionne est probablement encore plus dangereux que de ne pas comprendre pourquoi le code ne fonctionne pas en principe.

Ne pas comprendre pourquoi votre code ne fonctionne pas se produit tout le temps. Lorsque vous éliminez toutes les erreurs et découvrez finalement pourquoi la solution n'a pas fonctionné, il est très important de réfléchir à la raison pour laquelle elle n'a pas fonctionné et à ce qui a finalement fait fonctionner le code correctement. Vous porterez cette connaissance à travers tous vos programmes.

Par exemple, si vous avez une erreur en retrait depuis le début d'une ligne dans le code avec plusieurs blocs, vous pouvez commencer à déplacer des blocs de façon aléatoire, puis à vous former lorsque le programme démarre enfin.
N'oubliez pas que dans la plupart des IDE, vous pouvez réduire les boucles et les si . Ainsi, vous pouvez facilement voir quelle unité fonctionne pour vous et laquelle ne fonctionne pas.


ATOM avec des constructions if-else pliées à droite

Une autre façon intéressante de voir visuellement comment fonctionne votre code est www.pythontutor.com , où vous pouvez voir ce qui se passe ligne par ligne dans votre programme.


Exécution de code dans pythontutors

Travailler avec des cordes


La section actuelle n'est pas entièrement consacrée aux lignes. Il s'agit davantage de creuser dans les grandes bibliothèques Python. En Python, nous apprenons très tôt qu'une chaîne peut être considérée comme une liste de caractères. Vous pouvez accéder à un caractère d'une chaîne par index.

word = 'supergreat'
print (f'{word[0]}') 
>>> s
print (f'{word[0:5]}')
>>> super

Un esprit curieux apprend ce qu'il offre str(), mais vous pouvez simplement continuer à écrire sans jamais regarder la documentation str(). Pour appeler la documentation de la fonction, vous pouvez écrire help(str)ou dir(str). Lorsque vous faites cela, vous pouvez trouver des méthodes dont l'existence n'était même pas suspectée. Vous avez peut-être regardé la documentation et vous savez que les chaînes ont une méthode endswith(), par exemple, et vous pouvez l'appliquer quelque part.



Voici un exemple de code qui fait la même chose de deux manières différentes. La première option est utilisée split, dont nous avons récemment parlé. Et dans le second - endswith()que vous pouvez trouver dans la documentation.

La plupart des programmeurs ne liront jamais toute la documentation et n'apprendront pas tout. Une partie importante du travail d'un programmeur consiste à savoir où chercher des informations sur la façon de résoudre un problème.

Travailler avec des listes


Les listes sont une chose formidable et polyvalente.
Par exemple, nous mélangeons ici des valeurs entières et des chaînes:

my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3, 'a' , 'n' , 'b']
for item in my_list:
    print (f'current item: {item}, Type: {type(item)}')



Voyez comment nous les avons mélangés. Si nous essayons de trier la liste, nous obtenons une erreur.

print (my_list.sort())



Et si nous devons séparer les lettres des chiffres? La première consiste à résoudre le problème à l'aide d'une boucle dans laquelle nous allons vérifier chaque élément de la liste. Un débutant apprendra à connaître les cycles tôt, car les boucles sont une partie importante de la programmation.

Le code peut ressembler à ceci:

my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3 , 'a' , 33.3 , 'n' , 'b']
number_list = []
string_list = []
for item in my_list:
    print (f'current item: {item}, Type: {type(item)}')
    if not isinstance(item,str):
        number_list.append(item)
    else:
        string_list.append(item)
my_list = string_list

C'est la bonne approche, mais un peu lourde. Le code fonctionne, mais vous pouvez faire en sorte que le problème soit résolu par la même méthode, mais en une seule ligne!

Si vous voulez être plus heureux, découvrez comment les expressions de liste fonctionnent en Python. Voici le même problème, mais résolu avec une compréhension du fonctionnement des listes:

my_list = [letter for letter in my_list if isinstance(letter,str)]


C'est tout!

Et ce n'est pas la fin. Vous pouvez utiliser filterpour obtenir le même résultat.

def get_numbers(input_char):
    if not isinstance(input_char,str):
        return True
    return False

my_list = [1,2,3,'a','b','c']
check_list = filter(get_numbers, my_list)
for items in check_list:
    print(items)




Comme vous l'avez probablement déjà compris, il existe de nombreuses façons de résoudre le même problème. Vous devez être conscient que cela fonctionnera mieux spécifiquement pour vous et votre équipe.

Prime

  • Retournez une liste (ou une ligne):

names = ['First' , 'Middle' , 'Last']
print(names[::-1])
>>> ['Last', 'Middle', 'First']

  • Combinaison d'éléments de liste:

names = ['First' , 'Middle' , 'Last']
full_name = ' '.join(names)
print(f'Full Name:\n{full_name}')
>>> First Middle Last

Utilisation de boucles


Avez-vous rencontré un code similaire?

greek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob']
for index in range(0,len(greek_gods)):
    print (f'at index {index} , we have : {greek_gods[index]}')

Vous apprendrez probablement cette construction à partir d'autres langages, mais c'est loin de l'approche de Python. En Python, vous utiliserez:

for name in greek_gods:
    print (f'Greek God: {name}')

Vous remarquerez rapidement qu'il n'y a pas d'index. Et si vous voulez opérer sur un index? En Python, vous pouvez en profiter enumerate. C'est un excellent moyen d'accéder à tout ce dont vous avez besoin!

for index, name in enumerate(greek_gods):
    print (f'at index {index} , we have : {name}')



Utiliser des fonctions (et une terminologie appropriée)


Quand je travaille sur l'animation, je dis toujours que si vous faites la même chose 5 fois, alors vous devez vous demander si vous avez besoin d'un programme? Parfois, après avoir passé deux semaines à développer un outil, vous pouvez économiser six semaines de travail. Lorsque vous écrivez du code et comprenez que vous effectuez plusieurs fois la même action, vous devez vous demander si vous devez coder ce code dans une procédure ou une fonction. La fonction renverra une valeur et la procédure exécutera simplement le code. Dans le premier exemple, vous voyez la procédure et dans le second, la fonction.

Cela semble déroutant. Voici une illustration reflétant le principe de fonctionnement:



Faites attention à la différence entre printet return. Il peut sembler qu'ils fonctionnent de la même manière, mais si vous regardez la sortie, vous verrez que la fonction renverra simplement le nom passé.

Les termes suivants qui doivent être clairement séparés sont des arguments et des paramètres. Les paramètres sont ceux qui sont définis dans la procédure ou la fonction (surlignés en rouge sur la figure), et ce que vous passez à la procédure ou la fonction sont des arguments (surlignés en vert).

Voici quelques exemples.

Exemple 1

def print_list(input_list):
    for each in input_list:
        print(f'{each}')
    print() #just to separate output
greek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob']
grocery_list = ['Apples' , 'Milk' , 'Bread']
print_list(greek_gods)
print_list(grocery_list)
print_list(['a' , 'b' , 'c'])



Au lieu d'écrire le cycle trois fois, je l'écrirai une fois dans la procédure et l'appellerai quand j'en aurai besoin. Et dans le deuxième exemple, vous pouvez voir comment la fonction renvoie une liste inversée.

Exemple 2

def reverse_list(list_input):
    return list_input[::-1]
my_list = ['a', 'b' , 'c']
print (reverse_list(my_list))
>>> ['c', 'b', 'a']

Programmation orientée objet


Python est un langage orienté objet, et il y a beaucoup de puissance dans les objets. Considérez un objet comme un dessin - si vous utilisez un dessin, vous en créez une occurrence. Ainsi, vous pouvez créer autant d'instances que vous le souhaitez et ne rien gâcher dans le dessin d'origine lorsque vous les utilisez.

La programmation orientée objet (POO) est un sujet énorme, donc cette section ne contient pas tout ce que vous devez savoir à ce sujet, mais nous parlerons de quelques exemples simples qui vous aideront dans votre travail.

Si vous avez déjà entendu parler de la POO, vous êtes probablement fatigué d'étudier, mais le voici à nouveau. Commençons par définir une classe Student. Il aura un nom ( name) et une liste de disciplines ( subject_list):

class Student():
    def __init__(self,name):
        self._name = name
        self._subject_list = []

Voici __init__le constructeur de la classe. Il définit le noyau de la classe. Plus tard, vous verrez comment les méthodes sont ajoutées. Les méthodes sont des procédures ou des fonctions appartenant à une classe qui peuvent être appelées lors de l'utilisation de la classe à l'intérieur du programme.
Si vous souhaitez créer un étudiant, vous allez créer la variable suivante:

student1 = Student('Martin Aaberge')

Si vous avez besoin de plus d'élèves, vous utiliserez la même classe et créerez un nouvel objet.

student2 = Student('Ninja Henderson')

Et student1, et student2seront des instances de la classe Student. Ils ont le même schéma, mais ils n'ont plus rien en commun. Pour le moment, nous pouvons faire peu avec les étudiants, mais nous avons ajouté une liste de disciplines. Pour remplir cette liste, nous allons créer une méthode distincte. Vous pouvez appeler des méthodes pour interagir avec les instances de classe.

Mettons à jour la classe:

class Student():
    def __init__(self,name):
        self._name = name
        self._subject_list = []
    def add_subject(self, subject_name):
        self._subject_list.append(subject_name)
    def get_student_data(self):
        print (f'Student: {self._name} is assigned to:')
        for subject in self._subject_list:
            print (f'{subject}')
        print()

Maintenant, cette classe peut être utilisée pour créer des étudiants, modifier et obtenir des informations à leur sujet.

#create students:
student1 = Student('Martin Aaberge')
student2 = Student('Heidi Hummelvold')
#add subjects to student1
student1.add_subject('psychology_101')
student1.add_subject('it_security_101')
#add subject to student2
student2.add_subject('leadership_101')
#print current data on students
student1.get_student_data()
student2.get_student_data()

En règle générale, les classes sont stockées dans des fichiers séparés et importées dans le code. Dans notre exemple, nous avons créé une classe Studentdans un fichier student.pyet l'avons importée dans notre fichier main.py. (Dans ce cas, les deux fichiers se trouvent dans le même dossier).

from student import Student
student1 = Student('Martin')
student1.add_subject('biomechanics_2020')
student1.get_student_data()



Respect pep


Vous pouvez souvent voir des gens écrire du code Python et ne pas penser du tout à PEP. Peut-être que je le fais moi-même parfois.Lorsque vous travaillez dans un environnement de développement, il est très important de suivre les normes, sinon les normes PEP, du moins les normes de votre entreprise.

PEP est un ensemble de recommandations pour votre code. Voici le lien vers PEP-8 . Bonne lecture. Lisez-le au moins une fois pour comprendre de quoi il s'agit. Voici un exemple classique snake_case. Les variables en Python sont écrites dans snake_case, c'est-à-dire que les mots dans le nom de la variable sont séparés en utilisant des traits de soulignement. Même dans les universités, ils apprennent parfois de manière incorrecte, alors ne vous découragez pas et commencez simplement à écrire selon les règles.

C'est vrai:

chocolate_cake = 'yummy'

Et le voici - non:

chocolateCake = 'Yummy'

Conclusion


Être novice est incroyable. Votre chemin ne sera pas facile, mais votre courbe d'apprentissage sera raide et vous donnera une nouvelle expérience! Arrêter d'être un débutant peut être difficile. Parfois, il est difficile de comprendre sur quoi vous devez vous concentrer. Quelle sera la prochaine étape?

Peut-être que cet article vous poussera dans la bonne direction, ou peut-être pour vous, ce n'était qu'un tas de bavardages aléatoires que vous connaissez déjà. Si vous ne savez pas où aller ensuite, n'hésitez pas à demander. Assurez-vous de suivre les conseils de ceux qui sont plus expérimentés que vous. Soyez ouvert à différentes opinions et découvrez ce qui vous convient. Si vous n'êtes pas prêt à utiliser certaines façons d'écrire du code, écrivez d'une manière qui vous convient jusqu'à ce que vous en appreniez de nouvelles et meilleures.

Sources:

[1] Numéro XY, en.wikipedia.org/wiki/XY_problem



Leçon gratuite: Introduction aux tests automatiques



All Articles