python - 기초 이모저모

slocat·2023년 11월 25일
0

start-data

목록 보기
24/75

데이터 스쿨 파이썬 과정이 끝났다.
그런 기념으로(😉) 올해 봄에 샀던 파이썬 책을 사라락 읽어보았다.
우선은 함수 앞까지.

가우스처럼 창조적인 발상이 가능하다면 프로그램을 개발하는데 많은 도움이 되겠지만, 현재 프로그램 개발자들도 모두 이 정도의 재능을 갖고 있는 것은 아닙니다. 일반적인 프로그램 개발 업무는 수학자와 과학자들이 하는 일보다는 수학과 과학을 활용하는 일에 더 가깝기 때문입니다.
결국 보통 개발을 할 때는 ‘창조적 발상 몇 개를 해내는 것‘보다는 ’수많은 사람들이 이미 만든 수많은 창조적 방상을 다양하게 접하고 이해해서 조합하는 것‘이 더 중요합니다.
< 혼자 공부하는 파이썬 p.271 >

INTRO

  • 컴퓨터 프로그램 : 컴퓨터가 무엇을 해야 할지 미리 작성한 진행 계획
  • 프롬프트 = 인터렉티브 셸 = 대화형 셸 = 컴퓨터와 상호 작용하는 공간
  • ✅ 윈도우 파워셸로 코드 실행하기

표현식(expression) : 어떠한 값을 만들어 내는 간단한 코드

100
10 + 20 + 30
“ABC"

리터럴(literal) : 값 자체 ➡ data

100
"ABC"

문자열 자료형

여러 줄 문자열 만들기

text = """안녕하세요.
반갑습니다."""

print(text)

>>>
안녕하세요.
반갑습니다.
# 줄바꿈이 들어가지 않게 하려면 : \ 기호 사용

text = """안녕하세요. \
반갑습니다."""

print(text)

>>>
안녕하세요. 반갑습니다.

문자열에 적용할 수 있는 연산자

문자열 + 문자열

print('오늘은 ' + '토요일입니다.')

>>>
오늘은 토요일입니다.

문자열 반복 연산자 *

print("안녕" * 3)

>>>
안녕안녕안녕

문자 선택 연산자(인덱싱) : [ ]
문자열의 특정 위치에 있는 문자를 참조하는 것

text = "가나다라마바사아자차카타파하"
print(text[0])
print(text[5])

>>>
가
바
text = ["ABC", "DEF", "GHI"]

print(text[0][1])  # B
print(text[2][0])  # G

문자열 범위 선택 연산자(슬라이싱) : [ : ]
문자열의 일부를 추출하는 것

print(text[:5])
print(text[3:7])

>>>
가나다라마
라마바사

숫자 자료형

정수형 : 소수점이 없는 숫자
실수형 : 소수점이 있는 숫자

문자열을 숫자로 바꾸기(cast)

stringA = '100'
stringB = '100.0'

print(int(stringA), type(int(stringA)))
print(float(stringB), type(float(stringB)))

>>>
100 <class 'int'>
100.0 <class 'float'>

숫자가 아닌 것을 숫자로 변환하려고 하거나, 소수점이 있는 숫자 형식의 문자열을 int()로 캐스팅하면 ValueError 발생

문자열과 숫자 자료형의 다양한 기능

✅ VScode에서 자료형 뒤에 . 찍어보면 나오는 자동 완성 기능 참고

  • 문자열 자르기: str.split(' ')
  • 문자열 양옆의 공백 제거 : str.strip()
  • 문자열 구성 파악하기 : str.isOOO()
  • 문자열 찾기 : str.find(), str.rfind()
  • 문자열 in 연산자: str in str True or False
stringA = '100'
stringB = '100.0'

print(stringA in stringB)

>>>
True
  • 문자열 합치기 : join()
# 문자열.join(문자열로 구성된 리스트)

print("🍊".join(["1", "2", "3"]))

>>>
1🍊2🍊3

format() 함수와 f-문자열

string = '{}'.format(10)
print(string, type(string))

print('{:5d}'.format(50))	# 특정 칸에 출력
print('{:05d}'.format(50))	# 빈칸을 0으로 채우기
print('{:+d}'.format(50))	# 양수 음수 기호 표시하기
print('{: d}'.format(-50))	# 입력한 기호가 표시됨
print('{:=+d}'.format(50))	# 기호를 앞으로 밀기
print('{:g}'.format(50.0))  # 의미 없는 소수점 제거

>>>
10 <class 'str'>
   50
00050
+50
-50
+50
50

f-문자열이 format() 함수보다 간단하다.
그렇다면 format() 함수는 언제 사용하는 게 좋을까?

# 문자열 내용이 너무 많을 때 : 어떤 데이터가 출력되는지 확인하기 쉬움

# 데이터를 리스트에 담아서 사용할 때
data = ["ggomi", 3, "cat"]

print(f'이름: {data[0]}  나이: {data[1]}  종: {data[2]} ...')
print('이름: {}  나이: {}  종: {} ...'.format(*data))

>>>
이름: ggomi  나이: 3  종: cat ...
이름: ggomi  나이: 3  종: cat ...

조건문

False로 반환되는 값

None
0
0.0
빈 컨테이너(빈 문자열, 빈 리스트, ..)
number = input("정수 입력: ")
last_character = number[-1]

if last_character in "02468":
  print("짝수")
else:
  print("홀수")
  
>>>
정수 입력: 12345
홀수

반복문

for 반복자 in 반복할 수 있는 것:
코드

반복할 수 있는 것 = 이터러블(iterable)
내부에 있는 요소들을 차례차례 꺼낼 수 있는 객체

반대로 반복하기(역 반복문)

for i in range(5, -1, -1):
	pass
    
for i in reversed(range(5)):
	pass

while 반복문 + in 키워드 ➡ 리스트 내 중복 제거

list = [1, 2, 1, 2]
value = 2

# 리스트 안에 value가 있다면 반복
while value in list:
  list.remove(value)

print(list)

>>>
[1, 1]

while 반복문 + 유닉스 타임 ➡ 특정 시간 동안 프로그램 정지 시키기

유닉스 타임 : 세계 표준시 1970년 1월 1일 0시 0분 0초 기준으로 몇 초가 지났는지 정수로 나타낸 것

import time
target_tick = time.time() + 5

number = 0
while time.time() < target_tick: # 5초 동안 반복
  number += 1
  
print(number)

>>>
(5초가 지난 후)
54689724

그냥... 라이브러리 설치할 때가 생각나서

i = 0
while True:
  print(f'{i}번째 반복문 입니다.')
        
  i += 1
  inputText = input('설치하시겠습니까?(y/n)')

  if inputText in ["y", "Y"]:
    print('반복문을 종료합니다.')
    break
    
>>>
0번째 반복문 입니다.
설치하시겠습니까?(y/n)n
1번째 반복문 입니다.
설치하시겠습니까?(y/n)n
2번째 반복문 입니다.
설치하시겠습니까?(y/n)Y
반복문을 종료합니다.

리스트

list = [1, 2, 3, 4, 5]

print(min(list))	# 1
print(max(list))	# 5
print(sum(list))	#15

del list[1:3]		# 슬라이싱 삭제도 가능
print(list)

>>>
[1, 4, 5]

전개 연산자 : *list = list[0], list[1], ...

리스트 내부에 사용

a = [1, 2, 3, 4]
b = [*a, *a]

print(b)

>>>
[1, 2, 3, 4, 1, 2, 3, 4]

함수의 매개변수 위치에 사용

# 리스트에 요소를 추가할 때 비파괴적으로 구현 가능
a = [1, 2, 3, 4]
c = [*a, 5]

print(a)
print(c)

>>>
[1, 2, 3, 4]
[1, 2, 3, 4, 5]

리스트 내포

리스트명 = [표현식 for 반복자 in 반복할 수 있는 것 if 조건문]
array = ["사과", "자두", "배", "초콜릿", "바나나"]

output = [fruit
          for fruit in array
          if fruit != "초콜릿"]

print(output)

>>>
['사과', '자두', '배', '바나나']

비파괴적 함수 vs. 파괴적 함수

공부하면서 익혀나가면 된다.
비파괴적 함수 : 원본을 변화시키지 않는 함수

str.upper()
str.lower()
...

파괴적 함수

list.append()
list.extend()
list.insert()
...

TIP : 구문 내부에 긴 문자열을 써야할 때

text = (
    "이렇게 입력해도 "
    "하나의 문자열로 연결됩니다."
)

print(text)

>>>
이렇게 입력해도 하나의 문자열로 연결됩니다.
number = 2

print((
  "입력한 숫자는 {}입니다.\n"
  "{}는(은) 짝수입니다."
).format(number, number))

>>>
입력한 숫자는 2입니다.
2는(은) 짝수입니다.

0개의 댓글