Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

จะแกะโดยใช้การแสดงออกของดาวใน Python ได้อย่างไร?


แนะนำตัว

ข้อจำกัดพื้นฐานประการหนึ่งของการเปิดกล่องคือ คุณต้องทราบความยาวของลำดับที่คุณกำลังเปิดกล่องล่วงหน้า

ทำอย่างไร..

random_numbers =[0, 1, 5, 9, 17, 12, 7, 10, 3, 2]random_numbers_descending =sorted (random_numbers, reverse=True)print(f"Output \n*** {random_numbers_descending}" )

ผลลัพธ์

*** [17, 12, 10, 9, 7, 5, 3, 2, 1, 0]

หากตอนนี้ฉันต้องการค้นหาตัวเลขที่ใหญ่ที่สุดและใหญ่เป็นอันดับสองจากตัวเลข เราจะได้รับข้อยกเว้น "มีค่ามากเกินไปที่จะแกะ"

print(f"Output \n*** กำลังรับค่าที่ใหญ่ที่สุดและใหญ่เป็นอันดับสอง") ที่ใหญ่ที่สุด, วินาทีที่ใหญ่ที่สุด =random_numbers_descending

ผลลัพธ์

*** รับที่ใหญ่ที่สุดและใหญ่เป็นอันดับสอง


<ก่อนหน้า>------------------------------------------------------------- ---------------------------- ValueError Traceback (การโทรล่าสุดล่าสุด) ใน 1 พิมพ์ (f"Output \n*** กำลังรับที่ใหญ่ที่สุด และใหญ่เป็นอันดับสอง") ----> 2 ที่ใหญ่ที่สุด, second_largest =random_numbers_descendingValueError:มีค่ามากเกินไปที่จะแกะ (คาดหวัง 2)

Python มักพึ่งพาการจัดทำดัชนีและการแบ่งส่วน ตัวอย่างเช่น เมื่อฉันต้องการแยกที่ใหญ่ที่สุด ใหญ่เป็นอันดับสองจากรายการด้านล่างคือวิธีที่เราสามารถทำได้

ที่ใหญ่ที่สุด =random_numbers_descending[0]print(f"Output \n*** กำลังรับค่าสูงสุด - {largest}")

ผลลัพธ์

*** รับสูงสุด - 17


second_largest =random_numbers_descending[1]print(f"Output \n*** กำลังรับค่าที่ใหญ่เป็นอันดับสอง - {second_largest}")

ผลลัพธ์

*** ได้อันดับที่ 2 - 12


rest_of_numbers =random_numbers_descending[2:]print(f"Output \n*** รับตัวเลขที่เหลือ - {rest_of_numbers}")

ผลลัพธ์

*** รับตัวเลขที่เหลือ - [10, 9, 7, 5, 3, 2, 1, 0]

ขณะนี้ใช้งานได้ การทำดัชนีและการแบ่งส่วนข้อมูลทั้งหมดมีสัญญาณรบกวนทางสายตา ในทางปฏิบัติ มักจะเกิดข้อผิดพลาดในการแบ่งสมาชิกของซีเควนซ์ออกเป็นเซตย่อยต่างๆ ด้วยวิธีนี้

เพื่อให้ทำงานได้ดีขึ้น Python รองรับการคลายแพ็กที่ดักจับทั้งหมดผ่านนิพจน์ที่ติดดาว

ไวยากรณ์ที่ติดดาวนี้อนุญาตให้ส่วนหนึ่งของการมอบหมายการคลายแพ็กได้รับค่าทั้งหมดที่ไม่ตรงกับส่วนอื่นๆ ของรูปแบบการคลายแพ็ก

largest,second_largest, *rest_of_numbers =random_numbers_descendingprint(f"Output \n big:{largest} \n second_largest:{second_largest} \n rest_of_numbers:{rest_of_numbers}")

ผลลัพธ์

ใหญ่สุด:17 วินาที_ใหญ่สุด:12rest_of_numbers:[10, 9, 7, 5, 3, 2, 1, 0]

รหัสด้านบนมีลักษณะอย่างไร ในบรรทัดเดียวซึ่งง่ายต่อการอ่านเราสามารถบรรลุผล นิพจน์ที่ติดดาวอาจปรากฏในตำแหน่งใดก็ได้ ดังนั้นคุณจึงสามารถใช้ประโยชน์จากการแตกไฟล์ catch-all ได้ทุกเมื่อที่คุณต้องการแยกชิ้นหนึ่ง

ใหญ่สุด:17rest_of_numbers:[12, 10, 9, 7, 5, 3, 2, 1]smallest:0


*rest_of_numbers, second_smallest, smallest =random_numbers_descendingprint(f"Output \n rest_of_numbers:{rest_of_numbers} \n second_smallest:{second_smallest} \n smallest:{smallest}")


rest_of_numbers:[17, 12, 10, 9, 7, 5, 3, 2]second_smallest:1smallest:0

อย่างไรก็ตาม ในการแกะงานที่มีนิพจน์ติดดาว คุณต้องมีส่วนที่จำเป็นอย่างน้อยหนึ่งส่วน มิฉะนั้น คุณจะได้รับ SyntaxError เราไม่สามารถใช้นิพจน์ catch-all ได้ด้วยตัวเอง

*rest_of_numbers =random_numbers_descending


ไฟล์ "" บรรทัดที่ 1*rest_of_numbers =random_numbers_descending^SyntaxError:เป้าหมายการมอบหมายที่ติดดาวต้องอยู่ในรายการหรือทูเพิล

เรายังไม่สามารถใช้นิพจน์ที่รับทั้งหมดหลายรายการในรูปแบบการแตกไฟล์ระดับเดียวได้ นี่เป็นอีกหนึ่งบันทึกสำคัญที่ต้องพิจารณา

*rest_of_numbers, *more_smallest, smallest =random_numbers_descending


ไฟล์ "" บรรทัดที่ 1*rest_of_numbers *more_smallest smallest =random_numbers_descending^SyntaxError:นิพจน์ที่ติดดาวสองรายการในงาน


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

player_grandslame_and_atptitles ={'Federer':(20, 103),'Nadal':(20,84),}((player1, (grandslam1, *atptitles1)), (player2, (grandslam2, *atptitles2))) =player_grandslame_and_atptitles.items()print(f'Output \nPlayer - {player1} บรรลุ {grandslam1} grandslams และ , {atptitles1} atp tour titles')print(f'Player - {player2} บรรลุ {grandslam2} grandslams แล้ว {atptitles2} ชื่อทัวร์ atp')


ผลลัพธ์


ผู้เล่น - เฟเดอเรอร์คว้าแกรนด์สแลม 20 ครั้งและ [103] ชื่อเอทีพีทัวร์ผู้เล่น - นาดาลบรรลุแกรนด์สแลม 20 ครั้งและ [84] ชื่อเอทีพีทัวร์

นิพจน์ที่ติดดาวจะกลายเป็นอินสแตนซ์ของรายการในทุกกรณี หากไม่มีรายการที่เหลือจากลำดับที่แตกออก ส่วนที่รับทั้งหมดจะเป็นรายการที่ว่างเปล่า สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อคุณกำลังประมวลผลลำดับที่คุณทราบล่วงหน้าว่ามีองค์ประกอบอย่างน้อย N

random_numbers =[0, 1]ที่หนึ่ง, ที่สอง, *ส่วนที่เหลือ =random_numbersprint(f"Output \n{first, second, rest}")

ผลลัพธ์

(0, 1, [])