“PRINT” ใน Python เรื่องง่ายๆที่เข้าใจไม่ยาก

Grassroot Engineer
4 min readFeb 27, 2019

--

เข้าเรื่องเลยครับ รูปแบบของ “print” ในภาษา Python มีวิธีใช้ยังไงบ้าง วันนี้ผมจะมาแจกแจงให้ดูนะครับ

ก่อนอื่นนะคับ เรามาดูพื้นฐานก่อนว่าคำสั่ง print เราจะทำอะไรได้บ้าง จิงๆแล้ว print คือ funtion หนึ่งในตัว python นะคับโดยมีรายละเอียดแบบนี้

ค่า arguments ต่างๆที่เราจะใส่ได้นะคับ (value, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

นั่นหมายความว่าเราจะเลือกใส่แค่ ค่า (value), ให้มีตัวแยกระหว่างค่า (sep) หรือจะกำหนดให้จบคำสั่ง print ด้วย enter ไหม (end=’\n’) มาดูตัวอย่างกันเลยนะคับ

ในรูปเป็นตัวอย่างของการใส่ argument ใน print นะคับ

อาจจะยังงงๆนะคับ เรามาดูแบบ simple กันเลยดีกว่าว่าในการใช้มีกี่วิธีบ้าง

1. Print แบบทั่วไปเลย

>>> print('My name is Q')        # เราสามารถใช้ ' หรือ " ก็ได้นะครับMy name is Q                     # ผลลัพธ์ที่ได้ 

2. Print จากการแทนค่าตัวแปร

>>> name = 'Atthana'              # กำหนดค่า string มาเก็บไว้ในตัวแปร name
>>> print('My name is ', name) # แทนค่า name เข้าไปในค่าทีต้องการ print
My name is Atthana # ผลลัพธ์ที่ได้

3. Print จาก %, style-formatting

http://www.daydev.com/developer/s6-programming-language/string-python.html
>>> name = 'Atthana'
>>> age = 28
>>> grade = 3.34
>>> print('I am %d years old' %(age)) # %d = decimal โดยดึงค่ามาจาก age
I am 28 years old # ผลลัพธ์ที่ได้ จะดึงค่ามาจาก age
#===================================================================>>> print('my grade is %f' %(grade)) # %f = float โดยดึงค่ามาจาก grade
my grade is 3.340000 # ผลลัพธ์ที่ได้ แต่ค่าทศนิยมเพียบเลย
#===================================================================
>>> print('my grade is %.2f' %(grade))# .2f = กำหนดทศนิยม 2 ตำแหน่ง
my grade is 3.34
#===================================================================
>>> print('my grade is %.0f' %(grade))# .0f = ไม่ให้มีจุดทศนิยมเลยนะคับ
my grade is 3
#===================================================================
>>> print('My name is %s, I\'m %d years old' %(name,age))
# เอามายำรวมกันเลยนะครับ ระหว่าง string and decimal ส่วน \ ใช้เพื่อให้โปรแกรมมันข้าม single quote หลัง I ไปเลย (ignore ตัวถัดไป)My name is Atthana, I'm 28 years old # ผลลัพธ์ที่ได้
#===================================================================
หรือ...
การแก้ปัญหาวิธีเดียวกัน เราสามารถใช้ Double quote ทำงานร่วมกับ Single quote ก็ได้ เช่น
>>> print("My name is %s, I'm %d years old" %(name,age))

My name is Atthana, I'm 28 years old
#===================================================================
อีกกรณีคือ เมื่อเราต้องการจะ print double quote ออกมาด้วย จะทำได้แบบนี้นะ...
>>> print("Atthana: \"you are so handsome guy\"")

Atthana: "you are so handsome guy" # ผลลัพธ์จะได้ " ด้วย จากการใช้ \
#===================================================================
หรือใช้งานร่วมกันระหว่าง ' และ " ก็แก้ปัญหานี้ได้เช่นกัน
>>> print('Atthana: "you are so handsome guy"')

Atthana: "you are so handsome guy" # ใช้ single quote ช่วยแก้ปัญหานี้
  • ตัวอย่างของการ apply %s กับ dictionary ลองทำความเข้าใจจากรูปด้านล่างดู
Applying %s with dictionary

4. Print จาก {} (curry bracket) และกำหนด .format

(แนะนำให้ใช้วิธีนี้นะคับ เพราะ Python version เก่าๆก็ไม่มีปัญหาอะไร)

>>> money = 1000000
>>> print('I have money {} baht'.format(money))
I have money 1000000 baht # ผลลัพธ์ที่ได้ จะไปอิงตามตัวแปร money นะ
#===================================================================
แต่จะเห็นว่า 1000000 มันคือ หนึ่งล้าน แต่จะดูยากหน่อยเพราะไม่มี comma คั่นเลย
ดังนั้นเราสามารถกำหนดค่าใน curry bracket ได้ เช่น
>>> print('I have money {:,d} baht'.format(money))
I have money 1,000,000 baht # เพิ่ม :,d จะทำให้ดูง่ายขึ้นเพราะแบ่งหลักให้แล้ว
#===================================================================
แต่ในกรณ๊ที่ data type เป็น float เราจะใส่ :,d เหมือนเดิมไม่ได้นะ ก็จะต้องเปลี่ยนเป็น :,f แทน ลองดูตัวอย่างครับ>>> account = 1234567.12345
>>> print('I have money {:,f} baht'.format(account))
I have money 1,234,567.123450 baht # ดูง่ายขึ้นไหม เพราะมี , เพิ่มให้แล้วแต่จะพบว่ามันก็ยังอ่านยากอยู่ดี เพราะดันมีจุดทศนิยมหลายตำแหน่ง จึงต้องนำสิ่งที่เรียนไปตะกี้มาเพิ่มเติมโดยการกำหนดจุดทศนิยมให้กับมัน นั่นคือ>>> print('I have money {:,.2f} baht'.format(account))I have money 1,234,567.12 baht # กำหนด .2 เพิ่มเพื่อระบุ 2 ตำแหน่งทศนิยม
ถ้าจะไม่เอาทศนิยมเลย ก็เหมือนเดิมนะครับ คือกำหนดให้เป็น .0 นั่นเอง
>>> print('I have money {:,.0f} baht'.format(account))
I have money 1,234,567 baht # เห็นไหม ไม่มีทศนิยมแล้ว

การใช้ .format() ร่วมกับ kwargs นะคับ (วิธีนี้จะใช้กับข้อมูลที่เป็น dict)

info = {'name': 'Atthana', 'position': 'Software Developer'}  # dictprint('My name is {name}, and position is {position}.'.format(**info))
# ----- output -----
My name is Atthana, and position is Software Developer.

5. f-Strings

สุดท้ายนะคับ สำหรับการใช้ Style-formating แบบสั้นๆอีกแบบนะคับคือ
แค่เขียน f หน้าตัว {} เท่านั้น โดยไม่ต้องเขียนคำว่า .format() ตัวอย่างนะคับ

>>> greeting = "Hello"
>>> name = "Atthana"
>>> message = f'{greeting}, {name}' #จะเห็นว่าแค่ใส่ f ด้านหน้าของ''เท่านั้นเองนะคับ
>>> print(message)
Hello, Atthana # ผลลัทธ์ที่ได้ ก้อจะ Print Hello + , + Atthana ตามตัวแปรใน {} เลยคับ
# =======================================================หรือ ถ้า print ตัวแรกก้อสามารถกำหนด decimal format ได้เลย เช่น
>>> a = 0.1
>>> b = 0.2
>>> c = a+b
>>> print(f'{c:.2f}')
0.30 # จะได้แบบกำหนดให้แสดงแบบจุดทศนิยม 2 ตำแหน่งด้วย :.2f

หรือ อีกตัวอย่างคับ

def print_hi(name):
print(f'Hi, {name}')


if __name__ == '__main__':
print_hi('PyCharm')
# ------------------------------
# output
# Hi, PyCharm (result)

การจัดการกับตัวเลข โดยใช้ f-Strings

# The Thousands Separator using f-strings
a = 1000000
print(f'{a:,}') # จะทำให้ 1000000 ถูกแบ่งด้วย comma (,)
print(f'{a:,.2f}') # นอกจากถูกแบ่งด้วย , แล้วก้อยังเป็นทศนิยม 2 ตำแหน่งด้วย
# -------------------------------
# output
# 1,000,000
# 1,000,000.00

เราสามารถกำหนด condition เพื่อให้แสดงค่าใน f-Strings ได้ด้วยนะ จากตัวอย่าง

  • จะเห็นว่า ถ้าไม่มีค่า grade_ranges_dict[grade] จะให้แสดงคำว่า ขึ้นไป, แต่ถ้ามีค่าก็ให้แสดง grade_ranges_dict[grade] ได้เลย
  • ถ้าบรรทัดมีความยาวเกินไป เราสามารถตัดมาขึ้นบรรทัดใหม่ได้ โดยการใช้ \ คั่นไว้ได้นะ
f-Strings with if-else (1 line or 2 lines)
อีกตัวอย่างของการใช้ f-string ร่วมกับ :0x เพื่อจัดการเพิ่มศูนย์ให้ครบตาม digit ที่เรากำหนดนะ เจ๋งไหมล่ะ

คราวนี้ลองมายำหลายๆแบบกันดูนะ

>>> print('I have money {1:,.2f} baht\nI have in wallet {0:,d}'.format(money, account))I have money 1,234,567.12 baht    # ผลลัพธ์ที่ได้
I have in wallet 1,000,000 # ผลลัพธ์ที่ได้
# \n = ขึ้นบรรทัดใหม่
# \t = Tab
# 1:,.2f อธิบายว่า 1 = ให้ไป point ที่ .format index ที่ 1 นั่นคือ account และ :,f คือ ให้เรียก float โดยมี comma แบ่งด้วย และ .2 คือ เอาแค่ทศนิยม 2 ตำแหน่งนะ
เช่นเดียวกัน
# 0:,d อธิบายว่า 0 = ให้ไป point ที่ .format index ที่ 0 นั่นคือ money และ :,d คือ ให้เรียก decimal โดยมี comma แบ่งด้วย แค่นั่นเองครับ

สุดท้ายลองยำชุดใหญ่ดูนะครับ

>>> print('I have money {ac:,.2f} baht\nI have in wallet {mn:,d}'.format(mn = money, ac = account))I have money 1,234,567.12 baht
I have in wallet 1,000,000
# จะพบว่าเหมือนกับตัวอย่างด้านบนเลยนะคับ แค่เปลี่ยนจากการ point ไปที่ index 0 หรือ 1 มาเป็นการตั้งชื่อให้มันแทนเท่านั้นเอง และนำชื่อที่ตั้งไว้ไปเสียบแทนในตำแหน่งของ index

จบล่ะคับ

ศึกษาเพิ่มเติมได้จาก document ตาม link นี้คับ

แล้วพบกันใหม่คับ

--

--