นี่เป็นความท้าทายของการฝึกฝนการเพิ่มประสิทธิภาพของกอล์ฟใน Python ซึ่งเป็นเทคนิคและทางลัดที่นำมาใช้ซ้ำเพื่อกำจัดอักขระบางตัว หลายคนจะคุ้นเคยกับนักกอล์ฟงูหลามและใช้ความคิดร่วมกันจากเคล็ดลับหลาม คุณลักษณะเหล่านี้บางอย่างใช้คุณสมบัติเฉพาะของ Python ที่คุณอาจไม่ทราบว่ามีอยู่เว้นแต่คุณจะเห็นคุณลักษณะเหล่านี้ดังนั้นให้ดูที่เคล็ดลับหากคุณติดขัด
เป้าหมาย: มีปัญหาสิบประการแต่ละตัวอย่างข้อมูลอ้างอิงของรหัส Python เพื่อให้คุณสามารถปรับให้เหมาะสมและคำอธิบายของรหัสจะเกิดขึ้น เป้าหมายของคุณคือเขียนใหม่ให้สั้นลง แต่ยังเทียบเท่ากับการใช้งานได้
คะแนนของคุณซึ่งคุณกำลังพยายามย่อให้เล็กสุดคือความยาวทั้งหมดของโค้ดของคุณตัวอย่างทั้งหมด ความยาวของตัวอย่างข้อมูลอ้างอิงคือ 150 Tiebreaker เป็นโพสต์แรกสุด
การโพสต์คำตอบ:สำหรับแต่ละปัญหาให้โพสต์โค้ดและจำนวนตัวอักษร คุณสามารถโพสต์ข้อมูลอ้างอิงได้หากคุณไม่พบข้อมูลที่สั้นลง คุณตั้งใจจะไม่ดูคำตอบของคนอื่นเมื่อคุณโพสต์ โปรดติดแท็กสปอยเลอร์แต่ละปัญหารวมถึงจำนวนตัวละครแต่ละตัว คุณสามารถออกจากการนับทั้งหมดที่เปิดเผย อย่าลังเลที่จะยกเลิกการแก้ปัญหาของคุณตอนนี้หรือโพสต์โซลูชั่นใหม่ที่ไม่ทำลาย
รายละเอียดเกี่ยวกับความถูกต้องตามกฎหมาย: การทำงานที่เท่าเทียมกันหมายถึงรหัสสามารถถูกแทนที่ในโปรแกรมโดยไม่มีผลกระทบต่อพฤติกรรมของมัน (ไม่สนใจสิ่งต่าง ๆ เช่นการใช้หน่วยความจำและความสำคัญของโอเปอเรเตอร์ ==
การแสดงออกควรผลิตที่มีค่าเทียบเท่าโดย 1.0==1==True
โปรดสังเกตว่า รหัสของคุณไม่ควรมีผลข้างเคียงเว้นแต่จะระบุไว้เป็นอย่างอื่น ฉันไม่ได้ตั้งใจที่จะให้ปัญหาเฉพาะรุ่น แต่ในกรณีที่คุณสามารถระบุรุ่น Python สำหรับแต่ละปัญหา
ปัญหาที่ 1:วนซ้ำอย่างต่อเนื่องตราบใดที่รายการL
มีองค์ประกอบอย่างน้อย 7 รายการ
# 16 chars
while len(L)>=7:
ปัญหาที่ 2 : ตรวจสอบว่าทั้งสองลอยx
และy
ทั้งสองเป็นบวก
# 11 chars
x>0 and y>0
ปัญหา 3 : ถ้าบูลีนเป็นความจริงเอาองค์ประกอบแรกของb
L
มิฉะนั้นปล่อยให้มันไม่เปลี่ยนแปลง
# 12 chars
if b:L=L[1:]
ปัญหาที่ 4 : ตรวจสอบว่าองค์ประกอบทั้งหมดของรายการL
ตัวเลขที่ไม่ว่างเปล่ามีค่าเท่ากันหรือไม่ สำหรับปัญหานี้คุณสามารถแก้ไขรายการได้
# 22 chars
all(x==L[0]for x in L)
ปัญหาที่ 5 : ผนวกหมายเลขn
ต่อท้ายรายการL
เท่านั้นหากL
มีหมายเลขนั้นอยู่แล้ว
# 16 chars
if n in L:L+=[n]
ปัญหาที่ 6 : แสดงสัญลักษณ์ของการลอยx
: +1
สำหรับบวก, 0
สำหรับ 0, -1
สำหรับลบ
# 20 chars
abs(x)/x if x else 0
ปัญหา 7ดำเนินการต่อห่วงตราบเท่าที่องค์ประกอบแรกของL
รายการ Booleans True
เป็น หยุดถ้าL
ว่างเปล่าด้วย
# 17 chars
while L and L[0]:
ปัญหาที่ 8 : วนซ้ำต่อไปตราบใดที่n
มากกว่า 1 จำนวนn
จะได้รับการรับประกันว่าเป็นจำนวนเต็มบวก
# 10 chars
while n>1:
ปัญหาที่ 9 : ตรวจสอบว่าจำนวนเต็มที่แทนด้วยสตริงs
เป็นลบหรือไม่ (เช่นเริ่มต้นด้วย '-')
# 9 chars
s[0]=='-'
ปัญหา 10 : แปลงบูลีนb
ไป"Win"
/ "Lose"
มีTrue
-> "Win"
และ->False
"Lose"
# 17 chars
["Lose","Win"][b]
คำเตือน: สปอยเลอร์ด้านล่างอย่าเลื่อนลงหากคุณต้องการแก้ปัญหาด้วยตนเอง
หากคุณต้องการทราบคะแนนที่ดีที่สุดสำหรับปัญหา:
ปัญหาที่ 1:
12
ปัญหาที่ 2:
5
ปัญหาที่ 3:
7
ปัญหาที่ 4:
13
ปัญหาที่ 5:
13
ปัญหาที่ 6:
8
ปัญหาที่ 7:
12
ปัญหาที่ 8:
9
ปัญหาที่ 9:
5
ปัญหาที่ 10:
15