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.
Überprüfung des Codeformats. Klicken Sie hier für PyPI.
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!
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.
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.
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.
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
Ich möchte den Test der Fibonacci-Zahlenfunktion schreiben, die ich diesmal in Python geschrieben habe!
Eine falsche Definition der Fibonacci-Sequenz wurde behoben. Vielen Dank für die Anfrage!
Recommended Posts