Maximale Anzahl von PEP8-Verstößen in einer einzelnen Zeile


17

Ihre Aufgabe ist es, eine Datei zu schreiben, die eine Zeile mit vielen pep8-Verstößen enthält .

Die Regeln:

  • Wir verwenden pep8 Version 1.5.7 und die Standardeinstellungen.
  • Das Aufrufen von pep8 mit anderen Befehlszeilenoptionen oder die Verwendung einer benutzerdefinierten RC-Datei ist nicht zulässig.
  • Maximale Zeilenlänge 120 Zeichen. Sie können zwar gegen E501 verstoßen, aber die Zeile, auf der Ihre Punktzahl berechnet wird, muss <= 120 Zeichen lang sein.
  • Ihr Modul kann vorher oder nachher andere Zeilen haben, aber nur eine Zeile trägt zu Ihrer Punktzahl bei.
  • Ihre Datei kann SyntaxErrors oder andere Arten von Datenmüll enthalten, sie muss nicht importiert oder ausgeführt werden.

Beispiel für die Wertung:

Das folgende Modul thing.pyhat eine Punktzahl von 2, da es eine Zeile (Zeile 1) mit 2 pep8-Verstößen enthält.

 spam='potato'

So überprüfen Sie eine Punktzahl:

~$ mktmpenv 
(tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ pip install pep8==1.5.7
(tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ echo -n "spam='potato'" > thing.py
(tmp-ae3045bd2f629a8c)~/.virtualenvs/tmp-ae3045bd2f629a8c$ pep8 thing.py 
thing.py:1:5: E225 missing whitespace around operator
thing.py:1:14: W292 no newline at end of file

2
Ist das eine sprachspezifische Herausforderung? Weil wir diese nicht wirklich mögen.
John Dvorak

Ich denke, es ist nicht wirklich sprachspezifisch (weil die Datei irgendeinen Müll enthalten kann), aber offensichtlich werden Leute, die mit Python-Codierung vertraut sind, einige Vorteile haben
wim

Antworten:


11

241

Wenn Sie die meisten Fehler haben möchten, setzen Sie einfach Semikolon ein

$ cat test.py
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

Die meisten Fehler sind:

test.py:1:119: E231 missing whitespace after ';'
test.py:1:119: E702 multiple statements on one line (semicolon)

mit diesen Fehlern am Ende:

test.py:1:120: E703 statement ends with a semicolon
test.py:1:121: W292 no newline at end of file

@wim konnte nicht auf Ihren Beitrag antworten, also habe ich ihn einfach hier abgelegt. Sie hatten Recht mit dem Vorteil, ich
bin

Ich denke, Sie sind ein Semikolon-Short. wc zählt den abschließenden Zeilenumbruch, aber das wird für die Anzahl der Zeichen auf dieser Site nicht gezählt. Wie Sie in Ihrem Code-Zitat sehen können, ist Ihr letztes Zeichen # 119. Sie sollten 240, 2 für jedes Semikolon außer dem letzten, 1 für die zu lange Zeile und 1 für das Ende mit einem Semikolon erhalten.
isaacg

@isaacg ah, du hast recht, ich dachte , es war seltsam , dass es weniger Fehler gemacht als Anzahl von Zeichen * 2, i gedit die Schuld für das Hinzufügen der unsichtbaren Newline: P
freeforall tousez

haha, irgendwie billig .. aber effektiv! +1
Mittwoch,

7

123

Ja, mehr Verstöße als Charaktere!

$ curl -s http://pastebin.com/raw.php?i=RwLJfa0Q | cat
 (  =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
$ curl -s http://pastebin.com/raw.php?i=RwLJfa0Q | wc -m
 120
$ curl -s http://pastebin.com/raw.php?i=RwLJfa0Q | pep8 - | wc -l
 123

Der Trick ist, dass =nach einem (pep den Eindruck erweckt, Sie würden ein Schlüsselwort in einem Funktionsaufruf ausführen (z foo(bar=12). B. ). In diesem Zusammenhang [TAB]=löst das Tun beides aus

killpep.py:1:3: E223 tab before operator
killpep.py:1:3: E251 unexpected spaces around keyword / parameter equals

Und das =[TAB]löst beides aus

killpep.py:1:5: E224 tab after operator
killpep.py:1:5: E251 unexpected spaces around keyword / parameter equals

Zum Glück können Sie diese einfach verketten.

Dies ergibt eine Anzahl von 1 Verstößen pro Zeichen. Ich muss (es einrichten, aber nicht die )gibt uns:

killpep.py:2:1: E901 TokenError: EOF in multi-line statement

Das sind 120. Keine neue Zeile = 121. Es ist gelungen, den Fehler "Zeile zu lang" auszulösen, also 122. Wenn Sie ein Zeichen mit einem Leerzeichen beginnen (danke eric_lagergren ), erhalten Sie 2 Verstöße anstelle von 1:

killpep.py:1:2: E111 indentation is not a multiple of four
killpep.py:1:2: E113 unexpected indentation

Sieg!


Fügen Sie ein führendes Leerzeichen hinzu und entfernen Sie das letzte zund Sie erhalten 103 ... aber wenn ich diesen Code kopiere, erhalte ich 83 statt 102. Ich denke, der Abstand wird durcheinander.
Eric Lagergren

@eric_lagergren: Ich verwende Tabulatoren anstelle von Leerzeichen und denke, sie werden nicht richtig kopiert. Ich denke, ich werde es Pastebin!
Claudiu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.