Learn & Record

Python (list, dict, escape, f-strings, format, print, tuple, 산술연산자, 연산자, 조건문, 표준입력문) 본문

Dev/Python

Python (list, dict, escape, f-strings, format, print, tuple, 산술연산자, 연산자, 조건문, 표준입력문)

Walker_ 2024. 2. 26. 17:12

1. list

 - 배열

 - 요소의 추가와 삭제

 - append() : 항상 마지막 요소로 추가

 - insert() : 추가할 인덱스(위치 정보)를 지정

print()
li = [10,20,30,40]
print(li[0:3])
print(li[:2])
print(li[::2])
print(li[-2::])

print()
scores = [50,40,30]
scores.append(100) # 마지막 요소에 100을 추가
print(scores) # [50,40,30,100]
print(scores[1]) # 40
scores.insert(0,90) # 인덱스 0에 90을 추가
print(scores) # [90,50,40,30,100]
print(scores[1]) # 50 \

# pop() : 인덱스를 전달하지 않으면 마지막 요소 삭제
# 인덱슬르 전달하면 전달된 인덱스의 요소를 삭제
scores.pop() # 마지막 요소를 제거
print(scores) # [90, 50, 40, 30]
scores.pop(0) # 0번 인덱스 요소를 제거
print(scores) # [50, 40, 30]

 

 

2. 튜플 ' ( ' 소괄호 사용 

 - 리스트와 거의 유사, 대신 값을 추가, 수정, 삭제가 안됨

 - 소괄호나 튜플 함수를 이요해서 생성

 - 값들을 콤마로 분리하여 전달하면 자동으로 튜플이 생성

 - 리스트와 마찬가지로 각 요소를 구분하기 위한 인덱스가 부여되고 슬라이싱도 지원

t1 = (1,2,3)
print(t1) # (1,2,3)

def sample():
    return 1,2

print(sample()) # (1, 2)

# 리스트를 튜플로 변경
t3 = tuple([100, 3.14, 'hello'])
print(t3) # (100, 3.14, 'hello')

# 값을 1개만 보관하는 튜플을 생성할 경우에는 값과 콤마(,)를 반드시 함께 작성
t4 = (100)
print(t4) # 100 / 값으로 인식
print(type(t4)) # < class 'int'>

t5 = (100,)
print(t5) # (100,) / 튜플로 인식
print(type(t5)) # <class 'tuple'>

# 값을 swap 교환
a = 10
b = 20
print(a, b) # 10 20
a,b = b,a
print(a ,b) # 20 10

a, b = 100, 200
print(a)
print(b)

 

 3. set(집합) 자바의 set과 유사

 - 중복된 값을 저장할 수 없음, 순서가 없음

 - 수학의 집합 개념을 구현한 자료형

 - 인덱싱, 슬라이싱을 사용 할 수 없음

 - 중복된 값의 저장이 불가능해서 중복 제거용으로 사용

# 중괄호({}) 또는 set() 함수를 이용하여 생성
li = [1,1,2,2,3,3]
print(li) # [1,1,2,2,3,3]
print(set(li))  # {1,2,3}
li = list(set(li)) # 중복된 값을 제거
print(li) # [1, 2, 3]

# 추가와 삭제
# 추가를 할 때 add() 메소드 사용
# 삭제할 때는 remove()나 discard() 메소드 사용
s = {10,20,30}
s.add(40)  # 세트에 40을 추가
s.remove(20) # 세트애서 20을 제거, 20이 없으면 오류가 발생
print(s) # {10, 30, 40}
s.discard(30) # 세트에서 30을 제거. 30이 없어도 오류가 발생하지 않음
print(s) # {40,10}

 

4. JupyterNotebook

 - 셀 형태로 파이썬 코드를 구현

 - 코드 방식, 마크다운 방식 지원

 - 구글 코랩도 비슷한 형식

 

5. 딕셔너리(dict) 자바의 맵과 유사.

 - key : value 형식, 중괄호 사용 '{'

 - 사전처럼 어떤 단어와 그 단어의 의미로 구성

 - 키 key 와 값 value를 단어와 단어의 의미처럼 사용

 - 딕셔너리는 인덱스가 존재하지 않는 대신 키를 인덱스처럼 사용함

 - 키 값을 알면 저장된 값을 확인할 수 있는 구조

d = {'a' : 'apple', 'b':'banana'} # {key : vlaue, key:value}
print(d)
print(type(d)) # <calss 'dict'>
print(d['a'])  # apple / 인덱스 대신 key를 사용하면 value가 반환
print(d['b']) # banana

# 키값의 자료형이 문자열(str) 이라면 dict() 함수를 이용해서 생성 가능
d = dict(a = 'apple', b='banana')
print(d) # {'d' : 'apple', 'b' : 'banana')

# 딕셔너리 요소의 추가와 삭제
# 새로운 키와 값을 조합해서 작성
print()
dic = {'apple' : '사과'}
dic['watermelon'] = '멜론'
print(dic) # {'apple' : '사과', 'watermelon' : '멜론'}

# 존재하는 키값을 이용해서 정의하면, value 수정으로 인식
dic['watermelon'] = '수박'
print(dic) # {'apple' : '사과', 'watermelon' : '수박'}

# setdefault() 메소드를 이용한 추가
me = {'name' : 'james'}
me.setdefault('age', 20)
print(me) # {'name':'james', 'age' :20}
me.setdefault('age',30) # 동일한 키가 있는 경우에 무시
print(me) # {'name' : 'james', 'age' : 20}

# update() 메소드의 경우 존재한느 키값이면 수정
me.update(age = 25)
print(me)

# update() 메소드의 경우 존재하지 않는 키값이면 추가
me.update(address='seoul')
print(me)

# pop() 메소드에 키값을 전달하면 해당 키값의 데이터가 삭제
me.pop('address')
print(me) # {'name' : 'james', 'age' : 25}

# get() 메서드가 전달한 key에 해당하는 value를 반환
print(me.get('name')) # james

 

6. mutable, immutable

# mutable 과 immutable
# mutable : 생성된 후에도 변경이 가능한 자료형 : list, set, dict
# immutable : 생성된 후에는 변경이 불가능한 자료형 : int, float, str, tuple

# mutable
# 할당받는 메모리에 저장된 값을 다른 값으로 바꿀 수 있음
# id() : 객체의 고유값 변환. 메모리 주소를 구별하기 위한 용도로 사용
me = [1,2,3]
print(id(me)) # 객체 고유값
me.append(4)
print(id(me)) # 객체 고유값 / 할당된 메모리 주소는 변경이 되지 않음

# immutable
# 한 번 생성하면 최초로 저장된 값을 다른 값으로 바꿀 수 없음
obj = 10
print(id(obj)) # 객체 고유값
obj = obj + 1
print(obj) # 11
print(id(obj)) # 객체 고유값 / 할당된 메모리 주소가 변경이 됨
# 메모리에 저장된 데이터를 수정하는 것이 아니라, 새로 할당을 받아서 데이터를 저장

 

7. 이스케이프 문자

# 이스케이프 문자
# \(back slash)로 시작

print('Hello \'World\'') # 문자열안에서 작은 따옴표 사용
print("Hello \"World\"") # 문자열안에서 큰 따옴표 사용
print('*\n**\n***') # \n 줄 바꿈 line feed
# 등등

 

8. print() 함수

# print() 함수
# end : value 출력 후 출력할 문자
# end 속성을 사용하지 않고 print() 함수를 사용하면 출력 후 자동으로 줄 바꿈이 진행
# sep : 출력할 value의 구분자
# sep 속성을 사용하지 않고 print() 함수를 사용하면 출력 대상은 공백으로 구분
# file : 출력 방향 지정
# file 속성을 사용하지 않고 print() 함수를 사용하면 출력 대상은 모니터에 출력

print('재미있는', '파이썬') # sep 값을 지정하지 않으면 공백이 들어감
print('재미있는', '파이썬', sep=' ') # 재미있는 파이썬 / 콤마(,)로 구분된 출력대상은 공백으로 구분
print('Python', 'Java', 'C', sep = ':') # Python:Java:C / sep 속성으로 구분

print()
print('영화 타이타닉', end='\n') # 지정하지 않았을때 기본값은 \n
print('평점', end=':')
print('5점') # 평점 : 5점 / value 출력 후 end 속성 출력. 줄 바꿈이 되지 않음

fos = open('sample.py', mode='wt')
print('print("Hello World")', file = fos) # file 속성으로 대상 출력. 파일 출력
fos.close()

 

9. % 연산자

# % 연산자
# 형식문자를 포함한 문자열에 % 연산자를 사용해 형식 문자에 전달될 값을 작성

name = 'jeongmo'
print('내 이름은 %s입니다.' %name) # 내 이름은 jeongmo입니다. / %s : string
print('내 이름은 ', name, '입니다.', sep='')
print('내 이름은 ' + name + '입니다.')

height = 120.5
print('내 키는 %fcm입니다.' % height) # 내 키는 120.50000cm 입니다. / %f : float

weight = 23.55
print('내 몸무게는 %.1fkg입니다.' % weight) # 내 몸무게는 23.6kg 입니다.

year, month, day = 2014, 8, 25
print('내 생일은 %d년 %d월 %d일입니다.' %(year, month, day))
# 내 생일은 2014년 8월 25일입니다. / %d : decimal(십진법)

 

10. format() 메소드

# format() 메소드
# format() 메소드의 인수로 변수나 값을 표시하고, 해당 값이 표시될 위치를 중괄호({})로 표시하는 방식

zipcode = '06236'
print('우편번호 : {}'.format(zipcode)) # format() 메서드를 이용해 출력

zipcode_str = '우편번호 : {}'.format(zipcode)
print(zipcode_str)

address = '''서울특별시 강남구
테헤란로 146''' # multi line

print('주소 : {addr}'.format(addr=address)) # format() 메서드의 변수 이용
print('주소 : ' + address)

 

11. f-strings 

# f-stirngs (formatted strings) : 파이썬 3.6 이후 버전에서 사용 가능

who = 'you'
how = 'happy'
print(f'{who} make me {how}') # you make me happy / 문자열에 f 또는 F 라는 접두어 prefix를 붙임

age = 25
print(f'내년엔 {age + 1}살이 됩니다.') # 내년엔 26살이 됩니다.

 

12. 표준입력

# 표준입력
# input() 함수 : 표준 입력 장치(키보드)로 부터 입력받을 때 사용
# n = input('')
# print(n)

n = input('정수를 입력하세요.') # 100
print(n) # '100'
print(type(n)) # <class 'str'> / input() 함수는 모든 입력을 '문자열 str'로 저장
n = int(n) # 정수로 형변환
print(type(n)) # <class 'int'>

name = input('이름을 입력하세요 >>> ')
age = input('나이를 입력하세요 >>> ')

print('입력된 이름은 {}입니다.'.format(name)) # format 메서드를 이용한 출력
print('입력된 나이는 {}살입니다.'.format(age))

print(f'입력된 이름은 {name}입니다.') # f-stirng 방식
print(f'입력된 나이는 {age}입니다.')


float1 = float(input('첫 번째 실수를 입력하세요 >>> '))
float2 = float(input('두 번째 실수를 입력하세요 >>> '))
# 바로 형변환 가능
print(f'{float1}와 {float2}의 합은 {float1 + float2}입니다.')

m = int(input('1 ~ 12 사이의 월을 입력하세요 >>> '))

# 리스트 사용
days = [31, 28, 31,30,31,30,31,31,30,31,30,31]
print(f'{m}월은 {days[m-1]}일까지 있습니다.')

# 딕셔너리 사용
dic = {1: 31, 2: 28, 3: 31, 4: 29, 5: 31, 6:30, 7: 31, 8: 31, 9: 30, 10:31, 11: 29, 12:31}
print(f'{m}월은 {dic[m]}월까지 있습니다.')

eng = input('영어 단어를 입력하세요 >>> ')
print(f'{eng} : {english_dict[eng]}')

travel = input('희망하는 수학여행지를 입력하세요 >>> ')
travel2 = input('희망하는 수학여행지를 입력하세요 >>> ')
travel3 = input('희망하는 수학여행지를 입력하세요 >>> ')

print(f'조사된 수학여행지는 {set([travel, travel2, travel3])} 입니다.')

 

 13. 연산자

# 산술 연산자

a = 7
b = 2
print('{} + {} = {}'.format(a,b,a+b)) # 9 / + 덧셈
print('{} - {} = {}'.format(a,b,a-b)) # 5 / - 뺄셈
print('{} * {} = {}'.format(a,b,a*b)) # 14 / * 곱셈
print('{} ** {} = {}'.format(a,b,a**b)) # 49 / ** 거듭제곱
print('{} / {} = {}'.format(a,b,a/b)) # 3.5 / / 나눗셈
print('{} // {} = {}'.format(a,b,a // b)) # 3 / // 몫
print('{} % {} = {}'.format(a,b,a%b)) # 1 / % 나머지

# 대입 연산자
# a = b > b에 있는 값을 a라는 변수에 저장을 하라
a = 10

a, b = 10, 20 # 2개 이상의 변수에 저장, 튜플을 이용
print('a = %d, b = %d' % (a,b)) # 10, 20
print(f'a = {a}, b = {b}')

a,b = b, a # 값을 교환
print('a = %d, b = %d' %(a,b)) # 20 , 10 

# 복합 대입 연산자
# 연산을 먼저 진행하고, 그 결과를 변수에 저장
c = 10
c = c + 10
print(c)
c += 10
print(c)

c -= 10 # c = c - 10
print(c) # 20

c //= 10
print(c)

c *= 10
print(c)

# 비교연산자
# 결과 값은 True 와 False 둘 중 하나

a = 15
print(f'{a} > 10 : {a > 10}') # True. a가 10보다 크다

n = int(input('10 ~ 99 사이의 정수를 입력하세요 >>> '))
n10 = n//10
print(f'십의 자리 : {n10}')
print(f'일의 자리 : {n-n10*10}')


times = int(input('초를 입력하세요 >> '))
hour = times // 3600
minute = times % 3600 // 60
second = times % 60
print(f'변환 결과는 {hour}시간 {minute}분 {second}초 입니다.')

a = 10
b = 0
print('{} > 0 and {} > 0 : {}'.format(a,b,a>0 and b > 0)) # False / True and False
print('{} > 0 or {} > 0 : {}'.format(a, b, a>0 or b > 0)) # True / True or False
print('not {} : {}'.format(a, not a)) # False / 0이 아니면 True
print('not {} : {}'.format(b, not b)) # True / 0이면 False

sawon = int(input('4자리 사원번호를 입력하세요 >>> '))
# sawon1 = sawon % 1000 % 100 % 10
sawon1 = sawon % 10 # 어떤 수를 10으로 나누면, 나머지는 0~9 사이의 값이 구해짐. 일의 자리 수
result_2 = '오전' if sawon1 >= 5 else '오후'
print(result_2)

korean = int(input('국어 점수를 입력하세요 >>> '))
english = int(input('영어 점수를 입력하세요 >>> '))
math = int(input('수학 점수를 입력하세요 >>> '))
avg = float((korean + english + math)/3)
result_3 = '합격' if avg >= 80 else '불합격'
print(f'평균은 {avg}점이고, 결과는 {result_3}입니다.')

 

14. 조건문

 - if 조건식 : 

 -         조건식의 결과가 True일 때 실행문

 - else: 

 -          조건식의 결과가 False일 때 실행문

 - elif:

 -  if 조건식의 결과가 false이고, elif 조건식이 True일 때 실행문

# 조건문

# 1. if 문
# if 조건식 :
#       조건식의 결과가 True 일 때 실행문

num = 15
if num > 0:
    print('양수') # 조건식이 True라서 실행이 됨

# 들여쓰기 indentation 규칙
# 1. 공백 space이나 탭 tab을 이용하여 들여쓰기를 수행
# 2. 공백의 개수는 상관이 없음
# 3. 탭은 1개만 사용
# 4. 동일 구역에서 들여쓰기는 통일해야 함. 공백과 탭을 혼용해서 사용불가
# 들여쓰기 수준도 동일해야 함
# 5. 주로 사용하는 들여쓰기는 공백 4개, 공백 2개, 탭 1개.

if num > 0: print('양수') # 실행문이 하나면 한 줄 코드 가능

# 2. if-else 문

print()
num = -1
if num >= 0:
    print('양수')
else:
    print('음수')

# 3. if-elif 문
print()
important = 56

if important >= 100:
    print('상')
elif important >= 50:
    print('중')
else:
    print('하')
    

age = int(input('몇 살입니까? >>> ')) # int() 함수를 이용해서 정수로 변환
if age <= 7:
    print('미취학')
elif age <= 13:
    print('초등학생')
elif age <= 16:
    print('중학생')
elif age <= 19:
    print('고등학생')
else:
    print('성인')