Nombre maximal de violations PEP8 sur une seule ligne

17

Votre tâche consiste à écrire un fichier contenant une ligne contenant de nombreuses violations de pep8 .

Les règles:

  • Nous utilisons pep8 version 1.5.7 et les paramètres par défaut.
  • Appeler pep8 avec d'autres options de ligne de commande ou utiliser un fichier rc personnalisé n'est pas autorisé.
  • Longueur de ligne maximale 120 caractères. Vous pouvez violer E501, bien sûr, mais la ligne sur laquelle votre score est calculé doit être <= 120 caractères.
  • Votre module peut avoir d'autres lignes avant ou après, mais une seule ligne contribue à votre score.
  • Votre fichier peut contenir des SyntaxErrors ou tout type de déchets, il n'a pas besoin d'être importé ou exécuté.

Exemple de notation:

Le module suivant thing.pya un score de 2, car il contient une ligne (ligne 1) avec 2 violations pep8.

 spam='potato'

Pour vérifier un score:

~$ 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
wim
la source
2
Est-ce un défi spécifique à la langue? Parce que nous n'aimons pas vraiment ça.
John Dvorak
Je suppose que ce n'est pas vraiment spécifique à la langue (parce que le fichier peut contenir des ordures) mais évidemment les gens familiers avec le codage python auront un avantage
wim

Réponses:

11

241

si vous voulez le plus d'erreurs, devenez fou avec le point-virgule

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

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

la plupart des erreurs sont:

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

avec ces erreurs à la fin:

test.py:1:120: E703 statement ends with a semicolon
test.py:1:121: W292 no newline at end of file
freeforall tousez
la source
@wim n'a pas pu répondre à votre message, je viens de le mettre ici. vous aviez raison sur l'avantage, je serais surpris si quelqu'un trouve quelque chose d'autre qui cause plus d'erreurs que ce que j'ai publié ci
freeforall tousez
Je pense que vous êtes un court-virgule. wc compte la nouvelle ligne de fin, mais nous ne comptons pas cela pour le nombre de caractères sur ce site. Comme vous pouvez le voir dans votre citation de code, votre dernier caractère est # 119. Vous devriez obtenir 240, 2 pour chaque point-virgule à l'exception du dernier, 1 pour la ligne trop longue et 1 pour terminer par un point-virgule.
isaacg
@isaacg ah, vous avez raison, je pensais que c'était bizarre d'avoir moins d'erreur que le nombre de caractères * 2, je blâme gedit d'avoir ajouté la nouvelle ligne invisible: P
freeforall tousez
haha, pas cher .. mais efficace! +1
wim
7

123

Oui, plus de violations que de personnages!

$ 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

L'astuce est qu'un =après un (fait croire à Pep que vous faites un mot-clé dans un appel de fonction (par exemple foo(bar=12)). Dans ce contexte, faire [TAB]=déclenche à la fois

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

Et faire =[TAB]déclenche les deux

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

Heureusement, vous pouvez simplement les enchaîner.

Cela donne un nombre de violations d'un par personnage. Je dois (le configurer, mais ne pas nous fournir ):

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

C'est 120. Pas de nouvelle ligne = 121. Il a réussi à déclencher l'erreur "ligne trop longue", donc c'est 122. Enfin, utiliser un caractère pour commencer par un espace (merci eric_lagergren ) donne 2 violations au lieu de 1:

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

La victoire!

Claudiu
la source
Ajoutez un espace de tête et supprimez le dernier zet vous vous retrouverez avec 103 ... mais chaque fois que je copie ce code, j'obtiens 83 au lieu de 102. Je pense que l'espacement est en train d'être foiré.
Eric Lagergren
@eric_lagergren: J'utilise des tabulations au lieu d'espaces et je suppose qu'ils ne copient pas correctement. Va le coller je suppose!
Claudiu