AI 헬스케어 3기 데이터 분석 코스 Python (3)
조건문은 주어진 조건에 따라 다른 코드를 실행하는 구문
의료 현장에서는 환자의 상태나 검사 결과에 따라 다른 처치를 결정해야
하므로 조건문이 매우 중요
if patient_age == 18:
print("성인이 되었습니다")
bool 자료형과 조건문
bool(불린) 자료형은 참(True) 또는 거짓(False) 두 가지 값만 가집니다.
patient_age = 25
if patient_age == 18:
print("성인이 되었습니다!")
조건문에서 bool 값 활용
if is_emergency:
print("응급상황입니다!")
응급상황입니다!
num = 0
if num:
print("숫자는 0이 아닙니다")
1일차
논리 연산자
and
or
not 연산자
True 반전
비교 연산의 결과는 bool
모든 비교 연산의 결과는 bool 자료형
# 환자 체온 확인
temperature = 38.5
if temperature >= 37.5:
print("발열이 있습니다. 해열제를 처방하겠습니다.")
발열이 있습니다. 해열제를 처방하겠습니다.
if-else - 만약에 A가 False라면
조건이 참일 때와 거짓일 때 각각 다른 코드를 실행합니다.
# 환자 나이에 따른 처방
patient_age = 16
if patient_age >= 18:
print("성인용 약물을 처방합니다.")
else:
print("소아용 약물을 처방합니다.")
소아용 약물을 처방합니다.
current = "점심"
if current == "점심":
print("치킨먹자!!")
else:
print("샐러드 먹자!!")
# BMI에 따른 체중 분류
bmi = 27.5
if bmi < 18.5:
weight_status = "저체중"
elif bmi < 25:
weight_status = "정상체중"
elif bmi < 30:
weight_status = "과체중"
else:
weight_status = "비만"
print(f"BMI {bmi}: {weight_status}")
# BMI에 따른 체중 분류
bmi = 27.5
if bmi < 18.5:
weight_status = "저체중"
elif bmi < 25:
weight_status = "정상체중"
elif bmi < 30:
weight_status = "과체중"
else:
weight_status = "비만"
print(f"BMI {bmi}: {weight_status}")
BMI 27.5: 과체중
# 환자 혈압 데이터
systolic = 140 # 환자의 수축기 혈압
normal_systolic = 120 # 정상 수축기 혈압 기준값
print(f"수축기 혈압 {systolic} > 정상 {normal_systolic}: {systolic > normal_systolic}")
print(f"혈압 정상여부: {systolic <= normal_systolic}")
print(f"고혈압 진단: {systolic >= 140}")
print(f"정상 혈압: {systolic == normal_systolic}")
print(f"혈압 이상: {systolic != normal_systolic}")
수축기 혈압 140 > 정상 120: True
혈압 정상여부: False
고혈압 진단: True
정상 혈압: False
혈압 이상: True
# 환자 알레르기 확인
patient_allergies = ["페니실린", "아스피린", "설파제"] # 환자의 알레르기 약물 목록
prescribed_drug = "페니실린" # 처방하려는 약물명
if prescribed_drug in patient_allergies:
print(f"⚠️ 주의: {prescribed_drug}에 알레르기가 있습니다!")
else:
print(f"✅ {prescribed_drug} 처방 가능합니다.")
⚠️ 주의: 페니실린에 알레르기가 있습니다!
and 연산자 - 모든 조건이 참일 때
# 수술 가능 여부 판단 (모든 조건을 만족해야 함)
patient_age = 45 # 환자 나이
systolic = 130 # 환자의 수축기 혈압
if patient_age >= 18 and systolic < 180:
print("✅ 수술 가능합니다.")
else:
print("❌ 수술 전 추가 검사가 필요합니다.")
✅ 수술 가능합니다.
or 연산자 - 하나라도 참이면
# 응급실 방문 권고 (하나라도 해당되면 응급상황)
chest_pain = True # 가슴 통증 여부
difficulty_breathing = False # 호흡곤란 여부
severe_headache = False # 심한 두통 여부
if chest_pain or difficulty_breathing or severe_headache:
print("🚨 즉시 응급실로 오세요!")
else:
print("일반 진료 예약을 잡으시기 바랍니다.")
🚨 즉시 응급실로 오세요!
not 연산자 - 반대 조건
# 처방 금기 확인
is_pregnant = False # 임신 여부
is_allergic = False # 해당 약물 알레르기 여부
if not is_pregnant and not is_allergic:
print("✅ 해당 약물 처방 가능합니다.")
✅ 해당 약물 처방 가능합니다.
# 백신 접종 가능 여부
has_fever = True # 발열 여부
if not has_fever:
print("백신 접종이 가능합니다.")
else:
print("발열이 있어 백신 접종을 연기합니다.")
발열이 있어 백신 접종을 연기합니다.
### 중첩 조건 - if 안에 if
# 3. 중첩 조건: 단계별 진료 절차
print("=== 응급 환자 처리 절차 ===")
# 1단계: 응급도 확인
if patient["emergency_level"] == "응급":
print("응급 환자입니다.")
# 2단계: 보험 확인
if patient["insurance"]:
print("보험 적용으로 즉시 치료 시작합니다.")
# 3단계: 진료과에 따른 담당의 배정
if patient["department"] == "내과":
patient["doctor"] = "김내과"
print(f"담당의: {patient['doctor']} 배정완료")
elif patient["department"] == "소아과":
patient["doctor"] = "이소아"
print(f"담당의: {patient['doctor']} 배정완료")
else:
print("담당의 배정 대기 중입니다.")
else:
print("보험 미적용이지만 응급이므로 치료 후 수납하겠습니다.")
else:
print("일반 환자입니다. 접수 후 대기해주세요.")
=== 응급 환자 처리 절차 ===
응급 환자입니다.
보험 적용으로 즉시 치료 시작합니다.
담당의: 김내과 배정완료
실전 예제: 환자 입원 승인 시스템
patient = {
"name": "이환자", # 환자 이름
"temperature": 37.2, # 체온 (섭씨)
"bed_preference": "일반실", # 희망 병실 유형
"insurance_type": "건강보험", # 보험 종류
"emergency_contact": "010-1234-5678" # 응급 연락처
}
# 병원 상황 (남은 병상 수)
hospital_status = {
"일반실": 2,
"특실": 5,
"중환자실": 0
}
patient_symptoms = ["발열", "기침", "인후통"]
if "발열" in patient_symptoms:
print("해열제 처방")
if "기침" in patient_symptoms:
print("기침약 처방")
if "두통" in patient_symptoms:
print("진통제 처방")
해열제 처방
기침약 처방
# 여기에 코드 작성
patient_age = 25 # 환자 나이
has_allergy = False # 알레르기 여부
if patient_age >= 18 and not has_allergy :
print("성인용 약물을 처방합니다.")
if patient_age >= 18 and has_allergy :
print("알레르기 대체 약물을 처방합니다.")
if patient_age < 18 :
print("소아용 약물을 처방합니다.")
성인용 약물을 처방합니다.
patient_age = 25
has_allergy = False
if patient_age >= 18:
if has_allergy:
print("알레르기 대체 약물을 처방합니다.")
else:
print("성인용 약물을 처방합니다.")
else:
print("소아용 약물을 처방합니다.")
성인용 약물을 처방합니다.
반복문 똑같은 기능을 반복해서 수행하는 구문
for문 - 정해진 횟수만큼
# 환자 명단 순회
patient_names = ["김환자", "이환자", "박환자", "최환자"] # 오늘 진료 환자 명단
for patient_name in patient_names:
print(f"{patient_name}님, 진료실로 들어오세요!")
김환자님, 진료실로 들어오세요!
이환자님, 진료실로 들어오세요!
박환자님, 진료실로 들어오세요!
최환자님, 진료실로 들어오세요!
ctrl + d
patient_names = ["김환자", "이환자", "박환자", "최환자"]
for patient_name in patient_names :
print (f"{patient_name}분 진료실로 들어 오세요!")
print("="*30)
patient_names = ["김환자", "이환자", "박환자", "최환자","문환자"]
for patient_name in patient_names:
print(patient_name)
김환자분 진료실로 들어 오세요!
==============================
이환자분 진료실로 들어 오세요!
==============================
박환자분 진료실로 들어 오세요!
==============================
최환자분 진료실로 들어 오세요!
==============================
김환자
이환자
박환자
최환자
문환자
# 기본 사용법 - 환자 대기 순번
patients = ["김환자", "이환자", "박환자", "최환자"] # 대기 환자 명단
for index, patient_name in enumerate(patients):
print(f"{index + 1}번째 대기: {patient_name}")
1번째 대기: 김환자
2번째 대기: 이환자
3번째 대기: 박환자
4번째 대기: 최환자
# 시작 번호 지정하기 - 병실 번호 배정
patients = ["김환자", "이환자", "박환자"] # 입원 환자 명단
print("=== 병실 배정 현황 ===")
for room_number, patient_name in enumerate(patients, 101): # 101호부터 시작
print(f"{room_number}호: {patient_name}")
=== 병실 배정 현황 ===
101호: 김환자
102호: 이환자
103호: 박환자
# 활용하기 - 처방전 목록
prescriptions = ["해열제", "항생제", "진통제", "비타민"] # 처방 약물 목록
print("오늘의 처방전")
for num, medicine in enumerate(prescriptions, start=1):
print(f"{num}. {medicine}")
오늘의 처방전
1. 해열제
2. 항생제
3. 진통제
4. 비타민
zip() - 여러 리스트를 동시에
# 기본 사용법 - 환자 기본 정보
patient_names = ["김환자", "이환자", "박환자"] # 환자 이름 목록
patient_ages = [65, 45, 32] # 환자 나이 목록
departments = ["내과", "외과", "소아과"] # 담당 진료과 목록
for data in zip(patient_names, patient_ages, departments):
print(data) # 튜플로 묶임
('김환자', 65, '내과')
('이환자', 45, '외과')
('박환자', 32, '소아과')
# 튜플로 묶여있는 데이터를 언패킹으로 각각 꺼내오기
for name, age, department in zip(patient_names, patient_ages, departments):
print(f"{name}님({age}세)은 {department}에서 진료받습니다.")
김환자님(65세)은 내과에서 진료받습니다.
이환자님(45세)은 외과에서 진료받습니다.
박환자님(32세)은 소아과에서 진료받습니다.
range() 함수 활용
# range(끝): 0부터 끝-1까지 병실 번호 생성
room_numbers = list(range(5)) # 0~4번 격리실
print(f"격리실 번호: {room_numbers}")
격리실 번호: [0, 1, 2, 3, 4]
# range(시작, 끝): 시작부터 끝-1까지 일반 병실 번호
general_rooms = list(range(101, 111)) # 101~110호 일반실
print(f"일반실 번호: {general_rooms}")
일반실 번호: [101, 102, 103, 104, 105, 106, 107, 108, 109, 110]
# range(시작, 끝, 간격): 간격만큼 증가하는 VIP실 번호
vip_rooms = list(range(201, 211, 2)) # 201, 203, 205, 207, 209호
print(f"VIP실 번호: {vip_rooms}")
VIP실 번호: [201, 203, 205, 207, 209]
# 거꾸로 카운트 - 수술 대기 순서
surgery_queue = list(range(10, 0, -1)) # 10번부터 1번까지
print(f"수술 대기 순서: {surgery_queue}")
수술 대기 순서: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
# range(끝): 0부터 끝-1까지 - 기본 검사 항목
for i in range(5): # 0, 1, 2, 3, 4
print(f"{i + 1}번째 기본 검사를 진행합니다.")
1번째 기본 검사를 진행합니다.
2번째 기본 검사를 진행합니다.
3번째 기본 검사를 진행합니다.
4번째 기본 검사를 진행합니다.
5번째 기본 검사를 진행합니다.
# range(시작, 끝): 시작부터 끝-1까지 - 병실 순회
for room_num in range(101, 106):
print(f"{room_num}호 병실을 점검합니다.")
101호 병실을 점검합니다.
102호 병실을 점검합니다.
103호 병실을 점검합니다.
104호 병실을 점검합니다.
105호 병실을 점검합니다.
# range(시작, 끝, 간격): 간격만큼 증가 - 2시간마다 투약
for hour in range(8, 21, 2):
print(f"{hour}시에 약물을 투여합니다.")
8시에 약물을 투여합니다.
10시에 약물을 투여합니다.
12시에 약물을 투여합니다.
14시에 약물을 투여합니다.
16시에 약물을 투여합니다.
18시에 약물을 투여합니다.
20시에 약물을 투여합니다.
# 거꾸로 카운트 - 마취 카운트다운
print("=== 마취 시작 ===")
for i in range(10, 0, -1): # 10, 9, 8, ..., 1
print(f"카운트다운: {i}")
print("마취 완료!")
=== 마취 시작 ===
카운트다운: 10
카운트다운: 9
카운트다운: 8
카운트다운: 7
카운트다운: 6
카운트다운: 5
카운트다운: 4
카운트다운: 3
카운트다운: 2
카운트다운: 1
마취 완료!
# 활용하기 - 혈압 측정 기록
patient_name = "김환자" # 환자 이름
base_systolic = 120 # 기준 수축기 혈압
print(f"=== {patient_name} 혈압 측정 기록 ===")
for day in range(1, 8): # 1주일간 측정
systolic = base_systolic + (day * 2) # 매일 2씩 증가 가정
print(f"{day}일차: {systolic} mmHg")
=== 김환자 혈압 측정 기록 ===
1일차: 122 mmHg
2일차: 124 mmHg
3일차: 126 mmHg
4일차: 128 mmHg
5일차: 130 mmHg
6일차: 132 mmHg
7일차: 134 mmHg
딕셔너리 반복
# 환자 기본 정보
patient_info = {
"name": "김환자", # 환자 이름
"age": 65, # 환자 나이
"blood_type": "A+", # 혈액형
"department": "내과" # 담당 진료과
}
# 키만 반복 - 환자 정보 항목 확인
for key in patient_info: # 기본적으로 키만 반복
print(f"정보 항목: {key}")
정보 항목: name
정보 항목: age
정보 항목: blood_type
정보 항목: department
# 키만 명시적으로 반복
for key in patient_info.keys():
print(f"데이터 키: {key}")
데이터 키: name
데이터 키: age
데이터 키: blood_type
데이터 키: department
# 값만 반복 - 환자 정보 내용만
for value in patient_info.values():
print(f"정보 내용: {value}")
# 키와 값 동시 반복 - 완전한 환자 정보
for key, value in patient_info.items():
print(f"{key}: {value}")
정보 내용: 김환자
정보 내용: 65
정보 내용: A+
정보 내용: 내과
name: 김환자
age: 65
blood_type: A+
department: 내과
# 기본 while문
count = 1
while count <= 5:
print(f"현재 숫자: {count}")
count += 1 # count = count + 1 과 같음
print("카운트 완료!")
현재 숫자: 1
현재 숫자: 2
현재 숫자: 3
현재 숫자: 4
현재 숫자: 5
카운트 완료!
num = 0 #변수 초기화
# num = num + 2 #재할당
num += 2
num += 5
num
break와 continue
break: 반복문을 완전히 종료
continue: 현재 반복을 건너뛰고 다음 반복으로
# break - 특정 조건에서 반복 종료
for i in range(1, 11):
if i == 5:
print("5를 만났으니 종료!")
break # 반복문 완전 종료
print(f"숫자: {i}")
숫자: 1
숫자: 2
숫자: 3
숫자: 4
5를 만났으니 종료!
# break - 특정 조건에서 반복 종료
for i in range(1, 11):
if i == 5:
print("5를 만났으니 종료!")
break # 반복문 완전 종료
print(f"숫자: {i}")
index = i
print("반복문 종료")
index
숫자: 1
숫자: 2
숫자: 3
숫자: 4
5를 만났으니 종료!
반복문 종료
4
# break - 특정 조건에서 반복 종료
for i in range(1, 11):
if i == 5:
print("5를 만났으니 종료!")
index = i
break # 반복문 완전 종료
print(f"숫자: {i}")
index = i
print("반복문 종료")
index
숫자: 1
숫자: 2
숫자: 3
숫자: 4
5를 만났으니 종료!
반복문 종료
5
# continue - 특정 조건에서 건너뛰기
for i in range(1, 6):
if i == 3:
print("3은 건너뛰기!")
continue # 3일 때만 아래 코드 실행 안함
print(f"숫자: {i}")
숫자: 1
숫자: 2
3은 건너뛰기!
숫자: 4
숫자: 5
내포용법 (List Comprehension)
# 기본 방법 - 환자 이름을 정중한 호칭으로 변환
patient_names = ["김환자", "이환자", "박환자"] # 환자 이름 목록
formal_names = [] # 정중한 호칭 목록
for name in patient_names:
formal_names.append(name + "님")
print(f"기본 방법: {formal_names}")
기본 방법: ['김환자님', '이환자님', '박환자님']
# 내포용법 사용
patient_names = ["김환자", "이환자", "박환자"]
formal_names = [name + "님" for name in patient_names]
print(f"내포용법: {formal_names}")
내포용법: ['김환자님', '이환자님', '박환자님']
patient_names = ["김환자","이환자","박환자"]
formal_names = [f'{name}님' for name in patient_names]
formal_names
# 숫자 변환 - 체온을 화씨로 변환
celsius_temps = [36.5, 37.2, 38.5, 39.1] # 섭씨 체온
fahrenheit_temps = [temp * 9/5 + 32 for temp in celsius_temps]
print(f"화씨 체온: {fahrenheit_temps}")
화씨 체온: [97.7, 98.96000000000001, 101.3, 102.38000000000001]
# 문자열 처리 - 약물명을 대문자로
medicines = ["aspirin", "ibuprofen", "acetaminophen"] # 약물명 목록
upper_medicines = [medicine.upper() for medicine in medicines]
print(f"대문자 약물명: {upper_medicines}")
대문자 약물명: ['ASPIRIN', 'IBUPROFEN', 'ACETAMINOPHEN']
# 조건 포함 - 고혈압 환자만 선택
systolic_pressures = [110, 145, 130, 160, 125, 180] # 수축기 혈압 목록
hypertension_cases = [pressure for pressure in systolic_pressures if pressure >= 140]
print(f"고혈압 수치: {hypertension_cases}")
고혈압 수치: [145, 160, 180]
# 조건 포함 - 성인/미성년자 분류
patient_ages = [15, 25, 35, 10, 45, 8, 65] # 환자 나이 목록
age_categories = ["성인" if age >= 18 else "미성년자" for age in patient_ages]
print(f"환자 분류: {age_categories}"
환자 분류: ['미성년자', '성인', '성인', '미성년자', '성인', '미성년자', '성인']
# 복합 처리 - 정상 체온만 화씨로 변환
temperatures = [36.2, 38.5, 37.1, 39.2, 36.8] # 체온 목록 (섭씨)
normal_temps_f = [temp * 9/5 + 32 for temp in temperatures if temp < 37.5]
print(f"정상 체온(화씨): {normal_temps_f}")
정상 체온(화씨): [97.16, 98.78, 98.24]
# 길이 계산 - 약물명 글자 수
drugs = ["아스피린", "이부프로펜", "타이레놀", "펜타닐"] # 약물명 목록
name_lengths = [len(drug) for drug in drugs]
print(f"약물명 길이: {name_lengths}")
약물명 길이: [4, 5, 4, 3]
zip() - 여러 리스트를 동시에
zip()은 여러 개의 리스트를 동시에 순회할 때 사용
# 기본 사용법 - 환자 기본 정보
patient_names = ["김환자", "이환자", "박환자"] # 환자 이름 목록
patient_ages = [65, 45, 32] # 환자 나이 목록
departments = ["내과", "외과", "소아과"] # 담당 진료과 목록
for data in zip(patient_names, patient_ages, departments):
print(data) # 튜플로 묶임
('김환자', 65, '내과')
('이환자', 45, '외과')
('박환자', 32, '소아과')
# 튜플로 묶여있는 데이터를 언패킹으로 각각 꺼내오기
for name, age, department in zip(patient_names, patient_ages, departments):
print(f"{name}님({age}세)은 {department}에서 진료받습니다.")
김환자님(65세)은 내과에서 진료받습니다.
이환자님(45세)은 외과에서 진료받습니다.
박환자님(32세)은 소아과에서 진료받습니다.
# 활용하기 - 검사 항목과 결과
test_items = ["혈압", "혈당", "콜레스테롤", "체중"] # 검사 항목명
test_results = [120, 95, 180, 70] # 검사 결과값
units = ["mmHg", "mg/dL", "mg/dL", "kg"] # 측정 단위
print("🔬 검사 결과")
for item, result, unit in zip(test_items, test_results, units):
print(f"{item}: {result} {unit}")
🔬 검사 결과
혈압: 120 mmHg
혈당: 95 mg/dL
콜레스테롤: 180 mg/dL
체중: 70 kg
# 길이가 다른 리스트 - 짧은 것에 맞춰짐
symptoms = ["발열", "기침", "두통"] # 환자 증상 목록
treatments = ["해열제", "기침약", "진통제", "항생제"] # 가능한 치료법
for symptom, treatment in zip(symptoms, treatments):
print(f"{symptom} → {treatment}")
# 출력: 3개만 출력됨 (symptoms가 3개라서)
발열 → 해열제
기침 → 기침약
두통 → 진통제
patient_names = ["김환자", "이환자", "박환자", "최환자"] # 환자 명단
prescribed_drugs = ["해열제", "항생제", "진통제", "비타민"] # 처방 약물
dosages = ["1일 3회", "1일 2회", "1일 1회", "1일 1회"] # 복용법
patient_names = ["김환자", "이환자", "박환자", "최환자"] # 환자 명단
prescribed_drugs = ["해열제", "항생제", "진통제", "비타민"] # 처방 약물
dosages = ["1일 3회", "1일 2회", "1일 1회", "1일 1회"] # 복용법
# 여기에 코드 작성
for patient_name,prescribed_drug,dosage in zip(patient_names,prescribed_drugs,dosages):
print(f"{patient_name}:{prescribed_drug}({dosage})")
김환자:해열제(1일 3회)
이환자:항생제(1일 2회)
박환자:진통제(1일 1회)
최환자:비타민(1일 1회)
temperatures = [36.2, 37.8, 36.5, 38.2, 37.1, 39.0, 36.8] # 환자들의 체온 (섭씨)
# 여기에 코드 작성 (화씨 변환 공식: 섭씨 * 9/5 + 32)
fahrenheit_temps = [temp * 9/5 + 32 for temp in temperatures]
fever_temps_fahrenheit = [temp for temp in fahrenheit_temps if temp >= 100]
print(f"발열 환자 체온(화씨): {fever_temps_fahrenheit}:.f1")
# @title 정답
temperatures = [36.2, 37.8, 36.5, 38.2, 37.1, 39.0, 36.8]
fever_temps_fahrenheit = [temp * 9/5 + 32 for temp in temperatures if temp >= 37.5]
print(f"발열 환자 체온(화씨): {fever_temps_fahrenheit}")


댓글
댓글 쓰기