Jumlah maksimum pelanggaran PEP8 dalam satu baris

17

Tugas Anda adalah menulis file yang berisi baris dengan banyak pelanggaran pep8 .

Aturan:

  • Kami menggunakan pep8 versi 1.5.7 dan pengaturan default.
  • Memanggil pep8 dengan opsi baris perintah lainnya atau menggunakan file rc khusus tidak diperbolehkan.
  • Panjang garis maksimum 120 karakter. Anda dapat melanggar E501, tentu saja, tetapi garis di mana skor Anda dihitung harus <= 120 karakter.
  • Modul Anda dapat memiliki baris lain sebelum atau sesudah, tetapi hanya satu baris yang berkontribusi pada skor Anda.
  • File Anda dapat mengandung SyntaxErrors atau segala jenis sampah, tidak perlu diimpor atau dijalankan.

Contoh penilaian:

Modul berikut thing.pymemiliki skor 2, karena berisi garis (baris 1) dengan 2 pelanggaran pep8.

 spam='potato'

Untuk memeriksa skor:

~$ 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
sumber
2
Apakah ini ... tantangan khusus bahasa? Karena kami tidak begitu suka ini.
John Dvorak
Saya kira itu tidak benar-benar spesifik bahasa (karena file tersebut dapat mengandung sampah) tetapi jelas orang yang akrab dengan pengkodean python akan memiliki beberapa keuntungan
wim

Jawaban:

11

241

jika Anda menginginkan kesalahan terbanyak, gila dengan titik koma

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

$ cat test.py | wc -m
120

$ pep8 test.py | wc -l
241

sebagian besar kesalahan adalah:

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

dengan kesalahan tersebut di akhir:

test.py:1:120: E703 statement ends with a semicolon
test.py:1:121: W292 no newline at end of file
freeforall tousez
sumber
@wim tidak bisa membalas posting Anda jadi saya taruh di sini. Anda benar tentang keuntungannya, saya akan terkejut jika seseorang mengetahui sesuatu yang menyebabkan lebih banyak kesalahan daripada yang saya posting di atas
freeforall tousez
Saya pikir Anda adalah titik koma pendek. wc menghitung baris tambahan, tetapi kami tidak menghitungnya untuk jumlah karakter di situs ini. Seperti yang dapat Anda lihat dalam kutipan kode Anda, karakter terakhir Anda adalah # 119. Anda harus mendapatkan 240, 2 untuk setiap titik koma kecuali yang titik koma, 1 untuk garis yang terlalu panjang, dan 1 untuk diakhiri dengan titik koma.
isaacg
@isaacg ah, Anda benar, saya pikir itu aneh bahwa ia mendapat kesalahan kurang dari jumlah karakter * 2, saya menyalahkan gedit karena menambahkan baris baru yang tidak terlihat: P
freeforall tousez
haha, agak murah .. tapi efektif! +1
wim
7

123

Ya, lebih banyak pelanggaran daripada karakter!

$ 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

Triknya adalah =setelah (membuat orang berpikir Anda melakukan kata kunci dalam panggilan fungsi (mis foo(bar=12).). Dalam konteks ini, melakukan [TAB]=memicu keduanya

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

Dan melakukan =[TAB]memicu keduanya

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

Cukup gembira, Anda hanya bisa rantai ini.

Ini memberikan jumlah pelanggaran satu per karakter. Saya perlu (mengaturnya, tetapi tidak memberikan )memberi kami:

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

Itu 120. Tidak ada baris baru = 121. Ia berhasil memicu kesalahan "garis terlalu panjang", jadi itu 122. Akhirnya, menggunakan satu karakter untuk memulai dengan spasi (terima kasih eric_lagergren ) memberikan 2 pelanggaran bukannya 1:

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

Kemenangan!

Claudiu
sumber
Tambahkan spasi putih terkemuka dan hapus yang terakhir zdan Anda akan berakhir dengan 103 ... tetapi setiap kali saya menyalin kode ini saya mendapatkan 83 bukannya 102. Saya pikir spasi semakin kacau.
Eric Lagergren
@ eric_lagergren: Saya menggunakan tab alih-alih spasi dan saya kira mereka tidak menyalin dengan benar. Akan pastebin, kurasa!
Claudiu