Python – Input, Output และ Import

การนำข้อมูลออกมาแสดงโดยใช้ฟังก์ชัน print()

ฟังก์ชัน print() ใช้สำหรับนำข้อมูลที่ส่งออกมาแสดงทางจอภาพ หรืออาจจะนำข้อมูลดังกล่าวออกมาแสดงผลในรูปแบบไฟล์ได้อีกด้วย
ตัวอย่างการแสดงข้อมูล

print("Welcome to class!")
# โปรแกรมจะทำการปรินต์ค่า Welcome to class!

name = "David"     # กำหนดตัวแปรชื่อ name ไว้สำหรับระบุชื่อของผู้ใช้งาน
print("Welcome to class:", name)
# โปรแกรมจะทำการปรินต์ค่า Welcome to class: David
# โดยจะสังเกตุว่าระหว่างข้อความและตัวแปร โปรแกรมจะทำการใส่ช่องว่างแทรกเข้ามาให้โดยอัตโนมัติ

กำหนดรายละเอียดให้กับฟังก์ชัน print()

ฟังก์ชัน print() นั้นสามารถระบุรายละเอียดเพิ่มเติม เพื่อเป็นการปรับแต่งข้อความที่เราต้องการแสดงผลได้ รูปแบบการใช้งานดังนี้
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

โดยรายละเอียดของแต่ละตัวแปรที่กำหนดให้ฟังก์ชันเป็นดังนี้

ตัวแปร รายละเอียด
objects คือค่าที่จะนำมาแสดงผล อาจเป็นข้อมูลเดียว หรือชุดของข้อมูลก็ได้
sep คือ สัญลักษณ์ที่นำมาแสดงเพื่อเป็นตัวแยกระหว่างค่าแต่ละค่า โดยค่าตั้งต้นที่กำหนดให้โดยอัตโนมัติ คือ ค่าว่าง(space)
end คือ ค่าที่จะนำมาแสดงหลังจากทุกค่าได้ถูกนำมาแสดงผลเรียบร้อยแล้ว โดยค่าตั้งต้นคือ ตัวขึ้นบรรทัดใหม่(newline)
file คือ อุปกรณ์ที่ต้องการให้ค่าข้างต้นจะนำออกมาแสดงผล โดยค่าตั้งต้นคือ sys.stdout ซึ่งก็คือการแสดงผลทางหน้าจอ
print(1,2,3,4)
# โปรแกรมจะแสดงผล: 1 2 3 4 เนื่องจากเราทำการระบุเพียงแค่ข้อมูลที่ต้องการแสดง

print(1,2,3,4, sep='*')
# โปรแกรมจะแสดงผล 1*2*3*4 เนื่องจากเรามีการระบุไว้ว่าระหว่างแต่ละค่าข้อมูลให้แทรกเครื่องหมาย *

print(1,2,3,4, sep='#', end='&')
# โปรแกรมจะแสดงผล: 1#2#3#4& เนื่องจากเรามีการระบุไว้ว่าระหว่างแต่ละค่าข้อมูลให้แทรกเครื่องหมาย # และเมื่อมีการแสดงข้อมูลครบแล้วให้ปิดด้วยเครื่องหมาย &

สร้างรูปแบบข้อความสำหรับการแสดงข้อมูล( Output formatting )

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

info_template = 'Student age:{} and height:{}'   # ทำการกำหนดรูปแบบข้อความ
personal_info = info_template.format(30, 160)
print( personal_info )
# โปรแกรมจะทำการปรินต์ค่า Student age:30 and height:160

personal_info = info_template.format(20, 165)
print( personal_info )
# โปรแกรมจะทำการปรินต์ค่า Student age:20 and height:165

จากตัวอย่างข้างต้น สำหรับการกำหนดรูปแบบของข้อความนั้น เราจะใช้เครื่องหมาย {} เพื่อระบุตำแหน่งที่จะนำข้อมูลมาแทนที่ แล้วจึงระบุข้อมูลที่ใช้แสดงผลตามลงไป โดยข้อมูลที่ระบุไปนั้นจะถูกนำมาแทนที่ในรูปแบบข้อความที่กำหนดตรงบริเวณเครื่องหมาย {} ตามลำดับข้อมูลที่ระบุลงไป แต่หากเราต้องการจัดเรียงข้อมูลเองโดยไม่อาศัยลำดับข้อมูลตามที่ป้อนข้อมูล เราจำเป็นต้องใส่ลำดับข้อมูลกำกับไว้ เช่น {0}, {1} การกำหนดรูปแบบข้อความเช่นนี้ เราสามารถจะนำรูปแบบข้อความเดียวกันไปใช้งานได้หลายครั้ง โดยทำการเปลี่ยนแค่ค่าของข้อมูลเท่านั้น

info_template = 'Student height:{1} and age:{0}'  # ทำการกำหนดรูปแบบข้อความ

personal_info = info_template.format(30, 160)
print( personal_info )
# โปรแกรมจะทำการปรินทต์ค่า Student height:160 and age: 30

personal_info = info_template.format(20, 165)
print( personal_info )
# โปรแกรมจะทำการปรินทต์ค่า Student height:165 and age: 20

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

info_template = 'Student age:{age} and height:{height}' # ทำการกำหนดรูปแบบข้อความ

personal_info = info_template.format(age=30, height=60)
print( personal_info )
# โปรแกรมจะทำการปรินทต์ค่า Student age: 30 and height:160

personal_info = info_template.format(age=20, height=165)
print( personal_info )
# โปรแกรมจะทำการปรินทต์ค่า Student age: 20 and height:165

การรับข้อมูลเข้าไปให้โปรแกรม(Input)

เพื่อให้โปรแกรมของเรามีการตอบสนองต่อผู้ใช้งานได้แม่นยำมากขึ้น เราอาจจำเป็นต้องรับข้อมูลเข้าไปในโปรแกรมจากผู้ใช้งานเพื่อประมวลผล โดยฟังก์ชัน input() จะถูกใช้เพื่อรับข้อมูล โดยรูปแบบการใช้งานคือ
input( [prompt] )
ตำแหน่ง “prompt” คือข้อความที่เราจำเป็นต้องระบุเพื่ออธิบายผู้ใช้ว่า ข้อมูลชนิดใดคือข้อมูลที่เราต้องการรับเข้ามาเป็น input

ตัวอย่างการใช้งาน

input_age = input('Enter your age:')
# เมื่อรันคำสั่งดังกล่าวโปรแกรมจะปรินท์ข้อความ Enter your age: ออกมาเพื่อระบุว่าโปรแกรมดังกล่าวต้องการรอรับข้อมูลจากผู้ใช้งาน ผู้ใช้งานสามารถระบุค่าที่ถูกต้องให้กับโปรแกรม หลังจากระบุค่าดังกล่าวแล้วโปรแกรมจะนำข้อมูลนั้นไประบุให้กับตัวแปรที่กำหนดไว้ ในตัวอย่างนี้คือตัวแปร "input_age"
# เนื่องจากค่าที่รับเข้าไปนั้นจะมีข้อมูลเป็นชนิด string เราจึงจำเป็นต้องแปลงข้อมูลให้เป็นชนิดข้อมูลที่เหมาะสมสำหรับการนำไปใช้งานก่อน

# Enter your age: 10 # ให้เราทำการป้อนข้อมูล 10 เข้าไป

age = int(input_age) # แปลงชนิดของข้อมูลจาก string เป็น integer
print( age )
# โปรแกรมจะปรินท์ค่า 10 ออกมา

เราสามารถระบุรูปแบบข้อมูลให้ฟังก์ชัน input เป็นประโยคทางคณิตศาสตร์(expression) เช่น 5*10+2 โดยข้อมูลที่เป็นประโยคทางคณิตศาสตร์สามารถที่จะใชัฟังก์ชัน eval() เพื่อจะทำการประมวลผลข้อมูลดังกล่าวก่อนนำข้อมูลไปใช้ได้เช่นกัน
ตัวอย่างการใช้งาน

input_order_amount = input("Enter amount of products:")
# เมื่อรันคำสั่งดังกล่าวโปรแกรมจะปรินท์ข้อความ Enter amount of products: ออกมาเพื่อระบุว่าโปรแกรมดังกล่าวต้องการรอรับข้อมูลจากผู้ใช้งาน ผู้ใช้งานสามารถระบุค่าที่ถูกต้องให้กับโปรแกรม หลังจากระบุค่าดังกล่าวแล้วโปรแกรมจะนำข้อมูลนั้นไประบุให้กับตัวแปรที่กำหนดไว้

# Enter amount of products: 12*10+5*2 ทำการป้อนข้อมูลที่เป็นประโยคทางคณิตศาสตร์เข้าไป
# เราได้ทำการใส่ข้อมูลซึ่งเป็นประโยคทางคณิตศาสตร์ 12*10+5*2 เพื่อระบุจำนวนสั่งซื้อสินค้าเข้าไป โดยประโยคคณิตศาสตร์ในตัวอย่างระบุยอดรวมของการสั่งซื้อสินค้าทั้งหมด ซึ่งคำนวณจาก ผลรวมของยอดสั่งซื้อสินค้าแต่ละชนิด(ราคา * จำนวนชิ้น)

order_amount = eval(input_order_amount)
# ใช้ฟังก์ชัน eval() เพื่อแปลงประโยคทางคณิตศาสตร์เป็นค่าข้อมูลเพื่อจะนำไปใช้ในโปรแกรมต่อไป

print( order_amount )
# โปรแกรมจะทำการปรินต์ค่า 130

การนำโมดูลที่มีอยู่แล้วไปใช้งานซ้ำ(Import)

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

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

  • การกำหนดฟังก์ชัน ซึ่งเป็นการจัดกลุ่มของชุดคำสั่งที่ทำงานร่วมกัน( definition )
  • ประโยคคำสั่ง(statement)
  • ชื่อโมดูลซึ่งก็คือชื่อไฟล์และจะถูกอ้างอิงชื่อดังกล่าวเวลาเรียกใช้โมดูล(โดยที่ไฟล์ดังกล่าวจะมีนามสกุล.py)

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

ตัวอย่างการนำโมดูลไปใช้

import numpy as np  # ทำการ import โมดูลชื่อ numpy โดยให้ชื่อย่อสั้นๆว่า np
max_val = np.amax([1, 2, 3])  # ทำการเรียกใช้ฟังก์ชัน amax จากโมดูล numpy
print( max_val )
# โปรแกรมจะทำการรปรินต์ค่า 3

จากข้างต้นเป็นการนำโมดูลชื่อ numpy มาใช้โดยคำสั่ง import การทำแบบนี้จะทำให้สามารถเข้าถึงฟังก์ชันในทุกรายละเอียดการทำงานภายในโมดูลได้โดยไม่ต้องเขียนชุดคำสั่งเดิมซ้ำ โดยในตัวอย่างทำการเรียกใช้ฟังก์ชัน np.amax() ซึ่งเป็นฟังก์ชันหนึ่งของ numpy เพื่อหาค่าที่มากที่สุดจากชุดข้อมูลในลิสต์ที่ได้ระบุไว้

เราสามารถจะทำการเจาะจงในเรียกใช้เพียงค่าบางค่าหรือเพียงเฉพาะฟังก์ชันบางตัวจากโมดูลได้ โดยไม่ได้นำเข้า(import)รายละเอียดทั้งหมดจากโมดูล โดยใช้คีย์เวิร์ด from

from numpy import amax  # เลือก import เฉพาะฟังก์ชัน amax จากโมดูล numpy
max_val = amax([1, 2, 3]) # เราสามารถเรียกใช้ฟังก์ชัน amax จากโมดูล numpy ได้โดยไม่ต้องอ้างอิงด้วยชื่อโมดูล
print( max_val )
# โปรแกรมจะทำการพิมพ์ค่า 3 ซึ่งเป็นค่ามากที่สุดจากชุดข้อมูลในลิสต์ออกมา การเรียกใช้แบบนี้เราสามารถระบุชื่อฟังก์ชันที่ต้องการใช้ได้เลยโดยไม่ต้องอ้างอิงถึงชื่อของโมดูล แต่เราจะไม่สามารถเรียกใช้รายละเอียดข้อมูลหรือฟังก์ชันอื่นๆ ที่มีในโมดูล numpy ได้

เนื่องจากเมื่อโปรแกรมมีความซ้อนมากขึ้น บางครั้งแต่ละโมดูล(module) อาจจะถูกเก็บไว้ในตำแหน่งที่แตกต่างกันโดยจัดกลุ่มตามความเหมาะสม ดังนั้นเมื่อมีการเรียกใช้โมดูลใน python โปรแกรมเองจะทำการค้นหาโมดูลจากหลายๆ ตำแหน่งซึ่งระบุไว้ในตัวแปร sys.path โดยตัวแปรดังกล่าวระบุลิสต์ของ directory ต่างๆ ที่เก็บข้อมูลของโมดูลไว้

ที่มาของข้อมูล https://www.programiz.com/python-programming/input-output-import