벌써 파이썬을 배우기 시작한지 4일이 지났습니다!
아직 익숙하지 않지만 언젠가 익숙해질 날이 오겠죠?!?!
오늘도 열심히 달려보겠습니다~~!
파이썬 종합반
공부 자료 : https://colab.research.google.com/drive/1FVW9pkUHyUfBBNb_UskBtLXiWCBfSR9W#scrollTo=lhCAdWLKdHXy
강의 자료 : [SCC] 알면 유용한 파이썬 문법들!
드디어 오늘 파이썬 종합반 5주차입니다!!
오늘은 파일 저장하기, 파일 불러오기, 패킺, 포맷팅, 리스트 컴프리헨션, lambda 함수,split 등에 대해 배웠습니다.
먼저 파일 확장자에 대해 알아보자면,
파일 확장자에는 CSV파일(.csv), Excel 파일(.xls, .xlsx), JSON 파일(.json), 텍스트 파일(.txt, .dat 등)이 있습니다.
파일 불러오는 함수와 저장하는 방법은 위 공부 자료에 나와 있습니다
패키지는 관련된 여러 개의 모듈을 포함하는 디렉토리로, 데이터 분석을 위한 파이썬 패키지들은 다양한 작업을 수행하는 데 필수적입니다.
패키지를 사용하면 코드의 재사용성을 높이고 개발 속도를 빠르게 하며 코드의 가독성을 향상시켜 개발자들이 프로젝트를 더 효율적으로 개발하도록 돕습니다.
패키지는 맨 처음 파이썬을 사용할 때 필요한 패키지를 제일 위에 한 번에 불러놓고 사용하는 것이 편리합니다.
패키지의 종류에는 pandas, numpy, matplotlib, seaborn, scikit-learn, stats,odels, scipy, tensorflow, pytorch가 있으며 각각 고유한 기능과 장점이 있습니다.
다음은 포맷팅입니다.
포맷팅에는 여러 방법이 있는데 f-string 포맷팅이 가장 최근 방법으로 쉬운 편인 것 같습니다.
사용 방법은 아래 코드와 같이 문자열 맨 앞에 f를 쓰고 내가 놓고자 하는 변수의 위치에 중괄호를 사용하여 변수를 기입하면 됩니다.
x = 10
print(f"변수 x의 값은 {x}입니다.")
리스트 컴프리헨션은 전에 손보미 튜터님의 세션에서 잠깐 다뤘습니다. 그때는 이해가 잘 안갔는데 오늘 강의를 보면서 다시 배우니 이해가 갔습니다.
리스트 컴프리헨션의 구조는 다음과 같습니다.
[표현식 for 항목 in iterable if 조건문]
구조만 봐서는 이해가 안가서 예제도 보여드리겠습니다!
# 예시: 1부터 10까지의 숫자를 제곱한 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares) # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 예시: 리스트에서 짝수만 선택하여 제곱한 리스트 생성
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares) # 출력: [4, 16, 36, 64, 100]
# 예시: 문자열 리스트에서 각 문자열의 길이를 저장한 리스트 생성
words = ["apple", "banana", "grape", "orange"]
word_lengths = [len(word) for word in words]
print(word_lengths) # 출력: [5, 6, 5, 6]
# 예시: 리스트 컴프리헨션을 중첩하여 2차원 리스트 생성
matrix = [[i for i in range(1, 4)] for j in range(3)]
print(matrix) # 출력: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
람다 함수는 익명 함수로 이름 없이 정의되는 함수입니다. def를 사용하지 않고 lambda를 사용하여 정의합니다.
람다 함수는 코드를 더 간결하게 만들어 주고 그렇기 때문에 가독성이 좋습니다.
add = lambda x, y: x + y
print(add(3, 5)) # 출력: 8
square = lambda x: x ** 2
print(square(4)) # 출력: 16
예시를 같이 보면 이해하기 더 쉽습니다!
파일을 찾을 때 사용하는 glob 함수, 파일 시스템을 관리, 디렉토리 탐색, 파일 조작하는 데 사용하는 os 모듈에 대해서도 배웠는데 알고 있으면 편하겠지만 당장은 크게 필요할거 같지 않아 따로 정리하지는 않고 강의를 듣기만 하였습니다.
split은 저번에 몰라서 gpt의 힘을 빌려 따로 공부했었는데 이번 강의에 나왔습니다..!
리스트의 메서드로 문자열을 여러 개로 쪼갤 때 사용하는 것입니다.
class는 객체를 만들기 위한 툴 또는 설계도 입니다. class는 설명을 들으니 이해는 가는데 뭔가 문제를 더 풀어봐야 할 것 같습니다!
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 객체 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
파이썬 개인 과제
https://colab.research.google.com/drive/1zaWrQcII7Ptv5jM08OTEBU9O33s7UBf5#scrollTo=wTpzUHvzdTw7
풀면서 조금이라도 막혔던 문제들을 가져와 봤습니다!
numbers = [10, 20, 30, 40, 50]
def calculate_diff_temperature(numbers):
max_temp = max(numbers)
min_temp = min(numbers)
diff_temp = max_temp - min_temp
return diff_temp
diff_temp= calculate_diff_temperature(numbers)
print("온도차:", diff_temp)
최고 값과 최저 값의 차이를 구하는 문제인데 최고 값과 최저 값을 어떻게 코드로 짜야할지 몰랐는데 max와 min라는 내장함수가 있어서 이걸 사용하면 됐었습니다! 몰라서 gpt의 힘을 빌려 풀었습니다...ㅎㅎ
def find_top_seller(sales_data):
max_sales = 0
top_product = ""
for product, sales in sales_data.items():
if sales > max_sales:
max_sales = sales
top_product = product
return top_product, max_sales
# 예시 데이터
sales_data = {
"Motherboard": 50,
"SSD": 2,
"Graphics Card": 30
}
print("가장 많이 판매된 제품과 수량 :", find_top_seller(sales_data))
# 실행 결과
# 가장 많이 판매된 제품과 수량 : ('Motherboard', 50)
가장 많이 판매된 제품의이름과 수량을 반환하는 문제입니다.
판매 수량의 초기값을 0으로, 제품의 이름은 빈 문자열로 설정하고 시작합니다.
for문을 통해 딕셔너리를 탐색하고, 조건문으로 최대 판매 수량을 확인하여 이를 반복 후 결과를 반환합니다.
import math
# 장비별 이동 거리 계산 함수
def calculate_single_distance(machine_positions):
for machine, positions in machine_positions.items():
# 위치는 항상 두 개의 좌표만 제공됨
x1, y1 = positions[0]
x2, y2 = positions[1]
distance = ((x2-x1)**2 +(y2-y1)**2)**(1/2)
print(f"{machine}의 이동 거리: {distance:.2f} 미터")
# 장비별 위치 데이터
machine_positions = {
"Machine A": [(0, 0), (5, 5)],
"Machine B": [(2, 2), (6, 8)],
"Machine C": [(0, 0), (3, 4)]
}
# 이동 거리 계산 실행
calculate_single_distance(machine_positions)
장비가 이동한 총 누적 거리를 계산하는 문제로, 장비가 이동한 두 위치 간의 거리는 유클리드 거리 공식을 사용하여 계산합니다.
처음에 positions[0]과 positions[1] 자리에 뭐가 들어가야 하나 고민했는데 생각해보니 리스트의 자리를 적어야 하는 너무 당연한 문제였습니다..ㅋ
def equipment_code_decoder(code_list):
korean_to_arabic ={
"영":"0", "일":"1", "이":"2", "삼": "3", "사":"4",
"오":"5", "육":"6", "칠":"7", "팔":"8", "구":"9"
}
for code in code_list:
converted_code = ""
for char in code:
if char in korean_to_arabic:
converted_code += korean_to_arabic[char]
else:
converted_code += char
print(f"[{code}]에 대한 설비 코드는 [{converted_code}]입니다.")
# 설비 코드 목록
code_list = [
"삼5이사",
"0오6칠",
"48삼구",
"이74팔",
"9일이삼"
]
# 코드 변환 함수 실행
equipment_code_decoder(code_list)
한글 숫자와 아라비아 숫자가 혼합된 설비 코드 문자열이 주어졌을 때, 모든 숫자를 아라비아 숫자로 변환하는 코드를 작성하는 문제입니다! 어제 문제를 제대로 안읽고 한글은 아라비아 숫자로, 아라비아 숫자는 한글 숫자로 바꾸는 건 줄 알고 복잡해서 그냥 넘겼는데 오늘 다시 보니 조금만 찾아보면 그래도 풀 수 있을 것 같아서 다시 풀어보았습니다.
그리고 다양한 코드를 작성할 수 있으면 좋을 것 같아서 다른 코드도 가져와 봤습니다!
def equipment_code_decoder(code_list):
korean_to_arabic = {
"영": "0", "일": "1", "이": "2", "삼": "3", "사": "4",
"오": "5", "육": "6", "칠": "7", "팔": "8", "구": "9"
}
for code in code_list:
converted_code = code
for korean_num, arabic_num in korean_to_arabic.items():
converted_code = converted_code.replace(korean_num, arabic_num)
print(f"[{code}]에 대한 설비 코드는 [{converted_code}]입니다.")
# 설비 코드 목록
code_list = [
"삼5이사",
"0오6칠",
"48삼구",
"이74팔",
"9일이삼"
]
# 코드 변환 함수 실행
equipment_code_decoder(code_list)
replace() 함수를 이용한 코드입니다.
replce 함수를 어떻게 사용하는지 몰라서 replace 함수에 대해 찾아봤습니다.
str.replace(old, new[, count])
count는 생략 가능하고, old를 new로 모두 치환합니다.
그래서 위의 문제에서는 korean_num을 arabic_num으로 치환합니다.
세션 복습
공부한 자료 :
https://colab.research.google.com/drive/1F0gEVKssetO_wl92i8v0ftbkRc4-1mCe#scrollTo=lQPJSeUpstx4
리스트 컴프리헨션 강의를 안 듣고 세션을 들으니까 이해가 안가서 오늘 다시 풀어봤습니다.
text = "This is a sample string for counting vowels."
vowels = "aeiouAEIOU"
count = 0
for char in text:
if char in vowels:
count += 1
print("문자열 내 모음 개수:", count)
text = "This is a sample string for counting vowels."
vowels = "aeiouAEIOU"
count = 0
count = len([char for char in text if char in vowels])
print("문자열 내 모음 개수:", count)
위의 코드를 리스트 컴프리헨션을 사용하여 아래 코드로 바꿔 봤습니다.
확실히 리스트 컴프리헨션을 사용하니까 코드가 간결해집니다!
다음은 반복문 예제입니다.
1부터 입력한 정수까지 1씩 증가시켜 출력하는 프로그램을 작성하되, 3의 배수인 경우는 출력하지 않도록 만들어보았습니다.
동일한 문제를 for문과 while문으로 출력해보았습니다.
n = int(input("정수를 입력하세요 (1 ~ 100): "))
result = []
for i in range(1, n + 1):
if i % 3 != 0:
result.append(i)
# 리스트를 문자열로 변환 후 출력
print(" ".join(map(str, result)))
n = int(input("정수를 입력하세요 (1 ~ 100): "))
# 초기값 설정
i = 1
while i <= n:
if i % 3 != 0:
print(i, end=" ")
i += 1
join()과 map()이 뭔지는 알겠는데 아직 익숙하지가 않아서 그런지 코드 짤 때 바로바로 생각이 나지 않습니다..ㅜ
문제를 풀면서 익숙해져야 할 것 같습니다!!!
어제 푼 예제들도 풀어보았습니다!
먼저 "자연수를 뒤집어 배열로 만들기" 입니다.
n = int(input("정수를 입력하세요(1~1000000) :"))
def solution(n):
li =list(str(n))[::-1]
answer= list(map(int,li))
return answer
print(solution(n))
숫자를 입력받은 뒤 문자열로 바꾸고 이를 리스트에 담습니다. 그리고 슬라이싱을 사용해서 리스트를 뒤집습니다. 이를 다시 숫자로 변환 후 리스트를 뒤집은 최종값을 반환합니다.
슬라이싱의 step이 음수인 경우 역순으로 슬라이싱합니다.
n = int(input("정수를 입력하세요(1~1000000) :"))
def solution(n):
answer = []
li=list(str(n))
li.reverse()
answer= list(map(int,li))
return answer
print(solution(n))
같은 문제를 다른 코드로 작성한 것입니다. reverse를 사용했는데, reverse는 리스트의 요소를 역순으로 변경하는 메서드입니다.
다음은 "자릿수 더하기" 예제입니다.
n = int(input("정수를 입력하세요(1~1000000) :"))
def solution(n):
answer = 0
for i in str(n):
answer+=int(i)
return answer
print(solution(n))
숫자를 입력받아 이를 문자열로 바꾸고 하나씩 순회하면서 변수 i에 저장합니다. i를 숫자로 변환하고 이를 하나씩 answer에 더합니다. 그리고 최종 answer를 반환합니다.
다음은 같은 예제를 리스트 컴프리헨션을 사용해 봤습니다.
n = int(input("정수를 입력하세요(1~1000000) :"))
def solution(n):
answer = sum([int(i) for i in str(n)])
return answer
print(solution(n))
3차 세션에서는 함수에 대해 알아보고 관련 예제들을 풀어보았습니다.
세션에서 어려웠던 lambda 함수를 다시 공부해 봤습니다.
# 람다 함수
numbers = [1, 2, 3, 4, 5]
answer= list(map(lambda x: x**2, numbers))
print(answer) # 출력: [1, 4, 9, 16, 25]
# 반복문
numbers = [1, 2, 3, 4, 5]
answer= []
for num in numbers:
answer.append( num ** 2)
print(answer)
# 리스트 컴프리헨션
numbers = [1, 2, 3, 4, 5]
answer = [x**2 for x in numbers]
print(answer)
# 함수
numbers = [1, 2, 3, 4, 5]
def square_numbers(numbers):
answer = []
for num in numbers:
answer.append(num ** 2)
return answer
print(square_numbers(numbers))
위 코드들은 다 같은 결과를 출력합니다. 람다 함수와 리스트 컴프리헨션이 짦고 간결해서 사용하기 편할 것 같습니다.
아직은 반복문이 더 익숙해서 람다 함수와 리스트 컴프리헨션 문제를 더 풀어봐야 할 것 같습니다!!
오늘은 해야 할 게 많이 없다고 생각해서 프로그래머스에서 문제를 풀어보려고 했는데 막상 공부하다 보니 시간이 훌쩍 지나가 있어서 문제를 아예 하나도 풀지 못했습니다.
다음주부터 다시 힘내서 문제를 풀어보도록 하겠습니다~!!!
'내일배움캠프_QAQC 1기 > TIL' 카테고리의 다른 글
| [12/31] TIL_강의, 아티클, 세션 (1) | 2024.12.31 |
|---|---|
| [12/30] TIL_강의, 과제 해설 (3) | 2024.12.30 |
| [12/26] TIL_강의, 아티클, 세션, 과제, 개인 공부 (3) | 2024.12.26 |
| [12/24] TIL_강의, 아티클, 세션 (2) | 2024.12.24 |
| [12/23] TIL_강의, 세션 (1) | 2024.12.23 |