한 줄에 최대 PEP8 위반 수


17

당신의 임무는 많은 pep8 위반 이있는 줄을 포함하는 파일을 작성하는 것 입니다.

규칙:

  • 우리는 pep8 버전 1.5.7과 기본 설정을 사용합니다.
  • 다른 명령 행 옵션으로 pep8을 호출하거나 사용자 정의 rc 파일을 사용할 수 없습니다.
  • 최대 줄 길이는 120 자입니다. 물론 E501을 위반할 수는 있지만 점수가 계산되는 줄은 <= 120 자 여야합니다.
  • 모듈은 앞뒤에 다른 줄을 가질 수 있지만 한 줄만 점수에 기여합니다.
  • 파일에 SyntaxErrors 또는 모든 종류의 가비지가 포함될 수 있으며 가져 오거나 실행할 필요가 없습니다.

채점의 예 :

다음 모듈 thing.py은 2 개의 pep8 위반이있는 행 (1 행)을 포함하므로 2 점입니다.

 spam='potato'

점수를 확인하려면

~$ 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
이것이 언어 별 도전입니까? 우리는 이것들을 정말로 좋아하지 않기 때문입니다.
John Dvorak

나는 정말 언어 별 (파일이 어떤 쓰레기를 포함 할 수 있으므로)하지만 분명히 파이썬은 몇 가지 장점이있을 것이다 코딩에 익숙한 사람이 아니다 추측
WIM

답변:


11

241

가장 많은 오류를 원한다면 세미콜론으로 미치십시오.

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

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

대부분의 오류는 다음과 같습니다.

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

끝에 오류가 있습니다.

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

@wim이 게시물에 답장을 보내지 않아서 여기에 넣었습니다. 당신은 내가 놀랄 일이 바로 이점에 대해 마치 사람의 그림 이상의 오류 원인 내가 위의 게시 된 다음 어떤 것이 다른 것 밖으로
freeforall tousez

나는 당신이 세미콜론 부족이라고 생각합니다. wc는 후행 줄 바꿈을 계산하지만이 사이트의 문자 수는 계산하지 않습니다. 코드 인용에서 알 수 있듯이 마지막 문자는 # 119입니다. 마지막 세미콜론을 제외하고 각 세미콜론마다 240, 2, 지나치게 긴 줄은 1, 세미콜론으로 끝나는 1을 얻게됩니다.
isaacg

P : 아 @isaacg, 당신은 바로, 내가, 내가 보이지 않는 줄 바꿈을 추가 gedit를 비난은 문자 * 2의 수보다 적은 오류를받은 것으로는 이상한 생각된다
freeforall tousez

하하, 싸구려의 .. 그러나 효과적! +1
wim

7

123

예, 캐릭터보다 더 많은 위반!

$ 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

트릭은 =after (pep가 함수 호출에서 키워드를 수행한다고 생각 한다는 것입니다 (예 :) foo(bar=12). 이러한 맥락에서 [TAB]=트리거를 수행 하면

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

그리고 =[TAB] 트리거를 모두

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

유쾌하게, 당신은 이것들을 묶을 수 있습니다.

이는 문자 당 하나의 위반 수를 제공합니다. 나는 (그것을 설정 해야 하지만 제공하지는 않습니다 ).

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

120입니다. 줄 바꿈 = 121이 아닙니다. "줄이 너무 깁니다"오류가 발생하여 122입니다. 마지막으로 한 문자를 사용하여 공백으로 시작하면 ( eric_lagergren 덕분에 ) 1 대신 2 개의 위반이 발생합니다.

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

승리!


선행 공백을 추가하고 마지막을 제거하면 z103으로 끝날 것입니다 ...하지만이 코드를 복사 할 때마다 102 대신 83이됩니다. 간격이 엉망이라고 생각합니다.
Eric Lagergren

@eric_lagergren : 공백 대신 탭을 사용하고 있으며 제대로 복사되지 않는 것 같습니다. 내가 추측하는 pastebin 것입니다!
Claudiu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.