Bonjour et merci d'avoir pris le temps de cliquer sur mon topic et de lire ce qui suit.
Je suis débutant dans le monde la programmation python (ca fait 48 heures que je m'y suis mis), et plus généralement à peu près débutant dans la programmation.
A la tete d'un MMO multijoueur basé sur le jeu vidéo GTA San Andreas, je travaille régulièrement avec mes collègues sur un language informatique, le pawn, un dérivé direct du C (si je ne dis pas de bétises), très puissant mais pas forcément très souple, et je dois dire qu'après 48 heures de découverte de Python, j'en suis sous tombé le charme. Sa syntaxe épurée, son typage dynamique et les quelques spécificités que j'ai touché du bout des doigts pour le moment me donne la trique, veuillez me pardonner pour ce langage cru mais j'ai du mal à trouver d'autres mots et je suis sur que certains d'entre vous ont peut être du ressentir cette meme attraction ! (dans le cas contraire, un petit séjour en HP ne me fera pas de mal).
Je commence à me mettre au contact de ce langage en suivant l'un des livres gratuits disponibles sur ce site d'ailleurs, et je tiens à remercier le ou les contributeurs de ce livre pour leur formidable travail.
Néanmoins, je me sens perdu sur plusieurs points, je ne veux pas partir sur de mauvaises bases, et j'aimerais que vous me donniez vos avis concernant ces points précis, en prenant comme exemple un minuscule script que j'ai codé il y a une heure ou deux pour l'occasion.
Il s'agit d'un script pour calculer le PGCD de deux nombres (sachez qu'à l'heure actuelle je n'en suis qu'en début d'apprentissage et que je ne connais qu'une boucle python, while) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 # -*- coding: utf-8 -*- print("_______________\n_______________\n\n____PGCD____", end ="\n\n\n") saisie1 = input("Tape le premier nombre: ") dividende = int(saisie1) saisie2 = input("Tape le deuxieme nombre: ") diviseur = int(saisie2) if dividende < diviseur: dividende, diviseur = diviseur, dividende reste = 1 while reste != 0: reste = dividende % diviseur if reste == 0: break dividende = diviseur diviseur = reste resultat = diviseur # car la derniere valeur du diviseur à la sortie de la boucle # correspond au dernier reste non nul de la division euclidienne. print("\n\nPGCD des nombres ", saisie1," et ", saisie2,": ", resultat, sep="", end="\n\n")
Questions:
- Ce code est il lisible ? Ai je respecté les règles d'usage en matière de programmation et notamment vis à vis du langage Python et de sa sémantique ? Si non, pourriez vous me dire lesquelles et m'aiguiller afin de l'optimiser dans sa lisibilité.
- Ma logique est elle bonne ?
- Ce code est il optimisable (fausse question, j'imagine qu'il est forcément optimisable). Pourriez vous me donner des indices sur son optimisation.
- Une chose me dérange dans Python. En Pawn (et peut etre en C/C++), il est possible d'écrire sur la meme ligne une condition et l'instruction à effectuer si cette condition est vraie (dans la mesure ou le bloc d'instruction est composé d'une seule instruction évidemment), cela permet d'éviter de sortir deux accolades inutiles, et meme de simplifier certaines opérations conditionnelles, en esquivant un else if ou un else par exemple, c'est très pratique,cela offre un code concis et quand c'est bien codé on ne s'y perd pas.
Exemple :
ou encore
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 new a b c ; if(a == b) a = b + c; else if( a < b) a = b - c; else b = c;
En reprenant un morceau de code de mon script sous python :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ma_fonction(a, b, c) { if(!a == b) return 0; // dans le cas contraire la suite d instructions continue jusqu a la fin de la fonction return 1; }
Est il possible de regrouper sur la meme ligne la condition et l'instruction, afin d'éviter une identation inutile dans ce cas précis (du moins, je la trouve inutile étant donné que le bloc d'instruction est composé d'une seule instruction).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3if dividende < diviseur: dividende, diviseur = diviseur, dividende
- J'ai parlé des return dans ma demonstration ci dessus, les return en python ont il la meme utilité que dans un langage comme le C ? Sont ils utilisés de la meme manière dans une fonction ?
- En Python, doit on toujours affecter une valeur à une variable qu'on vient de déclarer ou puis je retarder l'attribution d'une valeur à la variable nouvellement déclarée?
- Dans mon script Python, si je rentre une valeur de 0 durant la saisie d'un des deux nombres, le script crashera au moment de faire le calcul evidemment. J'ai tenté d'écrire une condition que j'écris régulièrement en Pawn pour faire des comparaison entre des variables de tous types (et pas uniquement booléennes), et ca ne passe pas en Python.
Evidemment ca n'est pas passé en Python donc j'en ai conclus que le symbole "OU" n'est pas "||", j'ai donc tenté "or" et idem ca n'est pas passé. J'en ai conclus que le "or" ne fonctionne que sur des variables de type booléennes. Je me retrouve donc coincé car je n'ai pas envie d'utiliser 2 if à la suite je veux juste faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if a == 0 || b == 0:
SI a = 0 OU b = 0 ALORS
Peut on faire ca en python sur des variables autres que booléennes ?
Merci d'avance pour vos réponses.
Partager