นี่เป็นความท้าทายของการฝึกฝนการเพิ่มประสิทธิภาพของกอล์ฟใน 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