for, while, list, dict, set


for

# for 리스트의 요소들을 하나씩 꺼내쓰는 형태

print("대기번호 : 1")
print("대기번호 : 2")
.
.
print("대기번호 : 4")# for문으로 간략하게 만들면
for waiting_no in [0, 1, 2, 3, 4]:
	print("대기번호 : {0}".format(waiting_no))
    

# range로 범위 지정 가능
for waiting_no in range(1, 6):   # 1부터 5까지
     print("대기번호 : {0}".format(waiting_no))    ->   대기번호 : 1
                                                      대기번호 : 2
                                                      대기번호 : 3
                                                      대기번호 : 4 
                                                      대기번호 : 5

# for문 속 continue : 해당하는 것은 반복 멈춤, 그 뒤는 계속 반복 진행
absent = [2, 5]    				# 결석학생
for student in range(1, 11):    # 1 - 10 까지의 학생이 있음
    if student in absent:		# 학생이 2, 5번이면 반복 안함 
        continue
    print("{0}, 책 읽어봐".format(student))
		 -> 1, 책 읽어봐		3, 책 읽어봐
         -> 4, 책 읽어봐		6, 책 읽어봐
         -> 7, 책 읽어봐		8, 책 읽어봐
         -> 9, 책 읽어봐		10, 책 읽어봐  # 2, 5번 건너뛰고 진행

# for문 속 break : 즉시 반복문 탈출
no_book = [3]
for student in range(1, 11):
    if student in no_book:
        break
    print("{0}, 책 읽어봐".format(student))
    	-> 1, 책 읽어봐		
        -> 2, 책 읽어봐   # 3에서 종료
        
        
# 한 줄 for
students = [1, 2, 3, 4, 5]
print(students)
students = [i + 100 for i in students]
print(students)		-> [1, 2, 3, 4, 5]
					-> [101, 102, 103, 104, 105]

students = ["Iron man", "Thor", "I am groot"]
students = [len(i) for i in students]
print(students)		-> [8, 4, 10]  # i의 길이 나타냄
         

while

# while : 어떤 조건을 만족할 때까지 진행

customer = "torr"
index = 5
while index >= 1:
    print("{0}, 커피 준비완료. {1}번 남음.".format(customer, index))
    index -= 1
    if index == 0:
        print("커피가 폐기처분되었습니다.")   ->  torr, 커피 준비완료. 5번 남음.
                                           torr, 커피 준비완료. 4번 남음.
                                           torr, 커피 준비완료. 3번 남음.
                                           torr, 커피 준비완료. 2번 남음.
                                           torr, 커피 준비완료. 1번 남음.
                                           커피가 폐기처분되었습니다.
# 무한 루프, ctrl+c로 멈춤                                
customer = "iron"
index = 1
while True:   # iron이 올때까지  계속 호출, 무한루프
    print("{0}, 커피 준비완료. 호출 {1}회".format(customer, index))
    index += 1            torr, 커피 준비완료. 호출 1.
    					  torr, 커피 준비완료. 호출 2.
                          .
                          .
                          torr, 커피 준비완료. 호출 12324.
                          torr, 커피 준비완료. 호출 12325.  
                          
# 조건을 만족하면 멈춤                          
customer = "torr"
person = "Unknown"
while person != customer: ? # person이 torr가 아니면 계속 진행
    print("{0}, 커피 준비완료.".format(customer))
    person = input("이름이 어떻게 되세요?")  -> torr, 커피 준비완료.
  										   이름이 어떻게 되세요? # 아이언맨
                                           torr, 커피 준비완료.
  										   이름이 어떻게 되세요? # 아이엠 그루트
                                           torr, 커피 준비완료.
  										   이름이 어떻게 되세요? # torr
                                            				# 종료

list

a = [5,2,7,3,8]
a.sort()
print(a)   		     -> [2,3,5,7,8]		(오름차순 정렬)

a.reverse()
print(a)    		 -> [8,7,5,3,2]		(내림차순 정렬)

a.insert(1,8)    
print(a)    		 -> [5,8,2,7,3,8]	(첫번째에 8을 넣어라)

a.remove(2)
print(a)  			 -> [5,7,3,8]		(2를 찾아서 지워라)

print(a.count(2))    ->  1				(2의 개수)



subway = ["유재석", "조세호", "남창희"]
print(subway.index("조세호"))   ->  1     # 조세호가 몇번째인지

subway.append("하하")  # 리스트에 "하하" 추가
print(subway)       ->  ['유재석', '조세호', '박명수', '하하']

subway.insert(1, "정형돈") # 인덱스 1 위치에 삽입
print(subway)       ->  ['유재석', '정형돈', '조세호', '박명수', '하하']


# 뒤에서 부터 하나씩 삭제
print(subway.pop()) 
print(subway)   ->  ['유재석', '정형돈', '조세호', '박명수']

print(subway.pop()) 
print(subway)   ->  ['유재석', '정형돈', '조세호']

print(subway.pop()) 
print(subway)   ->  ['유재석', '정형돈']


subway.append("유재석") #유재석 한 번 더 추가
print(subway)                  ->   ['유재석', '정형돈', '유재석']
print(subway.count("유재석"))    ->  2    

subway.clear()
print(subway)   ->   []

dictionary

# 목욕탕에서
cabinet = {3: "재석", 100: "태호"}
print(cabinet[3])        ->  재석   # key 값에 맞는 value 출력
print(cabinet.get(3))    ->  재석

# [] 와 get()의 차이
print(cabinet[5])		-> 정의되지 않은 key 5라서 에러, 종료됨
print(cabinet.get(5))	 -> 정의되지 않은 key일 경우 None 반환 후 계속 진행

print(cabinet.get(5, "사용 가능"))   -> 사용 가능  # None 대신 사용 가능 반환


# 사전 자료형에 값이 있는지 여부 확인
print(3 in cabinet)   ->  True
print(5 in cabinet)   ->  False

# 업데이트 또는 추가
print(cabinet)  ->  {3: '유재석', 100: '김태호'}
cabinet[3] = "김종국"    # key 에 해당하는 값이 있는 경우 업데이트
cabinet[20] = "조세호"   # key 에 해당하는 값이 없는 경우 신규 추가
print(cabinet)  ->  {3: '김종국', 100: '김태호', 20: '조세호'}

# 삭제
del cabinet[3]   # key 3 에 해당하는 데이터 삭제
print(cabinet)   ->   {100: '김태호', 20: '조세호'}

# key만 출력, value만 출력, 쌍으로 출력
print(cabinet.keys())    -> dict_keys([100, 20]
print(cabinet.values())  -> dict_values(['김태호', '조세호'])
print(cabinet.items())   -> dict_items([(100, '김태호'), (20, '조세호')])

# 전체 삭제
cabinet.clear()
print(cabinet)   ->   {}

set

# set : 집합, 중복 안됨, 순서 없음
my_set = {1, 2, 3, 3, 3}   # 중괄호 대신 set() 사용 가능
print(my_set)   ->  {1, 2, 3}  # 중복 안됨

 
java = {"유재석", "김태호", "양세형"} # 자바 개발자 집합
python = set(["유재석", "박명수"]) # 파이썬 개발자 집합

# 교집합 (java 와 python 을 모두 할 수 있는 개발자)
print(java & python)             -> {'유재석'}
print(java.intersection(python)) -> {'유재석'}

# 합집합 (java 또는 python 을 할 수 있는 개발자)
print(java | python)      -> {'박명수', '유재석', '김태호', '양세형'}
print(java.union(python)) -> {'박명수', '유재석', '김태호', '양세형'}
# 순서는 매번 달라질 수 있음


# 차집합 (java 는 할 수 있지만 python 은 할 줄 모르는 개발자)
print(java - python)           -> {'양세형', '김태호'}
print(java.difference(python)) -> {'양세형', '김태호'}


# python 개발자 추가 (기존 개발자 : 박명수, 유재석)
python.add("김태호")
print(python)    ->   {'박명수', '유재석', '김태호'}


# java 개발자 삭제 (기존 개발자 : 유재석, 김태호, 양세형)
java.remove("김태호")
print(java)  ->  {'유재석', '양세형'}