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

จะสอดแทรกค่าข้อมูลเป็นสตริงใน Python ได้อย่างไร?


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

Python มีสามวิธีในการจัดรูปแบบสตริง:

  • % - โรงเรียนเก่า (รองรับใน Python 2 และ 3)

  • () - รูปแบบใหม่ (Python 2.6 ขึ้นไป)

  • {} - f-strings (Python 3.6 ขึ้นไป)

แบบเก่า:%

รูปแบบเก่าของการจัดรูปแบบสตริงมีรูปแบบข้อมูล format_string % สตริงรูปแบบเป็นเพียงลำดับการแก้ไข

ไวยากรณ์
คำอธิบาย
%s
สตริง
%d
ทศนิยม
%x
hexa-int
%o
octal-int
%f
ทศนิยมลอย
%e
เลขชี้กำลัง-float
%g
ทศนิยมหรือเลขชี้กำลัง-float
%%
ตัวอักษร%


# การพิมพ์จำนวนเต็มที่มี % style type.print('output \nprinting a number in string format %s' % 42)print('printing a number in string decimal %d' % 42)print('printing a number in string hexa-int %x' % 42)print('การพิมพ์ตัวเลขในสตริง exponential-float %g' % 42)

ผลลัพธ์

การพิมพ์ตัวเลขในรูปแบบสตริง 42การพิมพ์ตัวเลขในสตริงทศนิยม 42การพิมพ์ตัวเลขในสตริง hexa-int 2aการพิมพ์ตัวเลขในสตริง exponential-float 42

การแก้ไขสตริงและจำนวนเต็มด้วยรูปแบบเก่า %

%s ภายในสตริงหมายถึงการแก้ไขสตริง จำนวน % ที่ปรากฏในสตริงต้องตรงกับจำนวนของรายการข้อมูลหลังจาก % ที่ตามหลังสตริง

รายการข้อมูลเดียวทำทันทีหลังจาก % สุดท้ายนั้น ต้องจัดกลุ่มข้อมูลหลายรายการเป็นทูเพิล ดูตัวอย่างด้านล่าง

คุณยังสามารถเพิ่มค่าอื่นๆ ในสตริงรูปแบบระหว่าง % และตัวระบุประเภทเพื่อระบุความกว้างต่ำสุดและสูงสุด การจัดตำแหน่ง และการเติมอักขระได้

<ก่อน>1. + หมายถึง จัดชิดขวา2. - หมายถึง ชิดซ้าย3. . หมายถึง minwidth และ maxchars.4 แยกจากกัน minwidth หมายถึงความกว้างของฟิลด์ mimimu ที่จะใช้5 maxchars หมายถึงจำนวนอักขระ/หลักที่จะพิมพ์จากค่าข้อมูล


player ='Roger Federer'country ='Legend'titles =20# note โปรดลองสิ่งนี้ใน Python 2 เท่านั้น หากคุณใช้งานเอาต์พุต Python3 สำหรับคำสั่งด้านล่างจะแตกต่างกันมากprint('Output \n** * นักเทนนิส %s จาก %s ได้รับรางวัล %d ชื่อ ' %(ผู้เล่น, ประเทศ, ชื่อ)) พิมพ์ ('%s' % ผู้เล่น) # พิมพ์ playerprint('%5s' % ผู้เล่น) # พิมพ์ชื่อของผู้เล่นพิมพ์ (' %-7s' % ผู้เล่น) # นามสกุลของผู้เล่นพิมพ์ ('% 5.7s' % ผู้เล่น) # นามสกุลของผู้เล่นที่มีช่องว่างนำหน้า 5 อัน

ผลลัพธ์

*** นักเทนนิส Roger Federer จาก Legend คว้า 20 รายการRoger FedererRoger FedererRoger FedererRoger F

การแก้ไขสตริงและจำนวนเต็มด้วยรูปแบบใหม่:{}

หากคุณใช้ Python 3.5 หรือเวอร์ชันที่สูงกว่า คุณสามารถใช้การจัดรูปแบบ “รูปแบบใหม่” ที่อธิบายไว้ในส่วนด้านล่าง

การจัดรูปแบบ “{}” มีไวยากรณ์เป็น format_string.format(data)

โปรดจำไว้ว่า อาร์กิวเมนต์ของฟังก์ชัน format() จะต้องอยู่ในลำดับเนื่องจากตัวยึดตำแหน่ง {} ในสตริงรูปแบบ บางครั้งเพื่อให้สามารถอ่านได้มากขึ้น คุณสามารถส่งพจนานุกรมหรืออาร์กิวเมนต์ที่มีชื่อไปยังรูปแบบได้

player ='Roger Federer'player ='Roger_Federer'country ='Legend'titles =20print('Output \n{}'.format(player))print(' *** นักเทนนิส {} จาก {} มี ได้รับรางวัล {} ชื่อ '.format(player,country,titles))# positonal argumentsprint(' *** Tennis player {1} From {2} ได้รับรางวัล {0} titles '.format(titles,player,country))# ชื่ออาร์กิวเมนต์ (' *** นักเทนนิส {ผู้เล่น} จาก {ประเทศ} ได้รับรางวัล {ชื่อ} ชื่อ '.format (ผู้เล่น ='โรเจอร์เฟเดอเรอร์' ประเทศ ='ตำนาน' ชื่อ =20)) # อาร์กิวเมนต์พจนานุกรมพิมพ์ (' * ** นักเทนนิส {player} จาก {country} ได้รับรางวัล {titles} ชื่อ '.format(player ='Roger Federer',country ='Legend',titles =20))# การจัดตำแหน่งด้านซ้าย '<' (ค่าเริ่มต้น) พิมพ์ ( ' *** นักเทนนิส {} จาก {:<5s} ได้รับรางวัล {:<5d} ชื่อ '.format(player,country,titles))# การจัดตำแหน่งซ้าย '<' (ค่าเริ่มต้น)print(' *** นักเทนนิส {} จาก {:<5s} ได้รับรางวัล {:<5d} ชื่อ '.format(player,country,titles))# Alignment center '^'print(' *** นักเทนนิส {} จาก {:^10s} มี ได้รับรางวัล {:^10d} ชื่อ '.format(player,country,title s)) # การจัดตำแหน่งขวา '>'print(' *** นักเทนนิส {} จาก {:>10s} ได้รับรางวัล {:>10d} ชื่อ '.format (ผู้เล่น, ประเทศ, ชื่อ))


ผลลัพธ์

Roger_Federer*** นักเทนนิส Roger_Federer From Legend ได้รับรางวัล 20 รายการ*** นักเทนนิส Roger_Federer From Legend ได้รับรางวัล 20 รายการ*** นักเทนนิส Roger Federer จาก Legend ได้รับรางวัล 20 รายการ*** นักเทนนิส Roger Federer จาก Legend ได้รับ 20 รายการ *** นักเทนนิส Roger_Federer จาก Legend ได้รับรางวัล 20 รายการ *** นักเทนนิส Roger_Federer From Legend ได้รับรางวัล 20 รายการ *** นักเทนนิส Roger_Federer จาก Legend ได้รับรางวัล 20 รายการ *** นักเทนนิส Roger_Federer จาก Legend ได้รับรางวัล 20 เรื่อง

การแก้ไขสตริงและจำนวนเต็มด้วยรูปแบบล่าสุด:f-strings

f-strings ปรากฏใน Python 3.6 และในไม่ช้าก็กลายเป็นวิธีการจัดรูปแบบสตริงที่แนะนำ โดยส่วนตัวแล้วฉันใช้รูปแบบนี้ในการทำ f-string:

1. ใช้ตัวอักษร f/F ก่อนเริ่มต้น/ใบเสนอราคาเริ่มต้น
2. รวมชื่อตัวแปรหรือนิพจน์ภายในวงเล็บปีกกา ({}) เพื่อรับค่าลงในสตริง

player ='Roger_Federer'country ='Legend'titles =20print(f"Output \n *** Tennis player {player} จาก {country} ได้รับรางวัล {titles} titles ")print(f" *** I หวังว่า {ผู้เล่น} จะชนะอีก {ชื่อ - 10} ชื่อ ") พิมพ์ (f" {'*' * 3} นักเทนนิส {player.upper()} จาก {ประเทศ:.^10} ได้รับรางวัล {ชื่อ} ชื่อ") 

ผลลัพธ์

*** นักเทนนิส Roger_Federer From Legend คว้า 20 รายการ*** ฉันหวังว่า Roger_Federer จะได้รับอีก 10 รายการ*** นักเทนนิส ROGER_FEDERER จาก ..Legend.. คว้า 20 รายการ

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

titles =[('federer', 20),('nadal', 20),('djokovic', 17),]print('Output\n')for i, (ผู้เล่น, ชื่อ) ในการแจกแจง ( titles):print('#%d:%-10s =%d' % (i + 1,player.title(),round(titles)))

ผลลัพธ์

#0:federer =20#1:nadal =20#2:djokovic =17

เห็นได้ชัดว่าเมื่อส่งรายงานไปยังที่สูงกว่าไม่ต้องการเห็นดัชนีเริ่มต้นที่ 0 พวกเขาต้องการเริ่มต้นที่ 1.Roger Federer เป็นตำนานแห่งเทนนิสโดยส่วนตัวแล้วฉันต้องการแสดงให้เขาเป็นที่ 1 แทนที่จะเป็น #0

ตอนนี้เพื่อทำการเปลี่ยนแปลงนั้น ดูว่าความสามารถในการอ่านของโค้ดเปลี่ยนแปลงไปอย่างไรในขณะที่ใช้รูปแบบที่เก่ากว่า

titles =[('federer', 20),('nadal', 20),('djokovic', 17),]print('Output\n')for i, (ผู้เล่น, ชื่อ) ในการแจกแจง ( titles):print('#%d:%-10s =%d' % (i + 1,player.title(),round(titles)))

ผลลัพธ์

#1:Federer =20#2:Nadal =20#3:Djokovic =17

โดยสรุป ฉันได้ให้ตัวอย่างเพื่อแสดงว่าเหตุใด f-strings จึงง่ายต่อการจัดการ

old_school_formatting =(' Tennis Legeng คือ %(player)s, '' %(player)s ได้รับรางวัล %(titles)'s title, ''และเขามาจากประเทศ %(country)s.')old_formatted =old_school_formatting % {'player':'Roger Federer','titles':20,'country':'Swiss',}print('Output\n' + old_formatted)

ผลลัพธ์

Tennis Legeng คือ Roger Federer, Roger Federer ได้รับรางวัล 20 รายการ และเขามาจากประเทศสวิสเซอร์แลนด์


new_formatting =(' Tennis Legeng คือ {player}, '' {player} ได้รับรางวัล {titles} รายการ, '' และเขามาจากประเทศ {country}') new_formatted =new_formatting.format(player='Roger Federer ',titles=20,country='Swiss',)print('Output\n' + new_formatted)

ผลลัพธ์

เทนนิส เลเก้น คือ โรเจอร์ เฟเดอเรอร์ โรเจอร์ เฟเดอเรอร์ คว้าแชมป์ 20 รายการ และเขามาจากประเทศสวิสเซอร์แลนด์

รูปแบบนี้มีเสียงรบกวนน้อยกว่าเล็กน้อยเนื่องจากตัดเครื่องหมายคำพูดบางส่วนในพจนานุกรม และอักขระบางตัวในตัวระบุรูปแบบ แต่แทบจะไม่น่าสนใจ