Số lượng vi phạm PEP8 tối đa trong một dòng


17

Nhiệm vụ của bạn là viết một tệp chứa một dòng có nhiều vi phạm pep8 .

Những quy định:

  • Chúng tôi sử dụng pep8 phiên bản 1.5.7 và các cài đặt mặc định.
  • Gọi pep8 với các tùy chọn dòng lệnh khác hoặc sử dụng tệp RC tùy chỉnh không được phép.
  • Độ dài dòng tối đa 120 ký tự. Bạn có thể vi phạm E501, chắc chắn, nhưng dòng mà số điểm của bạn được tính phải là <= 120 ký tự.
  • Mô-đun của bạn có thể có các dòng khác trước hoặc sau, nhưng chỉ một dòng đóng góp vào điểm số của bạn.
  • Tệp của bạn có thể chứa SyntaxErrors hoặc bất kỳ loại rác nào, nó không cần nhập hoặc chạy.

Ví dụ về tính điểm:

Mô-đun sau thing.pycó điểm 2, vì nó chứa một dòng (dòng 1) với 2 vi phạm pep8.

 spam='potato'

Để kiểm tra điểm số:

~$ 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
Đây có phải là một ... thách thức ngôn ngữ cụ thể? Bởi vì chúng tôi không thực sự thích những thứ này.
John Dvorak

Tôi đoán nó không thực sự là ngôn ngữ cụ thể (vì tệp có thể chứa bất kỳ rác nào) nhưng rõ ràng những người quen thuộc với mã hóa python sẽ có một số lợi thế
wim

Câu trả lời:


11

241

nếu bạn muốn có nhiều lỗi nhất, hãy phát điên với dấu chấm phẩy

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

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

hầu hết các lỗi là:

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

với những lỗi ở cuối:

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

@wim không thể trả lời bài viết của bạn vì vậy tôi chỉ cần đặt nó ở đây. bạn đã đúng về lợi thế, tôi sẽ ngạc nhiên nếu ai đó phát hiện ra điều gì khác gây ra nhiều lỗi hơn những gì tôi đã đăng ở trên
miễn phí cho tousez

Tôi nghĩ bạn là một dấu chấm phẩy ngắn. wc đếm dòng mới, nhưng chúng tôi không tính số đó cho số ký tự trên trang web này. Như bạn có thể thấy trong trích dẫn mã của mình, ký tự cuối cùng của bạn là # 119. Bạn nên nhận 240, 2 cho mỗi dấu chấm phẩy trừ cái cuối cùng, 1 cho dòng quá dài và 1 cho kết thúc bằng dấu chấm phẩy.
isaacg

@isaacg ah, bạn nói đúng, tôi nghĩ thật kỳ lạ khi nó nhận được ít lỗi hơn số ký tự * 2, tôi đổ lỗi cho gedit vì đã thêm dòng mới vô hình: P
freeforall tousez 17/07/14

haha, loại rẻ tiền .. nhưng hiệu quả! 1
wim

7

123

Vâng, vi phạm nhiều hơn nhân vật!

$ 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

Mẹo nhỏ là =sau khi (làm cho pep nghĩ rằng bạn đang thực hiện một từ khóa trong một cuộc gọi chức năng (ví dụ foo(bar=12)). Trong bối cảnh này, làm [TAB]=kích hoạt cả hai

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

Và làm =[TAB]kích hoạt cả hai

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

Rất vui, bạn chỉ có thể xâu chuỗi những thứ này.

Điều này cho số lượng vi phạm một cho mỗi nhân vật. Tôi cần (phải thiết lập nó, nhưng không cung cấp )cho chúng tôi:

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

Đó là 120. Không có dòng mới = 121. Nó đã quản lý để gây ra lỗi "dòng quá dài", vì vậy đó là 122. Cuối cùng, sử dụng một ký tự để bắt đầu bằng khoảng trắng (cảm ơn eric_lagergren ) đưa ra 2 lỗi thay vì 1:

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

Chiến thắng!


Thêm một khoảng trắng hàng đầu và xóa cái cuối cùng zvà bạn sẽ kết thúc với 103 ... nhưng bất cứ khi nào tôi sao chép mã này, tôi nhận được 83 thay vì 102. Tôi nghĩ rằng khoảng cách đang bị rối tung.
Eric Lagergren

@eric_lagergren: Tôi đang sử dụng các tab thay vì dấu cách và tôi đoán họ không sao chép đúng cách. Tôi đoán nó sẽ qua rồi!
Claudiu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.