Je veux écrire en Python! (1) Vérification du format de code

Ravi de vous rencontrer. Voici leo1109, un ingénieur. Puisque c'est mon premier article, j'écrirai sur Python, que j'ai touché récemment.

Tout le code utilisé dans l'article a été téléchargé sur GitHub.

L'histoire à présenter cette fois

Vérification du format du code. Cliquez ici pour PyPI.

Je veux écrire du code en Python!

Aujourd'hui, je souhaite écrire un programme en Python pour obtenir le numéro de Fibonacci! Alors je vais l'écrire. Le nombre de Fibonacci est une séquence dans laquelle les termes de la séquence sont la somme des termes un avant et deux avant.

Exprimé dans une formule mathématique, il se présente comme suit.

n > 0, n is unsigned Int.
n = 1: F(1) = 1
n = 2: F(2) = 1
n > 2: F(n) = F(n-1) + F(n-2)

Écrivons-le immédiatement. Nous devons conserver la valeur précédente, donc implémentons-la en utilisant un tableau.

# python 3.5.2

def get_fibonacci_by_index(index):
    if index in [1 ,2]:
        return 1
    fibs =  [1, 1]

    for i in range(3, index + 1):
        c = fibs[i - 2] + fibs[i-3]
        fibs.append(c)

    return fibs[-1]

C'est fait!

Vérifions le fonctionnement

Je vais vérifier si cela fonctionne correctement.

Python 3.5.2 (default, Dec 19 2016, 00:08:16)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import my_math
>>> x=[]
>>> for i in range(1, 11):
...     x.append(my_math.get_fibonacci_by_index(i))
...
>>> x
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

Cela semble fonctionner correctement.

--Référence: https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83% 81% E6% 95% B0

je suis curieux

Cependant, il y a quelques subtilités dans ce code. Par exemple, le suivant. Eh bien, je suis curieux.

def get_fibonacci_by_index(index):
    if index in [1,2]:
        return 1
    fibs =  [1, 1]  #Deux espaces après égal?
...
        c = fibs[i - 2] + fibs[i-3]  # i-2 et i-3 n'est pas unifié

Python a une convention de codage appelée PEP8.

Bien sûr, il est bon d'écrire en fonction de cela, mais il est difficile d'écrire en vérifiant si cela est suivi à chaque fois. Il est également très inefficace de faire en sorte que plusieurs personnes développent et écrivent différemment pour une seule personne et se trompent. C'est là que l'outil de vérification de code flake8 entre en jeu. Je laisserai l'explication détaillée à d'autres articles, mais utilisons-la réellement.

$ flake8 my_math_before.py
my_math_before.py:3:1: E302 expected 2 blank lines, found 1
my_math_before.py:4:19: E231 missing whitespace after ','
my_math_before.py:6:11: E222 multiple spaces after operator

Gununu. J'étais faché. Je dis généralement ce qui suit.

Réparons

C'est facile à réparer car il a le nombre de lignes et la raison.

Le diff ressemble à ceci.

3d2
< 
7,8c6
< 
<     fibs = [1, 1]
---
>     fibs =  [1, 1]
11c9
<         c = fibs[i-2] + fibs[i-3]
---
>         c = fibs[i - 2] + fibs[i-3]

Voici après la correction.

# python 3.5.2


def get_fibonacci_by_index(index):
    if index in [1, 2]:
        return 1

    fibs = [1, 1]

    for i in range(3, index + 1):
        c = fibs[i-2] + fibs[i-3]
        fibs.append(c)

    return fibs[-1]

Essayons à nouveau flake8. Si vous spécifiez un nom de fichier, vous ne pouvez vérifier que le fichier cible. Si vous ne le spécifiez pas, il semble qu'il cherchera récursivement sous le répertoire exécuté.

$ flake8 my_math.py

Rien n'a été affiché! c'est pratique. En l'incorporant dans les tâches de construction Jenkins, etc., il semble que non seulement la logique, mais aussi l'uniformité du code peuvent être garanties.

Résumé

La vérification fréquente du code améliore la visibilité et réduit les risques d'incorporation de bogues. J'ai omis une introduction détaillée, mais elle vous informera des erreurs ainsi que des formats.

# a.py
x = 2
x = z + 3
x = 5
 if x == 5:
  y = 5

$ flake8 a.py
a.py:5:1: E999 IndentationError: unexpected indent
a.py:5:2: E111 indentation is not a multiple of four
a.py:5:2: E113 unexpected indentation
a.py:6:3: E111 indentation is not a multiple of four

la prochaine fois

Je veux écrire le test de la fonction de nombre de Fibonacci que j'ai écrit cette fois en Python!

Postscript

Correction d'une définition incorrecte de la séquence de Fibonacci. Merci pour la demande!

Recommended Posts

Je veux écrire en Python! (1) Vérification du format de code
Je veux écrire en Python! (2) Écrivons un test
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux formater et vérifier le code Python à mon goût sur VS Code
Je veux pouvoir exécuter Python avec VS Code
J'ai écrit le code pour écrire le code Brainf * ck en python
Je veux faire le test de Dunnett en Python
Je veux créer une fenêtre avec Python
Je veux fusionner des dictionnaires imbriqués en Python
Je veux créer du code C ++ à partir de code Python!
Je veux écrire dans un fichier avec Python
Je veux afficher la progression en Python!
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Même avec JavaScript, je veux voir Python `range ()`!
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
Écrire des tests en Python pour profiler et vérifier la couverture
Je veux utiliser le jeu de données R avec python
Je veux faire quelque chose avec Python à la fin
Je veux manipuler des chaînes dans Kotlin comme Python!
Formater automatiquement le code Python avec Vim
Ecrire le code de test du sélénium en python
Je veux déboguer avec Python
Je veux faire quelque chose comme sort uniq en Python
Je veux ajouter un joli complément à input () en python
Je ne voulais pas écrire la clé AWS dans le programme
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
Je veux imprimer dans la notation d'inclusion
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
J'ai essayé d'implémenter PLSA dans Python 2
Je veux utiliser jar de python
Je veux créer un environnement Python
Je veux analyser les journaux avec Python
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
Je veux jouer avec aws avec python
Comment vérifier la version d'opencv avec python
[Couches Python / AWS Lambda] Je souhaite réutiliser uniquement le module dans AWS Lambda Layers
J'ai essayé d'implémenter ADALINE en Python
Je voulais résoudre ABC159 avec Python
J'ai essayé d'implémenter PPO en Python
format en python
Je veux intégrer Matplotlib dans PySimpleGUI
Comment écrire Ruby to_s en Python
J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python
Je souhaite convertir une table convertie en PDF en Python en CSV
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Maintenance de l'environnement réalisée avec Docker (je souhaite post-traiter GrADS en Python
Je veux colorer une partie de la chaîne Excel avec Python
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Je veux faire un patch monkey seulement en partie en toute sécurité avec Python
Je veux utiliser MATLAB feval avec python
Je veux corriger Datetime.now dans le test de Django
Je veux mémoriser, y compris les arguments de mots clés de Python
Python: j'ai pu récurer en lambda