เฉลยแบบฝึกหัด: ตัวแปร และฟังก์ชัน#

โจทย์​เรื่องตัวแปรและฟังก์ชัน#

ข้อ 1#

def greet():
  print("สวัสดีชาวโลก")

ข้อ 2#

# สร้างฟังก์ชัน add() วิธีที่ 1
def add(a, b):
  sum = a + b
  return sum
# สร้างฟังก์ชัน add() วิธีที่ 2
def add(a, b):
  return a + b

ข้อ 3#

# สร้างฟังก์ชัน cuboid()
def cuboid(width, length, height):
  volume = width * length * height
  return volume

vol_box1 = cuboid(3, 7, 9)
print(vol_box1)
# เรียกใช้ฟังก์ชัน cuboid() คำนวณปริมาตรของกล่องที่มีความกว้าง 5.5 ซม. ยาว 6 ซม. และ สูง 8 ซม. 
vol_box2 = cuboid(5.5, 6, 8)
print(vol_box2)
264.0

ข้อ 4#

# สร้างฟังก์ชัน show_work_cuboid()
def show_work_cuboid(width, length, height):
  print("ความกว้าง")
  print(width)
  print("ความยาว")
  print(length)
  print("ความสูง")
  print(height)
  print("ปริมาตร")
  vol = cuboid(width, length, height)
  print(vol)

ข้อ 5#

def cumulative_sum(n):
  result = 0
  for i in range(1, n+1, 1): 
    result_pre = result
    result_post = result_pre + i
    result = result_post
  return result
def cumulative_sum(n):
  result = 0
  for i in range(1, n+1, 1): 
    result = result + i
  return result

ข้อ 6#

# สร้างฟังก์ชัน fact() ที่รับพารามิเตอร์ 1 ตัว
def fact(n):
    # กำหนดค่าเริ่มต้นของตัวแปร x เป็น 1
    x = 1
    # วนซ้ำตามจำนวนที่รับเข้ามาในพารามิเตอร์ n
    for i in range(n):
        # คูณค่า x ด้วยตัวเลขในช่วง 1 ถึง n
        x = x * (i + 1)
    return x

ข้อ 7#

ข้อ 7.1#

# สร้างฟังก์ชันที่รับค่าจำนวนเต็มและคืนค่าว่าหารด้วย 2 ได้กี่ครั้งจนกลายเป็น 1
def divide_two(n):
    # กำหนดค่าเริ่มต้นของตัวแปร count เป็น 0
    count = 0
    # นับจำนวนครั้งที่หาร n ด้วย 2 ได้ค่า x
    x = n / 2

    # ถ้า x เป็น 1 ให้คืนค่า x กลับ
    if x == 1:
        return x

    # วนลูปจนกว่า x จะเป็น 1
    while x != 1:
        # หาร x ด้วย 2
        x = x / 2
        # เพิ่มค่าของ count ไปอีก 1
        count += 1

    # คำนวณผลรวมของ count และ 1 แล้วคืนค่าออกไป
    result = count + 1
    return result
# โบนัส
def divide_two(n):
    count = 0
    # วนลูปจนกว่า n จะมีค่าน้อยกว่า 2
    while n >= 2:
        n = n / 2
        count += 1
    # ตรวจสอบว่าหาก n ไม่เท่ากับ 1 แสดงว่าไม่ใช่เลขฐาน 2
    if n != 1:
        print("input ไม่ใช่เลขฐาน 2")
    else:
        # คืนค่าจำนวนครั้งที่ต้องหารด้วย 2 จนกลายเป็น 1
        return count

ข้อ 7.2#

# นำเข้าโมดูล math สำหรับการทำงานกับฟังก์ชันทางคณิตศาสตร์
import math

# เรียกใช้ฟังก์ชัน math.log() จากโมดูล math เพื่อคำนวณลอการิทึม
# คำนวณ log ฐาน 2 ของ 32
print(math.log2(32))  # ผลลัพธ์คือ 5.0

# คำนวณ log ฐาน 2 ของ 16
print(math.log2(16))  # ผลลัพธ์คือ 4.0

# คำนวณ log ฐาน 2 ของ 4
print(math.log2(4))   # ผลลัพธ์คือ 2.0
5.0
4.0
2.0

ข้อ 8#

def convert_to_seconds(days, hours, minutes):
    # คำนวณเวลาทั้งหมดในหน่วยวินาที
    total_seconds = (days * 24 * 60 * 60) + (hours * 60 * 60) + (minutes * 60)
    return total_seconds  # คืนค่าเวลาทั้งหมดในหน่วยวินาที 

ข้อ 9#

# สร้างฟังก์ชัน recommend_size() ที่รับพารามิเตอร์ 1 ตัวเป็นขนาดรอบเอว
def recommend_size(waist_size_in_inch):
    # แปลงขนาดรอบเอวจาก นิ้ว เป็น เซนติเมตร
    waist_size_in_cm = waist_size_in_inch * 2.54
    
    # ตรวจสอบขนาดรอบเอวและแนะนำขนาดที่เหมาะสม
    if waist_size_in_cm < 76:
        size = 'S'
    elif waist_size_in_cm >= 76 and waist_size_in_cm <= 84:
        size = 'M'
    else:
        size = 'L'
    return size

ข้อ 10#

# วิธีที่ 1
def compute_patients(num_initial_patients, num_days):
    # เริ่มต้นจำนวนผู้ป่วยในวันแรก
    num_patient_pre = num_initial_patients

    # วนลูปตามจำนวนวันที่กำหนด
    for i in range(1, num_days + 1, 1):  # เริ่มจากวันที่ 1 ถึง num_days โดยเพิ่มขึ้นทีละ 1 (start, stop, step) 
        # คำนวณจำนวนผู้ป่วยที่เพิ่มขึ้นในวันนี้
        num_patient_plus = num_patient_pre * 3
        # คำนวณจำนวนผู้ป่วยในวันนี้จากจำนวนผู้ป่วยที่เพิ่มขึ้นในวันนี้กับจำนวนผู้ป่วยวันก่อนหน้า
        num_patient_now = num_patient_plus + num_patient_pre

        # พิมพ์ข้อมูลจำนวนผู้ป่วยในแต่ละวัน
        print("วันที่ ", i, ":", num_patient_now, "ผู้ป่วย")

        # ปรับจำนวนผู้ป่วยตอนนี้ให้เป็นจำนวนผู้ป่วยในวันก่อนหน้า เพื่อคำนวณจำนวนผู้ป่วยของวันถัดไป
        num_patient_pre = num_patient_now

    # คืนค่าจำนวนผู้ป่วยในวันสุดท้าย
    return num_patient_now
# ทดสอบฟังก์ชัน compute_patients()
compute_patients(5, 3)
วันที่  1 : 20 ผู้ป่วย
วันที่  2 : 80 ผู้ป่วย
วันที่  3 : 320 ผู้ป่วย
320
# วิธีที่ 2
def compute_patients(num_initial_patients, num_days):
    # เริ่มต้นจำนวนผู้ป่วยในวันแรก
    num_patient = num_initial_patients

    # วนลูปตามจำนวนวันที่กำหนด
    for i in range(1, num_days + 1, 1):  # เริ่มจากวันที่ 1 ถึง num_days โดยเพิ่มขึ้นทีละ 1
        # คำนวณจำนวนผู้ป่วยที่เพิ่มขึ้นในวันนี้
        num_patient_plus = num_patient * 3
        # คำนวณผลรวมของจำนวนผู้ป่วยที่เพิ่มขึ้นในวันนี้กับจำนวนผู้ป่วยในปัจจุบัน
        num_patient += num_patient_plus

        # พิมพ์ข้อมูลจำนวนผู้ป่วยในแต่ละวัน
        print("วันที่ ", i, ":", num_patient, "ผู้ป่วย")

    # คืนค่าจำนวนผู้ป่วยในวันสุดท้าย
    return num_patient

ข้อ 11#

ข้อ 11.1#

def days_to_hazard(max_immunity, alpha):
    # กำหนดค่าเริ่มต้นของ immunity เท่ากับ max_immunity ที่รับ input เข้ามา
    immune_preday = max_immunity

    # เริ่มคำนวณที่วันที่ 8
    immune_today = 40

    # สร้างตัวแปร safe_day เพื่อนับจำนวนวันที่ปลอดภัยจากโรค COVID-19
    safe_day = 0

    # วนลูปจนกว่าค่า immune_today จะน้อยกว่า 40
    while immune_today >= 40:
        # คำนวณค่าภายในร่างกายในวันนี้
        immune_today = immune_preday * alpha

        # ตรวจสอบว่าค่า immunity ในวันนี้ยังมากกว่าหรือเท่ากับ 40 หรือไม่
        if immune_today >= 40:
            # ถ้ายังมากกว่าหรือเท่ากับ 40 ก็เพิ่มจำนวนวันที่ปลอดภัยไปอีก 1 วัน
            safe_day += 1

        # อัพเดทค่า immunity ในวันก่อนหน้าไปยังวันปัจจุบันเพื่อเตรียมการวนลูปในรอบถัดไป
        immune_preday = immune_today

    # คืนค่าจำนวนวันที่ปลอดภัยพร้อมกับจำนวนวันเริ่มต้น 7 วัน
    return safe_day + 7

ข้อ 11.2#

def check_risk(name1, max_immune1, alpha1, name2, max_immune2, alpha2):
    # คำนวณจำนวนวันที่จะปลอดภัยจากโรค COVID-19 สำหรับบุคคล 1 และ 2
    days_p1 = days_to_hazard(max_immune1, alpha1)
    days_p2 = days_to_hazard(max_immune2, alpha2)

    # เปรียบเทียบจำนวนวันที่ต้องใช้ของทั้งสองบุคคลและแสดงผลลัพธ์
    if days_p1 < days_p2:
        print(f"{name1}ก่อน")
    elif days_p1 > days_p2:
        print(f"{name2}ก่อน")
# ทดสอบฟังก์ชัน check_risk()
check_risk('เอ๋', 400, 0.80, 'โจ้', 300, 0.75)
โจ้ก่อน

ข้อ 12#

ข้อ 12.1#

def hourly_pay(flag):
    # กำหนดค่าเริ่มต้นของค่าจ้างต่อชั่วโมง (pay) เป็น 0
    pay = 0

    # ตรวจสอบค่าของ flag เพื่อกำหนดค่าค่าจ้างต่อชั่วโมงตามเงื่อนไขที่กำหนด
    if flag == 0:
        pay = 0
    elif flag >= 1 and flag <= 10:
        pay = 50
    elif flag >= 11 and flag <= 20:
        pay = 120
    elif flag >= 21:
        pay = flag * 6.5

    # คืนค่าค่าจ้างต่อชั่วโมง
    return pay

ข้อ 12.2#

def daily_pay(first_flag, next_flag, hour):
  """
  กระบวนการคิด
  1. หาจำนวนธงในแต่ละชั่วโมง
  2. หาจำนวนเงินที่ได้ในชั่วโมงนั้น
  3. เก็บค่าจำนวนเงินแต่ละชั่วโมง
  4. คืนค่าจำนวนเงินค่าแรงทั้งวัน
  """
  """
  # 1st hour
  flag = first_flag + next_flag(0)
  pay = hourly_pay(flag)

  # 2nd hour
  flag = flag + next_flag
  flag = first_flag + next_flag(1)
  pay = hourly_pay(flag)

  # 3rd hour
  flag = flag + next_flag
  flag = first_flag + next_flag + next_flag
  flag = first_flag + next_flag(2)
  pay = hourly_pay(flag)

  # nth hour
  flag = first_flag + next_flag(n-1)

  for i in range(hour):
    # i = 0,1,2,3,..., hour-1
    # i = 0

  """
  final_pay = 0
  for i in range(hour):
    # i = 0,1,2,3,..., hour-1
    # i = 0
    flag = first_flag + (next_flag*i)
    pay = hourly_pay(flag)
    final_pay = final_pay + pay
  return final_pay

ข้อ 13#

def compute_bmi(height, weight):
    # แปลงความสูงจากเซนติเมตรเป็นเมตร
    height_m = height / 100.0

    # คำนวณ BMI
    bmi = weight / (height_m ** 2)

    # กำหนดหมวดหมู่ตามค่า BMI
    if bmi >= 30.0:
        classification = "อ้วนมาก"
    elif bmi >= 25.0:
        classification = "อ้วน"
    elif bmi >= 18.6:
        classification = "น้ำหนักปกติ"
    else:
        classification = "ผอมเกินไป"

    # พิมพ์ค่า BMI และหมวดหมู่
    print(classification)

    return bmi