จำนวนสูงสุดของการละเมิด PEP8 ในบรรทัดเดียว


17

งานของคุณคือการเขียนไฟล์ที่มีเส้นกับหลาย ๆ ที่ละเมิด pep8

กฎระเบียบ:

  • เราใช้ pep8 เวอร์ชั่น 1.5.7 และการตั้งค่าเริ่มต้น
  • การเรียก pep8 ด้วยตัวเลือกบรรทัดคำสั่งอื่น ๆ หรือการใช้ไฟล์ rc แบบกำหนดเองไม่ได้รับอนุญาต
  • ความยาวบรรทัดสูงสุด 120 อักขระ คุณสามารถละเมิด E501 ได้ แต่บรรทัดที่คำนวณคะแนนของคุณจะต้อง <= 120 ตัวอักษร
  • โมดูลของคุณสามารถมีบรรทัดอื่นก่อนหรือหลัง แต่มีเพียงหนึ่งบรรทัดเท่านั้นที่มีส่วนช่วยให้คะแนนของคุณ
  • ไฟล์ของคุณสามารถมี SyntaxErrors หรือขยะทุกชนิดไม่จำเป็นต้องนำเข้าหรือเรียกใช้

ตัวอย่างการให้คะแนน:

โมดูลต่อไปนี้thing.pyมีคะแนน 2 เนื่องจากมีบรรทัด (บรรทัด 1) ที่มีการละเมิด 2 pep8

 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

ฉันเดาว่ามันไม่ใช่ภาษาที่เฉพาะเจาะจงจริงๆ (เพราะไฟล์สามารถมีขยะใด ๆ ) แต่เห็นได้ชัดว่าคนที่คุ้นเคยกับการเขียนโค้ดไพ ธ อนจะมีข้อได้เปรียบ
15896

คำตอบ:


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

@isaacg อาคุณพูดถูกฉันคิดว่ามันแปลกที่มันผิดพลาดน้อยกว่าจำนวนตัวอักษร * 2 ฉันโทษ gedit ที่เพิ่มบรรทัดใหม่ที่มองไม่เห็น: P
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

เคล็ดลับคือคำ=สั่งที่(ทำให้คุณคิดว่าคุณกำลังใช้คำสำคัญในการเรียกฟังก์ชัน (เช่น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 ) ให้การละเมิด 2 ครั้งแทนที่จะเป็น 1:

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

ชัยชนะ!


เพิ่มช่องว่างนำหน้าและลบอันสุดท้ายzแล้วคุณจะจบด้วย 103 ... แต่เมื่อใดก็ตามที่ฉันคัดลอกรหัสนี้ฉันจะได้รับ 83 แทน 102 ฉันคิดว่าระยะห่างจะยุ่งเหยิง
Eric Lagergren

@eric_lagergren: ฉันใช้แท็บแทนการเว้นวรรคและฉันเดาว่าพวกเขากำลังคัดลอกไม่ถูกต้อง ฉันจะวางมันลงถังขยะ!
Claudiu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.