1
평균 계산
total_avg = sum(numbers)/len(numbers)
def calculate_avg(numbers):
total_avg = sum(numbers) / len(numbers)
return total_avg
total_avg = calculate_avg(numbers)
print("숫자들의 평균:", total_avg)
2
일교차 함수 : 가장높은기온 - 가장낮은기온
max(numbers) - min(numbers)
def calculate_diff_temperature(numbers):
diff_temp = max(numbers) - min(numbers)
return diff_temp
diff_temp= calculate_diff_temperature(numbers)
print("일교차:", diff_temp)
3
📌 최대값을 찾는 알고리즘 : 반복문 + 조건문
값을 하나씩 꺼내 와서 하나씩 비교해나가면서 최대값 찾는 알고리즘
numbers = [ , , , , ]
max_value = 0 -- 최댓값을 담는 변수 0으로 세팅
for n in numbers :
if n > max_value : --리스트의 각 숫자를 기존 최댓값과 비교
max_value = n --더 큰 값이 나오면 최댓값으로 업데이트
풀이방법 #1 for ... in문 + if문
1. 딕셔너리에서 값을 하나씩 빼와서 비교해나가면서 최댓값 찾기 .items()
for in sales_data.items() :
('apple', 50), ('orange', 2), ('banana', 30)
->1-1. 튜플 형태()로 나오니까 -> 인덱싱 ok
-> 1-2. for key, value in sales_data.items() :
변수를 2개 이상 설정하면 (key,value) 각각 나올 수 있음
최댓값을 구하는 알고리즘을 만족하면 key, value값을 반환
max_value = 0
for key, value in sales_data.items() :
if value > max_value :
max_value = value
2. 이러면 최댓값이 value에 담김
최댓값에 해당하는 이름은 key에서 가져오는 것.
max_key = key
4. 위에 조건들을 다 만족하면 retrun max_key, max_value
max_value = 0
for key, value in sales_data.items() :
if value > max_value :
max_value = value
max_key = key
return max_key, max_value
print(find_top_seller(sales_data))
풀이방법 #2 max() 함수
1. max() 함수로 최댓값을 가져오는 key 찾기
max_key = max(sales_data.keys(), keys=sales_data.get))
max(sales_data.keys()) 만 했을 경우 기본적으로 사전순 비교
but keys=리스트명.get -> 값을 기준으로 비교하는 옵션 추가
2. max()함수로 최댓값을 가져오는 value 찾기
max_value = max(sales_data.values())
3. max_key, max_value print
max_key = max(sales_data.keys(), key=sales_data.get)
max_value = max(sales_data.values())
print(max_key, max_value)
4
사칙연산 구하기
1.연잔자로 연산수행하는 if문
나눗셈 연산할 때 방법이 2가지로 나뉨.
풀이방법 #1 if문
1.연잔자로 연산 수행
단, 나눗셈(/) 연산시 분모숫자(num2)가 0이면 안됨
-> if num2 == 0 인 경우를 따로 설정 필요
elif operator == '/' :
if num2 == 0:
return 'Cannot divided by zero'
else:
return num1/num2
풀이방법 #2 Error를 사용한 try, except 문
2. 원래 0으로 나눠지면 ZeroDivisionError 라고 에러가 뜸.
-> try, except문 사용
📌 try, except 구문
: 에러가 떴을때, 에러가 뜬 상황에서 대처하거나 넘어가는 등 error를 활용하는 문법
try:
# 반복해서 수행할 작업
except 특정에러 : <-- 특정에러이름을 쓰면 그 에러일때만 수행
#Error가 떴을때 실행할 작업
try:
result = 10 / 0
print(result) -> Error 감지 시 except로 넘어감
except :
print('나누기 안됨')
5
이메일 주소 유효성 검사
0. for email in email_list : 리스트를 세우고
1. 조건 3가지로 구분
기준(조건)
1. @ 기호 포함 : @존재 하는지아닌지
2. @ 기호 앞 문자 하나이상 : @하나만 존재해야함(@기준으로 2개로 나눠져야하니까)
3. @ 기호 뒤에 도메인명, '.'을 포함한 하나 이상의 문자 : .이 존재하는지 아닌지
( 4. 공백이 존재하는지아닌지 )
조건1) @존재여부 if문
if '@' in email :
조건2) @하나만 존재해야함 .split() - 특정문자기준으로 나눠짐
split해서 나온 결과물의 갯수 = 2개여야함.
parts = email.split('@')
if len(parts) == 2 :
username, domain = parts
#username = parts[0]
#domain = parts[1]
->@f로 email을 나눴을때 나오는 것을 셌을때 (len()) == 2
혹은
email.count('@') != 1
-> @ 문자를 셌을 때 1개인 조건
조건3) .이 존재하는지 아닌지
if "." in domain :
print(f"{email} 유효한 이메일 주소입니다.")
4. 그렇지 않을 경우 "유효하지 않은 이메일 주소입니다" 써주기
방법 #1
4-1. 매 조건if 마다 그렇지 않을경우(else) 추가
if "." in domain:
print(f"{email} 유효한 이메일 주소입니다.")
else:
print(f"{email} 유효하지 않은 이메일 주소입니다.")
else:
print(f"{email} 유효하지 않은 이메일 주소입니다.")
else:
print(f"{email} 유효하지 않은 이메일 주소입니다.")
방법 #2
4-2. 반복문for에서 continue, break
📌 continue, break : 둘다 반복 멈추기
- continue : 다음 반복으로 강제로 넘어가기
원래 있던 코딩과정 중단하고 다음 반복으로 넘어감
- break : 무조건 코드 중지
반복도 안하고 그냥 무조건 중지
continue : 해당 조건 충족시 그냥 다음 반복으로 넘어감
-> 조건 중 하나라도 충족을 못한 경우 , continue 뒤에 있는 코드가 출력
print(f"{email} 유효하지 않은 이메일 주소입니다.")
if username and domain:
if "." in domain:
print(f"{email} 유효한 이메일 주소입니다.")
continue
print(f"{email} 유효하지 않은 이메일 주소입니다.")
전체함수
def validate_emails(email_list):
for email in email_list:
if "@" in email:
parts = email.split('@')
if len(parts) == 2:
username, domain = parts
if username and domain:
if "." in domain:
print(f"{email} 유효한 이메일 주소입니다.")
continue
print(f"{email} 유효하지 않은 이메일 주소입니다.")
6
중복된문자제거,문자가 처음 나타난순서대로, 문자등장빈도 구하기
📌 문자열 누적갯수(빈도수) 구할 때는 딕셔너리 활용****
{key, value} 로 짝지어져 있어서 조회하기 쉬움.
frequency = { } # 빈도수를 저장할 딕셔너리
for char in input_string : #글자 하나씩 가져오는 for문
if char in frequency.keys() : -- frequency의 key에 있는 경우에는 (딕셔너리에 이미 있는 문자라면)
frequency[char] += 1 #기존 값에 누적해서 1을 더함 (각 빈도수 업데이트) --> count 필요 없이 가능 !!
else : --처음 등장하는 문자라면
frequency[char] = 1 --#빈도수를 1로 초기화
print(frequency) #최종빈도수 출력
frequency = { } # 빈도수를 저장할 딕셔너리
for char in input_string : #글자 하나씩 가져오는 for문
if char in frequency.keys() : -- frequency의 key에 있는 경우에는 (딕셔너리에 이미 있는 문자라면)
frequency[char] += 1 #기존 값에 누적해서 1을 더함 (각 빈도수 업데이트) --> count 필요 없이 가능 !!
else : --처음 등장하는 문자라면
frequency[char] = 1 --#빈도수를 1로 초기화
print(frequency) #최종빈도수 출력
7
📌 거리기반 머신러닝 계산방법 (= 데이터 분포 유사도 계산방식과 비슷)
1. 유클리디안 거리 : 피타고라스( a^2+b^2=c^2)로 c=루트( a^2+b^2)
2. 맨해튼 거리 : l a-b l 절댓값
3. 코사인거리 : 코사인함수
📌 Packing & Unpacking
-Packing(패킹) : 여러개의 값을 하나의 변수(튜플, 리스트)에 저장하는 과정 { [ (x,y) ] }
-Unpacking(언패킹) : 딕셔너리 key-value를 각각 분해하거나 튜플(x,y)를 개별변수로 분해하는 등
여튼간에 분해과정
방법 #1
1. for player, positions in player_positions.items():
play, positions 을 딕셔너리{}에서 분리해서 가져옴
# player1 , position = [(0, 0), (1, 1), (2, 2), (5, 5)]
player2 , position = [(2, 2), (3, 8), (6, 8)] [(0, 0), (3, 4), (6, 8)]
2. 총_이동거리 초기화
-거리 = 누적해서 더해야하므로 변수 0으로 지정.
total_distance = 0.0 -- 소수점 받을 수 있게
3. 이동거리 계산 반복문
for i in range(0,len(positions)-1) :
값은 position에서 가져옴
* len(positions)-1) 인 이유 : 현재위치 i 와 다음위치 i+1을 비교해서 계산해야하니까
i+1이 position 리스트의 마지막 인덱스까지 도달해야 하므로 i+1 = 최종 len(position)
-> 반복횟수 = len(position) -1
4. 언패킹
거리'를 구해야하므로 값을 현재위치, 다음위치 2개씩 짝지어서 분리 : (x1,y1) (x2,y2) -> 언패킹
i i+1
그다음 x,y좌표 각각 분리 -> 인덱싱
x1 = positions[i][0] 0 --> i (현재위치)
y1 = positions[i][1] 0
x2 = positions[i+1][0] 1 -- > i+1인 수를 가져와야함
y2 = positions[i+1][1] 1
혹은
x1,y1 = positions[i]
x2,y2 = positions[i+1]
5. 거리계산
루트 a = a의 2분의1승
= a 의 0.5승
distance = (x2-x1) **2 + (y2-y1) **2 **0.5승 [피타고라스의 정리]
6. 누적거리 합산
total_distance+=distance
print(f{player}의 총 이동거리 : {total_disttance: .2f} 미터")
*.2f : (실수) 소수점 2자리까지만 반올림하여 출력
for player, positions in player_positions.items():
total_distance = 0.0
for i in range(0, len(positions)-1):
x1, y1 = positions[i]
x2, y2 = positions[i+1]
distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
total_distance += distance
print(f"{player}의 총 누적 이동 거리: {total_distance:.2f} 미터")
8
목표
이렇게 영어와 한글이 섞인 숫자들이 문자열 형태로 주어집니다.
이를 아라비아 숫자형태로 바꾸어서 출력하고,
한글로 적인 숫자의 개수, 영어로 적인 숫자의 개수를 차례로 반환하는 함수를 완성해주세요!
제한사항
참고로, 암호로 주어질 수 있는 영어숫자와 한글숫자의 범위는 아래와 같습니다.
- 영어숫자의 범위 : zero ~ nine
- 한글숫자의 범위 : 영 ~ 구
또한 입출력 값은 다음의 범위를 가집니다.
- 입력으로 주어지는 문자의 길이는 1에서 4까지 가질 수 있습니다.
- 출력값으로 나올 수 있는 정수는 0~9999 입니다
알고리즘 3가지 만들기
1. 갯수 세는 매커니즘
📌 갯수 카운트하는 매커니즘
- 몇번 반복했는지 갯수를 세주는 매커니즘
number = 0
for i in [1,2,3,4,5]
number += 1
-반족 후 누적횟수를 세주는 매커니즘
number = 0
for i in [1,2,3,4,5]
number += i
2. 문자열 분리
: 단어 기준 문자열 분리 -> 숫자로 변환 -> 다시 붙이기 .split()
1) 영어 -> 숫자변환
s = "one23three"
word = "one"
split1, split2 = s.split(word) -- "one" 기준으로 split # split1 = "", split2 = "23three"
s = split1 + str(1) + split2
"" 1 23three => # "123three"
2) 한글 -> 숫자변환
s = "123three오"
word = "오"
split1, split2 = s.split(word) -- "오" 기준으로 split # split1 = "123three", split2 = ""
s = split1 + str(5) + split2 # "123three5"
1.영, 한 따로 딕셔너리 만들기 en_num, ko_num
en_num = {'zero':0, 'one':1, 'two':2, 'three':3,
'four':4, 'five':5, 'six':6, 'seven':7,
'eight':8, 'nine':9}
ko_num = {'영':0, '일':1, '이':2, '삼':3, '사':4, '오':5,
'육':6, '칠':7, '팔':8, '구':9}
2. 영어 단어 -> 숫자로 변환
en_n =0
for word, num in en_num.items() : -- key, value 가져오긱
if word in s : --문자열 s안에 영어 숫자가 포함되어잇는지 조건 확인
en_n +=1 -- 영어 -> 숫자로 변환하는 갯수 카운트 증가
split1, split2 = s.split(word) -- 해당 단어를 기준으로 문자열 분리 후 ->
s = split1 + str(num) + split2 -- -> 숫자로 변환한 후 문자열 재구성
3. 한글 -> 숫자 변환
ko_n = 0
for word, num in ko_num.items():
if word in s:
ko_n += 1
split1, split2 = s.split(word)
s = split1 + str(num) + split2
4.결과 반환
return s, ko_n, en_n
*s : 문자열 s 안에 영단어/한글이 변환된게 있으면 고치는 함수엿음.
s = 최종 변환된 문자열
def solution(s):
en_num = {'zero':0, 'one':1, 'two':2, 'three':3,
'four':4, 'five':5, 'six':6, 'seven':7,
'eight':8, 'nine':9}
ko_num = {'영':0, '일':1, '이':2, '삼':3, '사':4, '오':5,
'육':6, '칠':7, '팔':8, '구':9}
en_n = 0
for item in en_num.items():
word, num = item
if word in s:
en_n += 1
split1, split2 = s.split(word)
s = split1 + str(num) + split2
ko_n = 0
for item in ko_num.items():
word, num = item
if word in s:
ko_n += 1
split1, split2 = s.split(word)
s = split1 + str(num) + split2
return s, ko_n, en_n'데이터 분석 > Python' 카테고리의 다른 글
| Pandas 메소드와 함수 (0) | 2025.03.19 |
|---|---|
| 결측치, 이상치(Z-SCORE, IQR) (0) | 2025.03.18 |
| pandas : Merge, join, concat, append , lamda, split, rrule (0) | 2025.03.18 |
| [start_coding] PYTHON 문법 : 리스트, 튜플, 딕셔너리, 함수 (0) | 2025.03.14 |
| [start_coding] 기초 PYTHON 문법 : 기초 연산, if, for, while True (0) | 2025.03.13 |