리스트 (자료)형 데이터, 줄여서 리스트 그리고 딕셔너리 자료형 데이터, 줄여서 딕셔러리에 대해 알아 봤다. 그리고 반복문인 for에 대해서도 알아 봤다. 'for'문과 함께 자주 사용되는 자료형으로 리스트와 딕셔너리 그리고 범위형 데이터가 있다. 앞에서 잠깐 만났던 range()함수가 반환하는 데이터가 범위형 데이터다.
range(start, end, step)
Quiz1
names = ['구숙정', '장만옥', '매염방', '관지림', '왕조현', '원결영']
리스트 names에서 짝수 번째 요소는 요소값에 '안녕하세요'를 붙여서 출력하고 홀수 번째 요소에는 요소값에 '반갑습니다'를 붙여서 출력하는 코드를 작성하세요.
names = ['구숙정', '장만옥', '매염방', '관지림', '왕조현', '원결영' ]
for i in range(len(names)):
if i % 2 == 0:
print(names[i] + ' 안녕하세요')
else:
print(names[i] + ' 반갑습니다')
구숙정 안녕하세요
장만옥 반갑습니다
매염방 안녕하세요
관지림 반갑습니다
왕조현 안녕하세요
원결영 반갑습니다
names = ['구숙정', '장만옥', '매염방', '관지림', '왕조현', '원결영'] # 요소의 개수가 6개로 짝수
greeting = [' 안녕하세요', ' 반갑습니다'] * ( len(names)//2 )
for i in range(len(names)):
print( names[i] + greeting[i] )
구숙정 안녕하세요
장만옥 반갑습니다
매염방 안녕하세요
관지림 반갑습니다
왕조현 안녕하세요
원결영 반갑습니다
zip()
names = ['구숙정', '장만옥', '매염방', '관지림', '왕조현', '원결영', '황성의'] # 요소의 개수가 7개로 홀수수
greeting = [' 안녕하세요', ' 반갑습니다'] * 4
for name, greet in zip(names, greeting):
print(name + greet)
구숙정 안녕하세요
장만옥 반갑습니다
매염방 안녕하세요
관지림 반갑습니다
왕조현 안녕하세요
원결영 반갑습니다
황성의 안녕하세요
list( zip(names, greeting) )
[('구숙정', ' 안녕하세요'), ('장만옥', ' 반갑습니다'), ('매염방', ' 안녕하세요'), ('관지림', ' 반갑습니다'), ('왕조현', ' 안녕하세요'), ('원결영', ' 반갑습니다'), ('황성의', ' 안녕하세요')]
- for 반복문 : 반대로 반복하기
for i in range(4, -1, -1 ):
print(i)
4 3 2 1 0
for i in reversed( range(5) ):
print(i)
4 3 2 1 0
- 중첩 반복문으로 피라미드 만들기
for y in range(1, 6):
output = ''
for x in range(y):
output += '*'
print(output)
*
**
***
****
*****
for n in range(6):
for x in range(6-n):
print(' ', end = '')
for x in range(n):
print('*' ,end = '')
print()
*
**
***
****
*****
for n in range(1,6):
print(' '* (6-n) + '*' *n)
*
**
***
****
*****
# 교재 - 혼자 공부하는 파이썬에 있는 코드드
output =''
for i in range(1, 15):
for j in range(14, i, -1):
output +=' '
for k in range(0, 2*i - 1):
output += '*'
output += '\\n'
print(output)
*
***
*****
*******
*********
***********
*************
***************
while 반복문
몇 번 반복해야 할지가 명확할 때 for문을 쓰는 편이고 어떤 조건이 충족되는 동안 계속 반복할 경우는 while문을 이용하여 반복 동작을 구현한다. 어떤 경우든 반복 동작을 위해서는 for문 또는 while문을 사용할 수 있다.
while condition:
# statement
아래 코드에서 condition이 참(True)라면 print('.')를 멈추지 않고 계속 반복 수행. 멈주지 않고 무한히 반복 수행하는 것을 무한 루프.
while conditon:
print('.')
- while 반복문: for 반복문처럼 사용하기
count = 0
# 조건(condition), count < 10가 만족하면 무한히 반복 수행합니다.
while count < 10:
print('{}번째 작업 중입니다.'.format(count))
count += 1
print('종료')
0번째 작업 중입니다. 1번째 작업 중입니다. 2번째 작업 중입니다. 3번째 작업 중입니다. 4번째 작업 중입니다. 5번째 작업 중입니다. 6번째 작업 중입니다. 7번째 작업 중입니다. 8번째 작업 중입니다. 9번째 작업 중입니다. 종료
- while 반복문: 상태를 기반으로 반복하기
lst = [1, 2, 3, 3, 4, 5]
lst.remove(3)
print(lst)
lst.remove(3)
print(lst)
[1, 2, 3, 4, 5] [1, 2, 4, 5]
코딩을 할 때 이미 lst에는 값이 3인 요소가 2개 있다는 것을 알고 있었다. 그래서 위 코드 셀에 있는 코드처럼 remove(3)을 두 번 실행 시킨 것.
- while 반복문:시간을 기반으로 반복하기
유닉스 타임(Unix Time)이란 세계 표준시(UTC)로 1970년 1월 1일 0시 0분 0초를 기준으로 몇 초가 지났는지를 정수로 나타내는 것을 말한다.
import time
time.time()
1684299001.7964547
위 코드를 실행시킨 시점은 1970년 1월 1일 0시 0분 0초 이후 1677844665.6011834이만큼의 초가 흘렀다는 뜻. 유닉스 타임과 while문을 조합하여 반복 동작을 특정 시간 동안만 하도록 코딩할 수 있다.
import time
count = 0
target_time = time.time() + 1
while time.time() < target_time:
count += 1
print(count)
print( format(count, ',')+'[번]' ) # 처음(?!) 만나는format() 함수
# print(count + '[번]')
4076145 4,076,145[번]
- while 반복문:break 키워드/continue 키워드
반복문(for, while)의 (범위, 영역) 내에서만 사용할 수 있는 break와 continue라는 특별한 키워드가 있다. break는 프로그램 흐름이 자신(break)을 감싸고 있는 반복문을 하나 벗어나게한다. continue를 만나면 다음 반복 동작으로 넘어 간다. 실제 코드를 보면서 하나씩 살펴보도록 하겠다.
주사위를 던져서 숫자를 확인한다. 주사위를 던져서 숫자 확인 반복적으로 하는데, 6이 나오면 반복 잡업을 멈추게 하겠다. 이 때 break문을 사용한다.
import random
random.seed(16)
while True:
dice = random.randint(1, 6)
if dice == 6:
print('{}이 출력되어 게임을 멈춤니다.'.format(dice))
break;
else:
print('{}이 나왔네요. 6이 나올 때까지 다시 시도합니다'.format(dice))
3이 나왔네요. 6이 나올 때까지 다시 시도합니다 4이 나왔네요. 6이 나올 때까지 다시 시도합니다 4이 나왔네요. 6이 나올 때까지 다시 시도합니다 3이 나왔네요. 6이 나올 때까지 다시 시도합니다 4이 나왔네요. 6이 나올 때까지 다시 시도합니다 2이 나왔네요. 6이 나올 때까지 다시 시도합니다 4이 나왔네요. 6이 나올 때까지 다시 시도합니다 1이 나왔네요. 6이 나올 때까지 다시 시도합니다 4이 나왔네요. 6이 나올 때까지 다시 시도합니다 6이 출력되어 게임을 멈춤니다.
i = 1
while True:
print(f'{i}번째 청소를 시작합니다.')
print(f'{i}번째 청소 중입니다.')
print(f'{i}번째 청소를 마쳤습니다.')
a_u_ok = input('청소 상태가 마음에 드시나요. 청소를 종료할까요?(y/n) : ')
if a_u_ok in ['y', 'Y']:
print('청소를 종료합니다.')
break
i += 1
1번째 청소를 시작합니다. 1번째 청소 중입니다. 1번째 청소를 마쳤습니다. 청소 상태가 마음에 드시나요. 청소를 종료할까요?(y/n) : n 2번째 청소를 시작합니다. 2번째 청소 중입니다. 2번째 청소를 마쳤습니다. 청소 상태가 마음에 드시나요. 청소를 종료할까요?(y/n) : y 청소를 종료합니다.
i = 0
tag = False
while tag == False:
print('{}번째 청소를 시작합니다.'.format(i+1))
print('{}번째 청소 중입니다.'.format(i+1))
print('{}번째 청소를 마쳤습니다.'.format(i+1))
a_u_ok = input('청소 상태가 마음에 드시나요. 청소를 종료할까요?(y/n) : ')
if a_u_ok in ['y', 'Y']:
tag = True
print('청소를 종료합니다.')
i += 1
1번째 청소를 시작합니다. 1번째 청소 중입니다. 1번째 청소를 마쳤습니다. 청소 상태가 마음에 드시나요. 청소를 종료할까요?(y/n) : n 2번째 청소를 시작합니다. 2번째 청소 중입니다. 2번째 청소를 마쳤습니다. 청소 상태가 마음에 드시나요. 청소를 종료할까요?(y/n) : y 청소를 종료합니다.
i = 0
while input('청소를 (다시) 할까요?(y/n) : ') in ['y', 'Y'] :
print('{}번째 청소를 시작합니다.'.format(i+1))
print('{}번째 청소 중입니다.'.format(i+1))
print('{}번째 청소를 마쳤습니다.'.format(i+1))
i += 1
청소를 (다시) 할까요?(y/n) : n
input('청소 상태가 마음에 드시나요. 청소를 종료할까요?(y/n) : ') in ['y', 'Y']
청소 상태가 마음에 드시나요. 청소를 종료할까요?(y/n) : n False
물통에 물고기가 담겨 있다. 크고 작은 물고기가 섞여 있다. 이 중에서 길이가 23cm 이상인 녀석만 회로 먹기 위해 손질하겠다. 물고기의 길이와 무게를 측정하여 길이는 리스트 fish_length에 저장했고 무게는 리스트 fish_weight에 저장했다. 길이 단위는 [cm]입니다. 무게 단위는 [g]다.
fish_length = [14, 15.5, 13.5, 23.5, 28.5, 26.0, 12, 32, 29, 14.5]
fish_weight = [100, 150, 140, 250, 300, 280, 80, 315, 220, 90]
count = 0
print('물고기는 총 {} 마리입니다.'.format( len(fish_length) ), end='\\n\\n')
for idx in range( len(fish_length) ):
if fish_length[idx] < 23.0:
continue
# codes.....
# 위 continue 아래에 있는 코드(codes....)는 무의미
else:
print('길이가 {}[cm]이고 무게가 {}[g]이군요'.format(fish_length[idx], fish_weight[idx]))
print('이 물고기 손질을 마쳤습니다.', end='\\n\\n')
count += 1
print(f'총 {count}마리 손질했습니다.')
물고기는 총 10 마리입니다.
길이가 23.5[cm]이고 무게가 250[g]이군요 이 물고기 손질을 마쳤습니다.
길이가 28.5[cm]이고 무게가 300[g]이군요 이 물고기 손질을 마쳤습니다.
길이가 26.0[cm]이고 무게가 280[g]이군요 이 물고기 손질을 마쳤습니다.
길이가 32[cm]이고 무게가 315[g]이군요 이 물고기 손질을 마쳤습니다.
길이가 29[cm]이고 무게가 220[g]이군요 이 물고기 손질을 마쳤습니다.
총 5마리 손질했습니다.
튜플(tuple)
- 리스트와 마찬가지로 여러 항목의 시퀀스(나열)
- 리스트와 달리 튜플은 불변
- 튜플은 정의 한 후에 추가, 삭제, 수정할 수 없음
#빈 튜플 생성
e_tuple = ()
# 튜플 생성
x_tuple = ('kim', 'sung', 'pil')
y_tuple = ('kim', 'sung', 'pil', 25, [1, 2, 'a']) # 리스트와 마찬가지로 여러 항목의 시퀀스(나열)
z_tuple = 'kim', 'sung', 'pil' # 튜플임을 알리는 소관호 생략 가능
# 문자열과 튜플
a_string = 'kim'
a_tuple = 'kim',
b_tuple = ('kim',)
print( type(a_string) )
print( type(a_tuple) )
print( type(b_tuple) )
print( a_tuple == b_tuple )
<class 'str'> <class 'tuple'> <class 'tuple'> True
- 튜플 언패킹(tuple unpacking)
x_tuple = ('sung pil', 'kim')
first_name, last_name = x_tuple
print(first_name) # 이름
print(last_name) # 성
sung pil kim
- 튜플 언패킹을 통한 값 교환
x = 'Lee younghyn'
y = 'Lee jaeeun'
y, x = (x, y) # y, x = ('Lee younghyn',' Lee jaeeun')
print('x:', x)
print('y:', y)
- 튜플로 형변환
lst = ['one', 'two', 'three', 4]
t = tuple(lst)
print(t)
('one', 'two', 'three', 4)
- Quiz
아래와 같이 튜플을 요소로 하는 리스트를 생성하는 코드를 작성하시오.
lst = [ (0,0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), ... (2, 3)]
lst = []
for row in range(3):
for col in range(4):
lst.append((row, col))
print(lst)
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]
'빅데이터 분석가 양성과정 > Python' 카테고리의 다른 글
Ch05-1 함수 / 함수 만들기 (0) | 2024.07.05 |
---|---|
Ch04-4 반복문 / 문자열, 리스트, 딕셔너리 (3) | 2024.07.05 |
Ch04-2 반복문 / 딕셔너리와 반복문 (0) | 2024.07.04 |
Ch04-1 반복문 / 리스트와 반복문 (0) | 2024.07.04 |
Ch 03-2 조건문 / if ~else 와 elif 구문 (0) | 2024.07.04 |