EP07: โครงสร้างข้อมูลขั้นสูง: ดิกชันนารีและเซต
(1) ทบทวนความรู้เดิม (2) ดิกชันนารี (Dictionaries) ใน Python: โครงสร้างข้อมูลแบบ Key-Value 📖 (3) เซต (Sets) ใน Python: กลุ่มของข้อมูลที่ไม่ซ้ำกัน 🛡️
+
(การบวก – Addition): นำค่าสองค่ามาบวกกัน เช่น 5 + 3
ได้ผลลัพธ์เป็น 8
-
(การลบ – Subtraction): นำค่าแรกมาลบด้วยค่าที่สอง เช่น 10 - 4
ได้ผลลัพธ์เป็น 6
*
(การคูณ – Multiplication): นำค่าสองค่ามาคูณกัน เช่น 7 * 3
ได้ผลลัพธ์เป็น 21
/
(การหาร – Division): นำค่าแรกมาหารด้วยค่าที่สอง ผลลัพธ์ที่ได้จะเป็นชนิดทศนิยม (float
) เสมอ เช่น 10 / 3
ได้ 3.333...
, 10 / 2
ได้ 5.0
//
(การหารปัดเศษทิ้ง – Floor Division): นำค่าแรกมาหารด้วยค่าที่สอง และปัดเศษทิ้งให้เหลือแต่ส่วนที่เป็นจำนวนเต็ม (ปัดลงเสมอ) เช่น 10 // 3
ได้ 3
, 9 // 2
ได้ 4
, -7 // 2
ได้ -4
%
(การหารเอาเศษ – Modulus): ให้ผลลัพธ์เป็นเศษเหลือจากการหาร เช่น 10 % 3
ได้ 1
(10 หาร 3 ได้ 3 ครั้ง เหลือเศษ 1), 9 % 2
ได้ 1
(มีประโยชน์ในการตรวจสอบเลขคู่/คี่)**
(การยกกำลัง – Exponentiation): นำค่าแรกไปยกกำลังด้วยค่าที่สอง เช่น 2 ** 3
หมายถึง 23 ได้ผลลัพธ์เป็น 8
=
(กำหนดค่าพื้นฐาน – Basic Assignment): กำหนดค่าทางขวาให้กับตัวแปรทางซ้าย เช่น x = 10
, name = "Python"
+=
(บวกแล้วกำหนดค่า): x += 5
มีความหมายเดียวกับ x = x + 5
-=
(ลบแล้วกำหนดค่า): x -= 3
มีความหมายเดียวกับ x = x - 3
*=
(คูณแล้วกำหนดค่า): x *= 2
มีความหมายเดียวกับ x = x * 2
/=
(หารแล้วกำหนดค่า): x /= 4
มีความหมายเดียวกับ x = x / 4
//=
(หารปัดเศษทิ้งแล้วกำหนดค่า): x //= 3
มีความหมายเดียวกับ x = x // 3
%=
(หารเอาเศษแล้วกำหนดค่า): x %= 2
มีความหมายเดียวกับ x = x % 2
**=
(ยกกำลังแล้วกำหนดค่า): x **= 3
มีความหมายเดียวกับ x = x ** 3
5
, "Hello"
), ตัวแปร (เช่น age
, price
), และ ตัวดำเนินการ (เช่น +
, *
, >
) ที่ Python สามารถประเมินค่า (evaluate) เพื่อให้ได้ผลลัพธ์เป็นค่าใหม่ค่าหนึ่ง5 + 3
(ได้ผลลัพธ์เป็น 8
), width * height
, (score1 + score2) / 2
, age >= 18
(ได้ผลลัพธ์เป็น True
หรือ False
)()
(วงเล็บ – Parentheses): มีความสำคัญสูงสุด การดำเนินการภายในวงเล็บจะถูกทำก่อนเสมอ**
(การยกกำลัง – Exponentiation)*
(การคูณ – Multiplication), /
(การหาร – Division), //
(การหารปัดเศษทิ้ง – Floor Division), %
(การหารเอาเศษ – Modulus): กลุ่มนี้มีความสำคัญเท่ากัน และจะประมวลผลจาก ซ้ายไปขวา+
(การบวก – Addition), -
(การลบ – Subtraction): กลุ่มนี้มีความสำคัญเท่ากัน และจะประมวลผลจาก ซ้ายไปขวา()
:
(5 + 3) * 2
จะให้ผลลัพธ์ต่างจาก 5 + 3 * 2
)True
(จริง) หรือ False
(เท็จ) เสมอ==
(เท่ากับ – Equal to): คืนค่า True
ถ้าค่าทั้งสองข้างเท่ากัน เช่น 5 == 5
(เป็น True
), 5 == 3
(เป็น False
)!=
(ไม่เท่ากับ – Not equal to): คืนค่า True
ถ้าค่าทั้งสองข้างไม่เท่ากัน เช่น 5 != 3
(เป็น True
), 5 != 5
(เป็น False
)>
(มากกว่า – Greater than): เช่น 10 > 5
(เป็น True
)<
(น้อยกว่า – Less than): เช่น 5 < 10
(เป็น True
)>=
(มากกว่าหรือเท่ากับ – Greater than or equal to): เช่น 10 >= 10
(เป็น True
), 10 >= 5
(เป็น True
)<=
(น้อยกว่าหรือเท่ากับ – Less than or equal to): เช่น 5 <= 5
(เป็น True
), 5 <= 10
(เป็น True
)5 == 5.0
ให้ผลเป็น True
)and
(และ): ให้ผลลัพธ์เป็น True
ก็ต่อเมื่อนิพจน์ (หรือค่า) ทั้งสองข้างเป็น True
ทั้งคู่ กรณีอื่นๆ จะให้ผลลัพธ์เป็น False
True and True
-> True
True and False
-> False
False and True
-> False
False and False
-> False
or
(หรือ): ให้ผลลัพธ์เป็น True
ถ้ามีนิพจน์ (หรือค่า) ข้างใดข้างหนึ่ง (หรือทั้งสองข้าง) เป็น True
จะให้ผลลัพธ์เป็น False
ก็ต่อเมื่อทั้งสองข้างเป็น False
ทั้งคู่
True or True
-> True
True or False
-> True
False or True
-> True
False or False
-> False
not
(นิเสธ – Negation): ใช้กลับค่าความจริงของนิพจน์ (หรือค่า) ที่ตามหลัง
not True
-> False
not False
-> True
(age > 18) and (has_license == True)
, is_weekend or is_holiday
, not is_raining
not
จะถูกประมวลผลก่อน, ตามด้วย and
, และสุดท้ายคือ or
(แนะนำให้ใช้วงเล็บเพื่อความชัดเจน)print()
print("ข้อความที่ต้องการแสดง")
, print(ชื่อตัวแปร)
print()
เดียวกัน (จะถูกคั่นด้วยช่องว่างโดยอัตโนมัติ): print("ชื่อ:", name, "อายุ:", age)
sep
เพื่อเปลี่ยนตัวคั่นระหว่างรายการ: print("Hello", "World", sep="-")
ผลลัพธ์คือ Hello-World
end
เพื่อเปลี่ยนสิ่งที่พิมพ์ต่อท้าย (ปกติคือการขึ้นบรรทัดใหม่ \n
): print("Hello", end=" "); print("World")
ผลลัพธ์คือ Hello World
ในบรรทัดเดียวf"ข้อความ {ชื่อตัวแปร} ข้อความ {นิพจน์}"
name = "Alice"; age = 30; print(f"ฉันชื่อ {name} และฉันอายุ {age} ปี")
{}
ได้โดยตรง: print(f"ผลรวมของ 5 และ 3 คือ {5+3}")
print(f"ราคา: {price:.2f}")
(จัดรูปแบบตัวแปร price
ให้แสดงทศนิยม 2 ตำแหน่ง)input()
ชื่อตัวแปรสำหรับเก็บข้อมูล = input("ข้อความแจ้งให้ผู้ใช้ป้อนข้อมูล (prompt): ")
input()
จะมีชนิดข้อมูลเป็น สตริง (str
) เสมอ ไม่ว่าผู้ใช้จะพิมพ์ตัวเลขหรือข้อความเข้ามาก็ตาม
age_str = input("กรุณาป้อนอายุของคุณ: ")
ถ้าผู้ใช้พิมพ์ 25
ตัวแปร age_str
จะเก็บค่าสตริง "25"
ไม่ใช่เลขจำนวนเต็ม 25
input()
(ซึ่งเป็นสตริง) มาคำนวณทางคณิตศาสตร์ จะต้องแปลงให้เป็นชนิดข้อมูลตัวเลข (int หรือ float) ก่อนint(ค่าสตริง)
: แปลงค่าสตริง (ที่แทนจำนวนเต็ม) ให้เป็นชนิดข้อมูลจำนวนเต็ม (int
)
num_str = "100"; num_int = int(num_str)
"hello"
หรือ "3.14"
) จะเกิดข้อผิดพลาด ValueError
float(ค่าสตริง)
: แปลงค่าสตริง (ที่แทนจำนวนเต็มหรือเลขทศนิยม) ให้เป็นชนิดข้อมูลจำนวนจริง (float
)
pi_str = "3.14"; pi_float = float(pi_str)
count_str = "5"; count_float = float(count_str)
(ผลลัพธ์คือ 5.0
)"world"
) จะเกิดข้อผิดพลาด ValueError
str(ค่าตัวเลข)
: แปลงค่าตัวเลข (int หรือ float) ให้เป็นชนิดข้อมูลสตริง (str
) (มีประโยชน์เมื่อต้องการนำตัวเลขไปต่อกับข้อความโดยไม่ใช้ f-strings แต่โดยทั่วไป f-strings จะสะดวกกว่า)
count = 10; message = "จำนวนสินค้าทั้งหมด: " + str(count)
age = int(input("กรุณาป้อนอายุของคุณ: "))
เพื่อรับค่าและแปลงชนิดข้อมูลในบรรทัดเดียวnum1 = 15
, num2 = 4
)/
), ผลหารปัดเศษทิ้ง (//
), และเศษเหลือจากการหาร (%
) ของตัวแปรทั้งสอง//
และ %
:
total_seconds = 125
) ให้คำนวณและแสดงผลเป็นจำนวนนาทีเต็มและจำนวนวินาทีที่เหลือ (เช่น “125 วินาที คือ 2 นาที กับ 5 วินาที”)%
counter = 0
จากนั้นใช้ +=
เพื่อเพิ่มค่าทีละ 1 หลายๆ ครั้ง และพิมพ์ค่า counter
ทุกครั้งที่เปลี่ยนแปลงbalance = 1000
สมมติว่าได้ดอกเบี้ย 10% ให้ใช้ *=
เพื่อคำนวณยอดเงินใหม่ (balance *= 1.10
)result = 10 + 5 * 2 - 8 / 4 + 2**3
)()
ในตำแหน่งต่างๆ เพื่อเปลี่ยนลำดับการทำงาน และสังเกตผลลัพธ์ที่เปลี่ยนแปลงไปbase
และ height
เป็นตัวแปร)input()
แต่กำหนดค่า C ในโปรแกรมก่อน)my_age = 20
, voting_age = 18
, friend_age = 20
, score = 75
print()
เพื่อแสดงผลลัพธ์ (True/False) ของการเปรียบเทียบต่างๆ เช่น:
print(f"ฉันอายุถึงเกณฑ์เลือกตั้งหรือไม่? {my_age >= voting_age}")
print(f"อายุของฉันกับเพื่อนต่างกันหรือไม่? {my_age != friend_age}")
print(f"คะแนนของฉันมากกว่า 50 หรือไม่? {score > 50}")
has_id_card = True
, is_member = False
, purchase_amount = 1200
and
, or
, not
เพื่อตรวจสอบเงื่อนไขซับซ้อน และพิมพ์ผลลัพธ์:
can_enter = (my_age >= 18) and has_id_card
get_discount = is_member or (purchase_amount > 1000)
is_not_member = not is_member
print(f"สามารถเข้างานได้: {can_enter}")
print(f"ได้รับส่วนลด: {get_discount}")
print(f"ไม่ได้เป็นสมาชิก: {is_not_member}")
input()
และการแปลงชนิดข้อมูล
user_name = input("กรุณาป้อนชื่อของคุณ: ")
print(f"สวัสดีครับ/ค่ะ, คุณ {user_name}!")
age_str = input("กรุณาป้อนอายุของคุณ (เป็นตัวเลข): ")
print(f"ข้อมูลที่รับมาคือ '{age_str}' และมีชนิดข้อมูลคือ {type(age_str)}")
# ลองนำไปคำนวณ: future_age = age_str + 5 # จะเกิด TypeError!
# print(f"อีก 5 ปี คุณจะอายุ {future_age} ปี") # แสดงให้เห็น Error
age_int = int(age_str)
future_age_corrected = age_int + 5
print(f"อีก 5 ปี คุณจะอายุ {future_age_corrected} ปี (คำนวณถูกต้องแล้ว)")
num1_str = input("ป้อนตัวเลขที่หนึ่ง: ")
num2_str = input("ป้อนตัวเลขที่สอง: ")
num1_float = float(num1_str) # สมมติว่าอาจเป็นทศนิยม
num2_float = float(num2_str)
sum_result = num1_float + num2_float
print(f"ผลรวมของ {num1_float} และ {num2_float} คือ {sum_result}")
print()
อย่างมีประสิทธิภาพ
average_score = 78.56789
print(f"คะแนนเฉลี่ยของคุณคือ: {average_score:.2f}")
(แสดงผลทศนิยม 2 ตำแหน่ง)product_price = 1250.759
print(f"ราคาสินค้า: {product_price:,.2f} บาท")
(แสดงผลทศนิยม 2 ตำแหน่ง พร้อมเครื่องหมายจุลภาคคั่นหลักพัน)