본문 바로가기
Python/Basic

[파이썬, Python] 제어문 - 2️⃣ 반복문(1)_bool(), 대입연산자, while문, for in 문, zip함수, enumerate함수

by coding-choonsik 2023. 3. 8.
728x90
반응형
SMALL

1. 자료형 참/거짓 판단하기

  • 파이썬에서 사용하는 모든 자료형은 참 또는 거짓으로 표현이 가능
  • 파이썬에서 모든 자료형은 요소가 있는 경우는 True, 요소가 없는 경우는 False
a = '100'
print(type(a))
>>> <class 'str'>

print(type(int(a)))
>>> <class 'int'>

bool1 = True
print(bool1)
>>> True
print(type(bool1)
>>> <class 'bool'>

 

  • bool(int/float): 숫자형 데이터 타입의 경우 0이면 False, 0이 아닐 경우 모두 True
num1 = 10
print(num1)
print(type(num1))
print(bool(num1))

>>> 10
<class 'int'>
True
num2 = 0
print(num1)
print(type(num2))
print(bool(num2))

>>> 10
<class 'int'>
False

 

  • bool(str): 문자열 데이터 타입의 경우 데이터가 없으면 False, 데이터가 있으면 무조건 True
str1 = '이것은 문자열 타입'
print(str1)
print(type(str1))
print(bool(str1))     # True

>>> 이것은 문자열 타입
<class 'str'>
True
str2 = ''
print(str2)
print(type(str2))  
print(bool(str2))     # False

>>> 
<class 'str'>
False

 

  • bool(list): 리스트 데이터 타입의 경우 데이터가 없으면 False, 데이터가 있으면 무조건 True
list1 = [1, 2, 3]
print(list1)
print(type(list1))
print(bool(list1))   # True : 값이 있기 때문에 True

>>> [1, 2, 3]
<class 'list'>
True
list2 = []
print(list2)
print(type(list2))
print(bool(list2))  # False : 빈 리스트는 False

>>> []
<class 'list'>
False

 

  • if문으로 리스트에 요소가 있는지 확인하기.
list1 = [1, 3, 5]

if list1:
  print('요소가 있습니다')
else:
  print('요소가 없습니다')
  
  >>> 요소가 있습니다

2. 대입 연산자

  • =, +=, -=, *=, /=, %=
  • 왼쪽에 저장된 값과 오른쪽에 값을 연산한 뒤 다시 왼쪽에 대입(inplace 연산)
  • 연산자 순위 중 가장 하위로 가장 마지막에 연산됨
num = 10

num += 1   # num = num + 1
print(num)
>>> 11

num -= 1    # num = num - 1
print(num)
>>> 10

num *= 10   # num = num * 10
print(num)
>>> 100

num /= 10   # num = num / 10
print(num)
>>> 10.0

num %= 2    # num = num % 2  (나머지값)
print(num)
>>> 0.0

3. 반복문

  • 파이썬에서는 while문 / for 문 두 가지
  • 두 종류의 반복문 속도가 같음

3-1. while 문

  • while 문 형식
while 조건식(결과가 bool type):     
  조건식의 결과가 True인 동안 반복할 문장
  ...

 

  • 무한루프 : 끝나지 않아야하는 프로그램이 필요할 때 사용(무한루프가 돈다고 무조건 안좋은건 아님.)
while True:     
  print('무한반복')

 

  • while문으로 '안녕'이 5번만 찍히도록 작성해보자.
i = 1

# i가 6이상이 될 때부터 while문의 조건식이 False
while i <= 5:
  print('안녕')
  i += 1

print('현재 i의 값은 {}입니다'.format(i))  

>>> 안녕
안녕
안녕
안녕
안녕
현재 i의 값은 6입니다

 

  • while문으로 1 ~ 10 까지의 총합 구하기
sum = 0
i = 1

while i <= 10:
   sum += i
   i+= 1

print(f'1부터 10까지의 합: {sum}')

>>> 1부터 10까지의 합: 55

📌 문제

  • 1 ~ 100까지 짝수의 총합을 구하는 프로그램을 작성해보자.
i = 1
sum = 0

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

print(f'1부터 100까지의 짝수의 총합: {sum}')

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

 

📌 문제

  • 원하는 단을 입력받아 해당 단의 구구단을 출력하는 프로그램을 작성해보자.
dan = int(input('원하는 단을 입력하세요: '))
print('{}단'.format(dan))

i = 1
while i <= 9:
    print('{} * {} = {}'. format(dan, i, dan * i))
    i += 1
    
>>> 원하는 단을 입력하세요: 7
7단
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63

3-2 for in 문

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

 

  • isinstance(이터러블한 객체인지 확인하고자 하는 객체, collections.Iterable) : iterable 하면 True, 아니면 False
  •  import collections 해야함.
import collections
list1 = [10,20,30,40]
isinstance(list1, collections.Iterable)

>>> True

 

  • range():  범위를 생성해주는 함수
  • range(시작인덱스, 종료인덱스(직전까지 출력), 증가값)
  • 시작인덱스와 증가값은 생략이 가능하며, 시작 인덱스를 생략하면 기본값은 0, 증가값을 생략하면 기본값은 1
# 0부터 10까지의 짝수를 출력해보자.

num = range(0, 11, 2)
print(num) 
>>> range(0, 11, 2)   # range 객체값

print(list(num))
>>> [0, 2, 4, 6, 8, 10]

for i in num:
  print(i, end=' ')
 >>> 0 2 4 6 8 10

 

  • num 변수가 iterable한 객체인지 확인
isinstance(num, collections.Iterable)
>>> True

 

  • num = 10  일 때 iterable 객체일까?
isinstance(num, collections.Iterable)
>>> False

num = 10
print(num)
>>> 10

for i in num:
  print(i, end=' ')
 
>>> TypeError: 'int' object is not iterable

 

  • 시작 인덱스와 증가값을 각각 생략하여 표현해보자.
for i in range(0,11,2):
  print(i, end=' ')
>>> 0 2 4 6 8 10 

for i in range(0,10):
  print(i, end=' ')
>>> 0 1 2 3 4 5 6 7 8 9 

for i in range(11):
  print(i, end=' ')
 >>> 0 1 2 3 4 5 6 7 8 9 10

📌 문제

  • for in문을 이용하여 1 ~ 100까지의 짝수의 총합을 구하는 프로그램을 작성해보자.
sum = 0
for i in range(2, 101,2):
  sum += i

print('1부터 100까지의 총합: {}'.format(sum))

>>> 1부터 100까지의 총합: 2550

3-3. enumerate

  • 반복문 사용 시 몇번째 반복인지 인덱스 번호로 확인이 가능
  • 인덱스 번호와 요소를 튜플 형태로 반환
  • 출력: (인덱스번호, 요소)
li1 = [10, 20, 30, 40]

for e in enumerate(li1):
  print(e)
  
>>> (0, 10)
(1, 20)
(2, 30)
(3, 40)

 

  • index와 value 변수에 각각 값을 저장하기
for index, value in enumerate(li1):
  print(f'index:{index}, value: {value}')
  
>>> index:0, value: 10
index:1, value: 20
index:2, value: 30
index:3, value: 40

3-4. zip

  • 객체가 담고 있는 원소를 엮어서 튜플의 형태로 반환
  • 매개변수의 길이가 다를 때는 짧은 매개변수 기준으로 데이터가 엮이고, 나머지는 버려짐

 

  • 다음과 같이 출력되도록 프로그램을 작성해보자.

       (10, 'apple')
       (20, 'banana')
       (30, 'orange')

li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']

for i in range(len(li1)):
  print((li1[i],li2[i]))
  
>>> 
(10, 'apple')
(20, 'banana')
(30, 'orange')

# 위 코드는 두 데이터의 길이가 같은 경우에만 출력하기 때문에 좋지 않은 코드이다.]
# 하나의 데이터에만 의존)

for i in range(len(li1)):
  print((li1[i],li2[i]))   
  
>>> IndexError: list index out of range

  • zip()함수 이용하기
for l1, l2 in zip(li1, li2):
  print((l1, l2))
  
>>> 
(10, 'apple')
(20, 'banana')
(30, 'orange')


# 통합해서 튜플로 반환
for l1 in zip(li1, li2):
  print(l1)  
 
>>> 
(10, 'apple')
(20, 'banana')
(30, 'orange')

 

  • zip()함수로 문자열 원소를 엮어보자.
for n, A, a in zip('12345','ABCDE','abcde'):   
  print((n,A,a))
  
>>> 
('1', 'A', 'a')
('2', 'B', 'b')
('3', 'C', 'c')
('4', 'D', 'd')
('5', 'E', 'e')

# 짧은 매개변수에 맞춰 엮이고 나머지는 버려짐
for n, A, a in zip('12345','ABCDEF','abcdef'):   
  print((n,A,a))

>>> 
('1', 'A', 'a')
('2', 'B', 'b')
('3', 'C', 'c')
('4', 'D', 'd')
('5', 'E', 'e')

3-5. list와 tuple을 for문과 함께 사용하기

# iterable: 순서가 있고 요소가 있음

li1 = ['apple', 'banana', 'orange', 'melon']   

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

>>> apple banana orange melon


tu1 = ('apple', 'banana', 'orange', 'melon')  

for i in tu1: 
  print(i, end=' ')
  
>>> apple banana orange melon

📌 문제

  • 아래 score 리스트에 저장된 점수가 60점 이상인 학생이 몇명인지 알아보는 프로그램을 작성해보자.
  • score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
cnt = 0

for i in score:
  if i >= 60:
    cnt += 1
print(f'60점 이상인 학생의 수는 {cnt}명 입니다')

>>> 60점 이상인 학생의 수는 5명 입니다

 

728x90
반응형
LIST