เฉลยแบบฝึกหัด: ตัวแปร และฟังก์ชัน#
โจทย์เรื่องตัวแปรและฟังก์ชัน#
ข้อ 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