Ich möchte in Python schreiben! (1) Überprüfung des Codeformats

Freut mich, dich kennenzulernen. Dies ist leo1109, ein Ingenieur. Da dies mein erster Beitrag ist, werde ich über Python schreiben, das ich kürzlich berührt habe.

Der gesamte im Artikel verwendete Code wurde auf GitHub hochgeladen.

Die Geschichte, die diesmal vorgestellt werden soll

Überprüfung des Codeformats. Klicken Sie hier für PyPI.

Ich möchte Code in Python schreiben!

Heute möchte ich ein Programm in Python schreiben, um die Fibonacci-Nummer zu erhalten! Also werde ich es schreiben. Die Fibonacci-Zahl ist eine Folge, bei der die Begriffe in der Folge die Summe der Begriffe eins vor und zwei vor sind.

In einer mathematischen Formel ausgedrückt sieht es wie folgt aus.

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)

Lass es uns sofort schreiben. Wir müssen den vorherigen Wert beibehalten, also implementieren wir ihn mithilfe eines Arrays.

# 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]

Es ist fertig!

Lassen Sie uns die Operation überprüfen

Ich werde überprüfen, ob es richtig funktioniert.

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]

Es scheint richtig zu funktionieren.

ich bin neugierig

Dieser Code weist jedoch einige Feinheiten auf. Zum Beispiel das Folgende. Nun, ich bin neugierig.

def get_fibonacci_by_index(index):
    if index in [1,2]:
        return 1
    fibs =  [1, 1]  #Zwei Leerzeichen nach gleich?
...
        c = fibs[i - 2] + fibs[i-3]  # i-2 und ich-3 ist nicht einheitlich

Python hat eine Codierungskonvention namens PEP8.

Natürlich ist es gut, danach zu schreiben, aber es ist schwierig zu schreiben, während überprüft wird, ob dies jedes Mal befolgt wird. Es ist auch sehr ineffizient, wenn mehrere Personen für eine Person unterschiedlich entwickeln und schreiben und es vermasseln. Hier kommt das Code-Check-Tool flake8 ins Spiel. Ich werde die ausführliche Erklärung anderen Artikeln überlassen, aber lassen Sie uns sie tatsächlich verwenden.

$ 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. Ich war sauer. Ich sage im Allgemeinen Folgendes.

Lassen Sie uns beheben

Es ist einfach zu beheben, da es die Anzahl der Zeilen und den Grund hat.

Der Diff sieht so aus.

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

Hier ist nach der Korrektur.

# 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]

Versuchen wir es noch einmal mit flake8. Wenn Sie einen Dateinamen angeben, können Sie nur die Zieldatei überprüfen. Wenn Sie es nicht angeben, wird es anscheinend rekursiv unter dem ausgeführten Verzeichnis angezeigt.

$ flake8 my_math.py

Es wurde nichts angezeigt! das ist bequem. Durch die Einbindung in Jenkins Build-Jobs usw. scheint nicht nur die Logik, sondern auch die Code-Einheitlichkeit gewährleistet zu sein.

Zusammenfassung

Häufige Codeüberprüfungen verbessern die Sichtbarkeit und verringern die Wahrscheinlichkeit, dass Fehler eingebettet werden. Ich habe eine ausführliche Einführung weggelassen, aber Sie werden sowohl über Fehler als auch über Formate informiert.

# 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

nächstes Mal

Ich möchte den Test der Fibonacci-Zahlenfunktion schreiben, die ich diesmal in Python geschrieben habe!

Nachtrag

Eine falsche Definition der Fibonacci-Sequenz wurde behoben. Vielen Dank für die Anfrage!

Recommended Posts

Ich möchte in Python schreiben! (1) Überprüfung des Codeformats
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Ich möchte Python-Code auf VS-Code nach meinen Wünschen formatieren und überprüfen
Ich möchte Python mit VS-Code ausführen können
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
Ich möchte Dunnetts Test in Python machen
Ich möchte mit Python ein Fenster erstellen
Ich möchte verschachtelte Dicts in Python zusammenführen
Ich möchte C ++ - Code aus Python-Code erstellen!
Ich möchte mit Python in eine Datei schreiben
Ich möchte den Fortschritt in Python anzeigen!
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Auch mit JavaScript möchte ich Python `range ()` sehen!
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
Schreiben Sie Tests in Python, um die Abdeckung zu profilieren und zu überprüfen
Ich möchte R-Datensatz mit Python verwenden
Ich möchte am Ende etwas mit Python machen
Ich möchte Strings in Kotlin wie Python manipulieren!
Formatieren Sie Python-Code automatisch mit Vim
Schreiben Sie Selentestcode in Python
Ich möchte mit Python debuggen
Ich möchte so etwas wie Uniq in Python sortieren
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
Ich wollte den AWS-Schlüssel nicht in das Programm schreiben
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich möchte in der Einschlussnotation drucken
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich möchte ein Glas aus Python verwenden
Ich möchte eine Python-Umgebung erstellen
Ich möchte Protokolle mit Python analysieren
LINEbot-Entwicklung möchte ich den Betrieb in der lokalen Umgebung überprüfen
Ich möchte mit aws mit Python spielen
So überprüfen Sie die Version von opencv mit Python
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
Ich habe versucht, ADALINE in Python zu implementieren
Ich wollte ABC159 mit Python lösen
Ich habe versucht, PPO in Python zu implementieren
Format in Python
Ich möchte Matplotlib in PySimpleGUI einbetten
Wie schreibe ich Ruby to_s in Python
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
Ich möchte eine in Python in PDF konvertierte Tabelle wieder in CSV konvertieren
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
Mit Docker durchgeführte Umgebungswartung (Ich möchte GrADS in Python nachbearbeiten
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Ich habe ein Skript in Python erstellt, um MDD-Dateien in das Scrapbox-Format zu konvertieren
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich möchte Affenpatches nur teilweise sicher mit Python machen
Ich möchte MATLAB feval mit Python verwenden
Ich möchte Datetime.now in Djangos Test reparieren
Ich möchte mich mit Schlüsselwortargumenten von Python merken
Python: Ich konnte in Lambda rekursieren