Week 2 (자료구조, 제어, 반복)
- 목표
- List, Tuple, Dictionary, set
- 조건문과 (conditions), 반복문 (loop) 이해
수업 02-1
- list, tuple, dictionary 생성/수정/조회
- List
- 특징:
- 수정 가능(mutable): 추가, 삭제, 변경 가능
- 중복 허용
- 순서 있음 (ordered)
- 여러 자료형 혼합해서 저장 가능
- 리스트 생성 - 대괄호 사용
[]
elements = ["H", "He", "Li", "Be"]
- 요소 접근 (인덱싱; indexing); 0에서 부터 시작
print(elements[0]) # H
- 요소 변경
elements[1] = "Helium" print(elements) #elements = ["H", "Helium", "Li", "Be"]
- 요소 추가 / 삭제
elements.append("B") #elements = ["H", "Helium", "Li", "Be", "B"] elements.remove("Li") #elements = ["H", "Helium", "Be", "B"]
- 중복 허용
elements = ['H','He','H'] print(elements)
- 여러 자료형 혼합
myList=['H',203,2.3,['H','He']] myMatrix=[[1,2,3],[4,5,6],[7,8,9]] ##중첩된 리스트
- 언패킹 (unpacking)
a,b,c,d=[1,3,4,5]
- tuple
- 특징
- 수정 불가능 (immutable); 한번 만들어지면 이후 변경 불가능
- 중복 허용
- 순서 있음
- 여러 자료형 혼합해서 저장 가능
- 튜플 생성 - 소괄호
()
사용colors = ("red", "green", "blue") # 요소 접근 print(colors[1]) # green # 변경 불가 → 아래 코드는 오류 발생 # colors[1] = "yellow" # 튜플 언패킹 r, g, b = colors print(r, g, b) # red green blue
- 특징
- set
- 특징
- 중복제거: 같은 값이 입력되어도 하나만 남게 됨
- 순서없음
- 인덱싱 불가: list나 tuple과 다름
- 수정 가능 (mutable)
- 원소의 타입에 제한 있음:
- 실습
- 실습1: 생성
# 중괄호 {} 사용 s1 = {1, 2, 3} print(s1) # {1, 2, 3} # set() 함수 사용 s2 = set([1, 2, 2, 3]) print(s2) # {1, 2, 3} (중복 제거) # 빈 set 생성 시는 set()만 가능 empty_set = set() print(empty_set) # set()
- 실습2: 변경
s = {1, 2, 3} # 추가 s.add(4) # {1, 2, 3, 4} s.update([5, 6]) # {1, 2, 3, 4, 5, 6} (여러 개 추가) # 삭제 s.remove(3) # {1, 2, 4, 5, 6} (없는 값 제거 시 오류 발생) s.discard(10) # 없는 값 제거해도 오류 없음 s.pop() # 임의의 값 제거 후 반환 (순서 없으니 랜덤)
- 실습1: 생성
- 특징
- Misc.
len
built-in function중 하나a=[3,4,5,'a','b'] len(a) # 정수 5
- List slicing
a=[0,1,2,3,4,5] # format # a[begin:end:step]; end-begin = len(a) a[::] # == a[0:6:1] ## default a[1::2] # == a[1:6:2]
- 실습
- 1족 원소 기호를 순서대로 포함한 리스트 만들기 (수소, 리튬, 나트륨, 칼륨, 루비듐, 세슘, 프랑슘)
- Calister 예제 2.1)
#세륨의 동위원소는 4가지 존재한다: # 각 동위원소의 분율은 아래와 같다. Ce_f= [0.185, 0.251, 88.450, 11.114] #[%] # 각 동위원소의 원자량은 아래와 같다. Ce_w = [135.907, 137.906, 139.905, 141.909] # 세륨의 평균 원자량은 얼마인가? avg=(Ce_f[0]*Ce_w[0]+ Ce_f[1]*Ce_w+[1]+ Ce_f[2]*Ce_w+[2]+ Ce_f[3]*Ce_w+[3])/(Ce_f[0]+Ce_f[1]+Ce_f[2]+Ce_f[3]) ## average print(avg)
수업 02-2
if
,elif
,else
조건문 이해- 기본 구조
if 조건식: 실행할 명령문1 실행할 명령문2 ... elif 다른조건식: 실행할 명령문1 실행할 명령문2 ... else: 실행할 명령문1 실행할 명령문2 ...
- 주의
- indent, dedent 에 주의!!
- 콜론 기호 ‘:’ 빼먹지 말 것!
- 예시
- 예1
# 예: 순수 알루미늄의 녹는점 melting_point = 660 #Celcius degree temperature = 700 #Celcius degree if temperature < melting_point: print("Solid state") elif temperature == melting_point: print("Solid and liquid co-exist") else: print("Liquid state")
- 예1
- 기본 구조
for
반복문- 기초 설명 파이썬의 for 반복문은 순서가 있는 데이터(시퀀스)나 반복 가능한 객체(iterable)를 순차적으로 꺼내면서 코드를 실행하는 구문.
- 기본 구조
for 변수 in 반복가능객체: 실행할 명령문1 실행할 명령문2 ...
- 대표적으로 순서가 있는 데이터 시쿼스로는 List, Tuple, Dictionary 타입의 변수가 있다.
- 예1
a=[3,4,5] #list type for e in a: print(e)
- 예2
a=('3',[34343],5) # tuple type for e in a: print(e)
- 예3
a=dict(a='b',b='1',d=3,z=[]) # dictionary (Python 3.7>) for e in a: print(e)
- 예1
- 주의
- indent, dedent 에 주의!!
- 콜론 기호 ‘:’ 빼먹지 말 것!
- Built-in function인
range
,len
를for
와 함께 조합!- 개념
len()
-> 시퀀스 (List, 문자열, 튜플 등)의 길이(요소 개수)를 반환range()
→ 지정한 범위의 숫자 시퀀스를 생성 (반복문에서 자주 사용)- 둘을 함께 쓰면 인덱스 기반 반복이 가능
- 예시
- 예시1
fruits = ["apple", "banana", "cherry"] for i in range(len(fruits)): # 0 ~ len(fruits)-1 print(f"Index {i}: {fruits[i]}")
- 예시 2
specimen_lengths = [10.0, 12.3, 9.8, 11.5] # cm for i in range(len(specimen_lengths)): length = specimen_lengths[i] print(f"Specimen {i+1}: {length} cm")
- 예시 3
word = "steel" for i in range(len(word)): print(f"Index {i} → {word[i]}")
- 예시1
- 개념
- 실습 예시
- 구구단 출력하기 (x단 입력하면 … )
- 학생 점수 데이터에서, 산술 평균, 최고점과 최저점 학생 이름 찾기 (조건문과 loop 활용)
- 1부터 100사이의 정수합 구하기 (loop)
- 주어진 List에서 최대값과 최소값 찾기 (조건문과 loop 활용)
- 주양자수 $n$에 의해 결정되는 부 양자수 $l,m_l$ 출력하기.
# Calister 책의 표 2.1 n=3 ## 주양자수, print('n:',n) no_electrons=0 for l_value in range(0, n): # 0, 1, .., (n-1) 까지 print('\tl:',l_value) #주의 '\t' string은 키보드의 탭기호를 뜻한다. low=-l_value up=+l_value print('\t\tml:',) for i in range(low,up+1): # -l, -l+1, ... 1, 0, 1, ... l-1, l print('\t\t\t',i) no_electrons=no_electrons+2 # 각 state마다 up/down spin 전자, 따라서 2개씩. print('total number of electrons:',no_electrons)