Número máximo de violações do PEP8 em uma única linha

17

Sua tarefa é escrever um arquivo que contenha uma linha com muitas violações do pep8 .

As regras:

  • Usamos o pep8 versão 1.5.7 e as configurações padrão.
  • Chamar pep8 com outras opções de linha de comando ou usar um arquivo rc personalizado não é permitido.
  • Comprimento máximo da linha 120 caracteres. Você pode violar o E501, com certeza, mas a linha na qual sua pontuação é calculada deve ser <= 120 caracteres.
  • Seu módulo pode ter outras linhas antes ou depois, mas apenas uma linha contribui para sua pontuação.
  • Seu arquivo pode conter SyntaxErrors ou qualquer tipo de lixo, não precisa importar ou executar.

Exemplo de pontuação:

O módulo a seguir thing.pytem uma pontuação 2, porque contém uma linha (linha 1) com 2 violações do pep8.

 spam='potato'

Para verificar uma pontuação:

~$ 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
fonte
2
Esse é um desafio específico para o idioma? Porque nós realmente não gostamos disso.
21415 John Dvorak
Eu acho que não é realmente específico da linguagem (porque o arquivo pode conter qualquer lixo), mas obviamente as pessoas familiarizadas com a codificação python terão alguma vantagem
wim

Respostas:

11

241

se você quiser mais erros, enlouqueça com ponto e vírgula

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

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

a maioria dos erros são:

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

com aqueles erros no final:

test.py:1:120: E703 statement ends with a semicolon
test.py:1:121: W292 no newline at end of file
freeforall tousez
fonte
O @wim não pôde responder à sua postagem, então eu apenas a coloquei aqui. você estava certo sobre a vantagem, i será surpresa se alguém descobrir alguma coisa que causa mais erro, então o que eu postei acima
freeforall tousez
Eu acho que você é um ponto e vírgula curto. wc conta a nova linha à direita, mas não contamos isso para a contagem de caracteres neste site. Como você pode ver na sua citação de código, seu último caractere é # 119. Você deve obter 240, 2 para cada ponto e vírgula, exceto o último, 1 para a linha excessivamente longa e 1 para terminar com um ponto e vírgula.
Isaacg
@isaacg ah, você está certo, eu pensei que era estranho que ficou menos erros do que o número de caráter * 2, eu responsabilizo gedit para adicionar a nova linha invisível: P
freeforall tousez
haha, meio barato .. mas eficaz! 1
wim
7

123

Sim, mais violações que personagens!

$ 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

O truque é que um =após um (faz com que o pep pense que você está fazendo uma palavra-chave em uma chamada de função (por exemplo foo(bar=12)). Nesse contexto, fazer [TAB]=dispara ambos

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

E fazer =[TAB]dispara ambos

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

Felizmente, você pode simplesmente encadeá-los.

Isso fornece uma contagem de violações de uma por personagem. Preciso (configurá-lo, mas não fornecer o que )nos fornece:

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

Isso é 120. Nenhuma nova linha = 121. Ele conseguiu acionar o erro "linha muito longa", então isso é 122. Finalmente, usar um caractere para começar com um espaço (obrigado eric_lagergren ) causa 2 violações em vez de 1:

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

Vitória!

Claudiu
fonte
Adicione um espaço em branco à esquerda e remova o último ze você terminará com 103 ... mas sempre que copio esse código, recebo 83 em vez de 102. Acho que o espaçamento está ficando confuso.
Eric Lagergren
@eric_lagergren: Estou usando guias em vez de espaços e acho que eles não estão copiando corretamente. Vai colar, eu acho!
Claudiu