본문 바로가기

1. Python

3/7(화) IT K-DT (4일차) / 7.튜플~9.제어문(반복문)

 

7. 튜플(Tuple)

 

7-1. 정의

리스트와 거의 유사.
리스트는 대괄호로 자료를 묶고, 튜플은 소괄호로 자료를 묶음.
데이터 안의 요소의 수정, 삭제가 불가능.
값의 변경을 원하지 않은 경우에 오류를 최소화하는 목적으로 사용

 

tu2 = (1,3,5,7) # 정상적인 튜플의 사용법
print(tu2)


(1, 3, 5, 7)

 

tu3 = 1,3,5,7 # 소괄호가 없지만, 튜플이다.
print(tu3)
print(type(tu3))


(1, 3, 5, 7)
<class 'tuple'>

 

tu4 = ('apple', 'banana', ('🍓','🍉'))  # 이차원 튜플의 예시
print(tu4)

 

('apple', 'banana', ('🍓','🍉'))

 

tu5 = ('apple', 'banana', ['🍓','🍉'])
print(tu5) # 튜플 안에 리스트로 저장이 가능
print(type(tu5)) # 튜플로 감쌌기 때문에 type은 튜플


('apple', 'banana', ['🍓', '🍉'])
<class 'tuple'>

 

7-2. 튜플의 수정 및 삭제

 

tu6 = (1,2, 'apple', 'banana')
print(tu6[2]) # 인덱싱을 접근할 때 대괄호를 사용하는 부분은 리스트와 같음

 

tu6[2] = 'orange'
print(tu6[2]) # 데이터 안의 요소의 수정이 불가능해 출력 시 오류가 발생.

 

TypeError: 'tuple' object does not support item assignment

 

del tu6[2]
print(tu6) # 데이터 안의 요소의 삭제가 불가능해 출력 시 오류가 발생.

 

TypeError: 'tuple' object doesn't support item deletion

 

del tu6
print(tu6) # 튜플 전체 삭제는 가능함.

 

tu7 = ('apple', 'banana', ['🍓','🍉'])
tu7[2][0] = '🍋'
print(tu7)
# 예외로 튜플 안에 리스트가 있다면 이 리스트 안의 데이터의 수정, 삭제는 가능.
# 그러나 튜플 안의 전체 리스트에 대한 수정은 불가능.

 

('apple', 'banana', ['🍋', '🍉'])

tu8 = ('apple', 'banana', ['🍓','🍉'])
tu8 = '🍗'
print(tu8) # 요소를 변경하는 것이 아니기 때문에 변경이 가능함.

 


🍗

 

7-3. 튜플의 인덱싱과 슬라이싱 연산

 

tu9 = (1,2, 'apple', 'banana')
# 인덱싱
print(tu9[0])
print(tu9[-1]) # 리스트와 동일

 

1
banana

 

# 슬라이싱
print(tu9[1:])
print(tu9[1:3]) # 리스트와 동일

 

(2, 'apple', 'banana')
(2, 'apple')

 

# 덧셈
tu10 = (30, 40)
print(tu9 + tu10) # 리스트와 동일한 연결연산

 

(1, 2, 'apple', 'banana', 30, 40)

 

# 곱셈
print(tu9 * 3) # 리스트와 동일한 반복연산

 

(1, 2, 'apple', 'banana', 1, 2, 'apple', 'banana', 1, 2, 'apple', 'banana')

 

# 요소의 갯수
print(len(tu9))

 

4

 

7-4. 튜플의 정렬

 

tu11 = (1,3,2,0)
tu11.sort() # 튜플은 sort()함수를 사용할 수 없음. 출력 시 오류가 발생.

 

AttributeError: 'tuple' object has no attribute 'sort'

tu12 = sorted(tu11) # 대신, sorted()함수를 사용할 수 있음.
print(tu12)


[0, 1, 2, 3]

 

8. 제어문(조건문)

 

8-1. 제어문

프로그램의 흐름을 제어하는 문장. (조건문, 반복문이 있음)

 

 

8-2. 조건문

 

8-2-1. 비교연산자

'부등호'(<, >, <=, >=, ==, !=)를 사용.
비교연산자의 결과는 항상 bool형으로 반환됨.

print(10 > 5)
print(10 < 5)
print(10 >= 5)
print(10 <= 5)
print(10 == 5)
print(10 != 5)


True
False
True
False
False
True

 

8-2-2. if문


if 조건식(결과가 True 또는 False가 나오는 문장):
   조건식이 True인 경우 실행할 문장
   (백쿼트 3개를 이용하여 문법 작성이 가능)

 

bool1 = True
if bool1:
  print('결과는 참입니다.')
  print('프로그램을 종료합니다.')


결과는 참입니다.
프로그램을 종료합니다.

bool2 = False
if bool2:
  print('결과는 참입니다.') # if문의 bool2가 False이므로 해당 줄의 print는 출력되지 않음
print('프로그램을 종료합니다.')


프로그램을 종료합니다.

age = int(input('나이를 입력하세요: '))

if age > 19:
  print('성인입니다')
print('입력한 나이: ', age)


나이를 입력하세요: 55
성인입니다
입력한 나이:  55

 

8-2-3. If ~ else문

 


if 조건식(결과가 True 또는 False가 나오는 문장):
    조건식이 True인 경우 실행할 문장
    ...
else:
    조건식이 False인 경우 실행할 문장
    ...

 

age = int(input('나이를 입력하세요 : '))

if age > 19:
  print('성인입니다.')
  print('넷플릭스 성인영화를 감상할 수 있습니다.')
else:
  print('미성년입니다.')
  print('디즈니를 보세요.')
print('입력한 나이 : ', age)


나이를 입력하세요 : -5
미성년입니다.
디즈니를 보세요.
입력한 나이 :  -5

 

8-2-4. if ~ elif ~ else문

 


if 조건식1(결과가 True 또는 False가 나오는 문장):
   조건식1이 True인 경우 실행할 문장
    ...
elif 조건식2
    조건식2가 True인 경우 실행할 문장
    ...
elif 조건식3
    조건식3이 True인 경우 실행할 문장
    ...
else:
    모든 조건식이 False인 경우 실행할 문장
    ...
else는 필수 문장이 아님.

 

age = int(input('나이를 입력하세요 : '))

if age > 19:
  print('성인입니다.')
elif age > 14:
  print('청소년입니다.')
elif age > 6:
  print('어린이입니다.')
elif age > 0:
  print('유아입니다.')
else:
  print('입력을 확인하세요.')
print('입력한 나이 : ', age)


나이를 입력하세요 : 0
입력을 확인하세요.
입력한 나이 :  0

 

8-2-5. 산술 연산자

 

print (10 + 3)
print (10 - 3) 
print (10 * 3)
print (10 / 3)
print (10 % 3) # 나머지
print (10 // 3) # 몫
print (10 ** 3) # 제곱


13
7
30
3.3333333333333335
1
3
1000

 


8-2-6. 삼항 연산자

결과가 True일 때 실행할 문장 if 조건식 else 결과가 False일 때 실행할 문장
(if와 else만 존재하는 한 줄짜리 문법)

num = int(input('숫자를 입력하세요 : '))

if num % 2 == 0:
  print('짝수')
else:
  print('홀수')


숫자를 입력하세요 : 53413
홀수

num = int(input('숫자를 입력하세요 : '))

print('짝수') if num % 2 == 0 else print('홀수') # 삼항 연산자로 작성


숫자를 입력하세요 : 123
홀수

 


예제 1
국어점수, 영어점수, 수학점수를 입력받아 총점, 평균, 학점을 구하는 프로그램을 작성해보자.
단, 학점은 평균 기준이며 90점 이상은 A, 80점 이상은 B, 70점 이상은 C, 60점 이상은 D, 나머지는 F로 함.

kor,eng,math = input('국어, 영어, 수학 점수를 각각 입력하세요 : ').split(',')

print('총점 :', int(kor)+int(eng)+int(math))
print('평균 :', (int(kor)+int(eng)+int(math))/3)

a = (int(kor)+int(eng)+int(math))/3

if a >= 90:
  print('학점 : A')
elif a >= 80:
  print('학점 : B')
elif a >= 70:
  print('학점 : C')
elif a >= 60:
  print('학점 : D')
else:
  print('학점 : F')


국어, 영어, 수학 점수를 각각 입력하세요 : 91,85,93
총점 :  269
평균 :  89.66666666666667
학점 : B


예제 2
숫자를 입력받아 2의 배수인지, 3의 배수인지 아니면 2,3의 배수가 모두 아닌지를 판별하는 프로그램을 작성해보자.

num = input('숫자를 입력하세요 : ')

if float(num) % 2 == 0:
  if float(num) % 3 == 0:
    print(f'{num}은 2와 3의 배수')
  else: 
    print(f'{num}은 2의 배수')
elif float(num) % 3 == 0:
  print(f'{num}은 3의 배수')
else:
  print(f'{num}은 2,3의 배수가 모두 아니다.')


숫자를 입력하세요 : 12
12은 2와 3의 배수

 

8-2-7. 논리 연산자(AND)

 

양쪽 두 식의 값이 '모두' True인 경우 결과가 True가 되는 연산자.

A B 결과
True True True
True False False
False True False
False False False

예) 정보처리기사 자격을 취득하기 위해서는 모든 과목이 40점 이상, 평균이 60점 이상이 되어야 한다.

 

# 로그인 프로그램 만들기 (아이디 : admin, 비밀번호 : 1234)

userid = input('아이디를 입력하세요.') 
userpw = input('비밀번호를 입력하세요.')

if userid == 'admin' and userpw == '1234':
  print('로그인 되었습니다.')
else:
  print('아이디 또는 비밀번호를 확인하세요.')


아이디를 입력하세요.admin
비밀번호를 입력하세요.1234
로그인 되었습니다.

 

8-2-8. 논리 연산자(OR)

양쪽 두 식의 값이 '하나라도' True 인 경우 결과가 True가 되는 연산자.

A B 결과
True True True
True False True
False True True
False False False

 

# 주민등록번호에 의한 성별을 판별하는 프로그램 만들기

 

juminNo = input('주민등록번호 13자리를 -없이 입력하세요')
if juminNo[6] == '1' or juminNo[6] == '3' or juminNo[6] == '5' or juminNo[6] == '7' or juminNo[6] == '9' :
  print('성별 : 남자')
else:
  print('성별 : 여자')


주민등록번호 13자리를 -없이 입력하세요123456789101
성별 : 남자

 

8-2-9. 논리 연산자(NOT)

bool의 값을 반대로 변경해주는 연산자

bool1 = True

if bool1:
  print('결과는 참입니다.')
else:
  print('결과는 거짓입니다.')


결과는 참입니다.

 

bool1 = True

if not bool1:
  print('결과는 참입니다.')
else:
  print('결과는 거짓입니다.')

 

결과는 거짓입니다.

 

9. 제어문(반복문)

 

9-1. 반복문

 

9-1-1. 자료형 T/F 판단

Python에서 사용하는 모든 자료형은 참/거짓으로 표현이 가능함.

bool1 = True
print(bool1)
print(type(bool1))

 

True
<class 'bool'>

num1 = 10
print(num1)
print(type(num1))
print(bool(num1))

 

10
<class 'int'>
True

 

num2 = 0
print(num2)
print(type(num2))
print(bool(num2))


0
<class 'int'>
False
# 0이 아닌 숫자는 모두 True, 0은 False

 

list1 = [1,2,3]
print(list1)
print(type(list1))
print(bool(list1))


[1, 2, 3]
<class 'list'>
True

list2 = [ ]
print(list2)
print(type(list2))
print(bool(list2))


[ ]
<class 'list'>
False

 

str1 = '안녕'
print(str1)
print(type(str1))
print(bool(str1))


안녕
<class 'str'>
True

 

str2 = ''
print(str2)
print(type(str2))
print(bool(str2))

 

<class 'str'>
False
[ ]
list1 = [1,3,5]

# 내용이 채워져 있으면 True, 비어있으면 False

 

9-1-2. 대입 연산자

= , += , -= , *= , /= , %=
왼쪽에 저장된 값과 오른쪽에 저장된 값을 연산한 뒤 다시 왼쪽에 대입 (in-place연산)

num = 10
num += 1 # 왼쪽 변에 저장된 값은 10, 오른쪽 변의 저장된 값은 1이다. 연산한 값인 11을 다시 왼쪽에 대입.
print(num)

11

 

num -= 1
print(num)

 

10

 

num *= 10
print(num)

 

100

 

num /= 10
print(num)

 

10.0

 

num %= 2 # 2로 나눈 나머지값을 구하는 연산
print(num)


0.0

 

9-1-3. while문

 


while 조건식:

  조건식의 결과가 True인 동안 반복할 문장


while문과 for문은 완전히 다르게 생겼지만, 어떤 것을 써도 상관이 없음(편한대로 사용)
한꺼번에 주석처리 : 드래그해서 블록을 씌운 후 'Ctrl + /'

# 무한 루프

while True:
 print('끝나지 않는 반복')

 

# i가 1부터 5까지 반복하는 동안 Hello Python을 계속해서 반환

 

i = 1
while i <=5 :
  print('Hello Python')
  i += 1 
print(f'{i}')


Hello Python
Hello Python
Hello Python
Hello Python
Hello Python
6

# 1부터 10까지의 총 합

 

i = 1

sum = 0
while i <= 10:
  sum += i # sum과 i를 더해서 다시 sum에 저장
  i += 1
print(f'{sum}')

 

55


예제 1
1부터 100까지 짝수의 총 합을 구하는 프로그램을 작성해보자.

i = 1
sum = 0
while i <= 100:
  if i % 2 == 0:
    sum += i
  i += 1

print(f'{sum}')


2550

 


예제 2
원하는 단을 입력받아 해당 단의 구구단을 출력하는 프로그램을 작성해보자.

num = int(input('원하는 단 : '))
i = 0
while i < 9:
  i += 1
print(f'{num} * {i} = {int(num)*int(i)}')


원하는 단 : 6
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54

 

9-1-4. for in 문


for 변수 in 이터러블(iterable)객체:
  이터러블(iterable) 객체의 요소 갯수만큼 반복할 문장

 

list1 = [10,20,30,40] # 이터러블한 객체 예시
for li in list1: #list1 내부의 데이터들을 하나씩 뽑아서 li에 넣은 후 출력
  print(li)


10
20
30
40

isinstance(확인하고자 하는 객체. collections.Iterable) : 이터러블한 객체인지를 확인 시 사용하는 함수.
collections.iterable이 객체를 판별해줌.

import collections

list1 = [10,20,30,40]
isinstance(list1, collections.Iterable)

 

True


range() : 범위를 생성해주는 함수
range(시작인덱스, 종료인덱스())

num = range(0, 10, 1) # 0에서 10이 되기 전까지 1씩 증가하는 데이터
print(num)


range(0, 10)

 

for i in num:
  print(i, end=' ')


0 1 2 3 4 5 6 7 8 9 

import collections

num = range(0, 10, 1)
isinstance(num, collections.Iterable)

 

True # False가 출력되면 for문 안에 사용할 수 없음

for i in range(0, 10, 1):
  print(i, end=' ')


0 1 2 3 4 5 6 7 8 9 

for i in range(0, 10): # 증가값을 생략하면, 기본값은 1
  print(i, end=' ')


0 1 2 3 4 5 6 7 8 9 

for i in range(10): # 시작값을 생략하면, 기본값은 0. 종료값은 생략할 수 없음
  print(i, end=' ')


0 1 2 3 4 5 6 7 8 9 

 

예제

for in 문을 이용하여 1부터 100까지의 짝수의 총 합을 구하는 프로그램을 작성해보자.

sum = 0
for i in range(0,101,2):
  sum += i
print(f'1부터 100까지 짝수의 총 합 : {sum}')


1부터 100까지 짝수의 총 합 : 2550

 

9-1-5. enumerate 객체

반복문 사용 시 몇 번째 반복인지를 인덱스 번호로 확인
인덱스 번호와 요소를 튜플 형태로 반환

li1 = [10, 20, 30, 40, 50]

for e in enumerate(li1):
  print(e) # 튜플의 형태로 인덱스번호와 요소를 묶어서 반환해줌


(0, 10)
(1, 20)
(2, 30)
(3, 40)
(4, 50)

for i, v in enumerate(li1):
  print(f'index:{i}, value:{v}') # 인덱스번호와 요소를 i값과 v값으로 받아서 반환해주는 경우


index:0, value:10
index:1, value:20
index:2, value:30
index:3, value:40
index:4, value:50