흰둥이는 코드를 짤 때 짖어 (왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!왈!)

(파이썬) 반복문 본문

파이썬 기초

(파이썬) 반복문

흰둥아솜사탕 2023. 3. 7. 16:02
728x90
반응형

1. 반복문

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

  • 파이썬에서 사용하는 모든 자료형은 참 또는 거짓으로 표현이 가능

In [1]:

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

In [6]:

# 0 이 아닌 숫자는 모두 True, 0은 False
num1 = 10
print(num1)
print(type(num1))
print(bool(num1))

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

In [10]:

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

str2 = ''
print(str2)
print(type(str2))
print(bool(str2))
안녕
<class 'str'>
True

<class 'str'>
False

In [9]:

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

list2 = []
print(list2)
print(type(list2))
print(bool(list2))
[1, 2, 3]
<class 'list'>
True
[]
<class 'list'>
False

In [11]:

list1 = [1, 3, 5]

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

1-2. 대입 연산자

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

In [12]:

num = 10

In [17]:

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

In [18]:

num -= 1
print(num)
10

In [19]:

num *= 10
print(num)
100

In [20]:

num /= 10
print(num)
10.0

In [21]:

num %= 2
print(num)
0.0

1-3. while 문

while 조건식:
  조건식의 겨로가가 True인 동안 반복할 문장
  ...

In [24]:

# 무한 루프
while True:
  print('끝나지 않는 반복')

In [28]:

i = 1

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

print(f'현재 i의 값은: {i}')
Hello Python
Hello Python
Hello Python
Hello Python
Hello Python
현재 i의 값은: 6

In [33]:

# 1 ~ 10까지의 총합
# 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

i = 1
sum = 0

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

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

문제

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

나의 풀이 및 강사님 풀이

In [36]:

i = 1
sum = 0

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

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

문제

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

나의 풀이

In [39]:

i = int(input('원하는 단을 입력하세요: '))
j = 1

print(f'{i}단')
while j <= 9:
  print(f'{i} * {j} = {i * j}')
  j += 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

강사님 풀이

In [40]:

dan = int(input('원하는 단을 입력하세요: '))
print(f'{dan} 단')

i=1
while i <= 9:
  print(f'{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

1-4. for in 문

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

In [41]:

list1 = [10, 20, 30, 40]

for li in list1:
  print(li)
10
20
30
40

In [44]:

import collections
# instance(이터러블한 객체인지 확인하고자 하는 객체, collections.Iterable)
isinstance(list1, collections.Iterable)
True

Out[44]:

True

In [45]:

# range(): 범위를 생성해주는 함수
# range(시작인덱스, 종료인덱스, 증가값)
num = range(0, 10, 1)
print(num)
range(0, 10)

In [47]:

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

In [48]:

isinstance(num, collections.Iterable)

Out[48]:

True

In [49]:

num = 10
# print(num)

for i in num:
  print(i, end = ' ')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-49-35697e8a110d> in <module>
      2 # print(num)
      3 
----> 4 for i in num:
      5   print(i, end = ' ')

TypeError: 'int' object is not iterable

In [50]:

isinstance(num, collections.Iterable)

Out[50]:

False

In [51]:

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

In [52]:

# 증가값을 생략하면 기본값은 1
for i in range(0, 10):
  print(i, end=' ')
0 1 2 3 4 5 6 7 8 9 

In [53]:

# 시작값을 생략하면 기본값은 0
for i in range(10):
  print(i, end=' ')
0 1 2 3 4 5 6 7 8 9 

In [55]:

# 시작값은 1, 종료값으 10, 증가값은 2
for i in range(1, 10, 2):
  print(i, end=' ')
1 3 5 7 9 

문제

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

나의 풀이

In [57]:

sum = 0

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

강사님 풀이

In [59]:

sum = 0
for i in range(0, 101, 2):
  sum += i

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

1-5. enumerate

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

In [60]:

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

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

In [61]:

for i, v in enumerate(li1):
  print(f'index:{i}, value:{v}')
index:0, value:10
index:1, value:20
index:2, value:30
index:3, value:40
index:4, value:50

1-6. zip() 함수

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

In [74]:

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

for i in range(len(li1)):
  print((li1[i], li2[i]))
(10, 'apple')
(20, 'banana')
(30, 'orange')
li1 하나에 너무 의존적이므로 옳바르지 않다.

In [75]:

for l1, l2 in zip(li1, li2):
  print((l1, l2))
(10, 'apple')
(20, 'banana')
(30, 'orange')

In [80]:

for li in zip(li1, li2):
  print(li)
(10, 'apple')
(20, 'banana')
(30, 'orange')

In [76]:

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')

In [77]:

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')

1-7. list와 tuple을 for문과 함께 사용하기

In [62]:

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

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

In [63]:

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]

나의 풀이

In [64]:

score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
sum = 0

for i in score:
  if i >= 60:
    sum += 1

print('60점 이상인 학생의 수: ', sum)
60점 이상인 학생의 수:  5

강사님 풀이

In [65]:

score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
count = 0

for i in score:
  if i >= 60:
    count += 1

print(f'60점 이상인 학생의 수는 {count}명입니다')
60점 이상인 학생의 수는 5명입니다

2. 다중반복문

  • 반복문이 2개이상 겹쳐져 있는 형태

In [66]:

for i in range(1, 4):
  print(f'😎 i: {i}')
  for j in range(1, 4):
    print(f'   😍 j: {j}')
😎 i: 1
   😍 j: 1
   😍 j: 2
   😍 j: 3
😎 i: 2
   😍 j: 1
   😍 j: 2
   😍 j: 3
😎 i: 3
   😍 j: 1
   😍 j: 2
   😍 j: 3

In [67]:

# '🎃'를 이용하여 아래와 같은 도형을 만들어보자.
'''
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
'''
for i in range(5):
  for j in range(5):
    print('🎃', end=' ')
  print()
🎃 🎃 🎃 🎃 🎃 
🎃 🎃 🎃 🎃 🎃 
🎃 🎃 🎃 🎃 🎃 
🎃 🎃 🎃 🎃 🎃 
🎃 🎃 🎃 🎃 🎃 

문제1

'🎃'를 이용하여 아래와 같은 도형을 만들어보자.

🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃
🎃 🎃 🎃
🎃 🎃
🎃

나의 풀이

In [68]:

for i in range(5):
  for j in range(5-i):
    print('🎃', end=' ')
  print()
🎃 🎃 🎃 🎃 🎃 
🎃 🎃 🎃 🎃 
🎃 🎃 🎃 
🎃 🎃 
🎃 

강사님 풀이

In [70]:

for i in range(5):
  for j in range(i, 5):
    print('🎃', end=' ')
  print()
🎃 🎃 🎃 🎃 🎃 
🎃 🎃 🎃 🎃 
🎃 🎃 🎃 
🎃 🎃 
🎃 

문제2

'🎃'를 이용하여 아래와 같은 도형을 만들어보자.

🎃
🎃 🎃
🎃 🎃 🎃
🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃

나의 풀이 및 강사님 풀이

In [69]:

for i in range(5):
  for j in range(i+1):
    print('🎃', end=' ')
  print()
🎃 
🎃 🎃 
🎃 🎃 🎃 
🎃 🎃 🎃 🎃 
🎃 🎃 🎃 🎃 🎃 

In [71]:

# 2단부터 9단까지 구구단을 출력하는 프로그램을 작성

for i in range(2, 10):
  print(f'{i} 단')
  for j in range(1, 10):
    print(f'{i} * {j} = {i*j}')
  print()
22 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

33 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

# 9단까지 나오지만 생략

문제

  • 2단부터 9단까지 구구단을 출력하는 프로그램을 while으로 작성해보자

나의 풀이 및 강사님 풀이

In [72]:

i = 2
j = 1

while i<=9:
  print(f'{i}단')
  while j<=9:
    print(f'{i} * {j} = {i*j}')
    j += 1

  i += 1
  j = 1
  print()
22 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

33 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27

# 9단까지 나오지만 생략

문제

  • 아래 score 리스트의 요소를 모두 출력하는 프로그램을 작성해보자
  • score = [[80, 90, 50], [40, 70, 30], [90, 50, 100]]

나의 풀이 및 강사님 풀이

In [73]:

score = [[80, 90, 50], [40, 70, 30], [90, 50, 100]]

for i in score:
  for j in i:
    print(j, end=' ')
80 90 50 40 70 30 90 50 100 

3. 컴프리헨션(Comprehension)

  • 이터러블한 오브젝트를 생성하기 위한 방법 중 하나로 파이썬에서 사용할 수 있는 유용한 기능

In [81]:

n = range(0, 10, 1)
print(n)
range(0, 10)

In [82]:

n = 10

result = [0 for i in range(n)]
print(result)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

In [83]:

result = [i for i in range(n)]
print(result)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [84]:

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

result = [n for n in arr]
print(result)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [85]:

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

result = [n*n for n in arr]
print(result)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

In [86]:

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

result = [len(string) for string in arr]
print(result)
[5, 6, 6, 5]

In [88]:

result = [n for n in range(10) if n % 2 == 0]
print(result)
[0, 2, 4, 6, 8]

In [89]:

# 0 ~ 100까지의 숫자 중 3의 배수이며, 홀수인 숫자만 리스트에 저장하기
result = [n for n in range(101) if n % 3 == 0 if n % 2 != 0]
print(result)
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]

In [90]:

result = [n for n in range(101) if n % 3 == 0 and n % 2 != 0]
print(result)
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]

In [91]:

arr = [-1, 0, -4, 24, 5, -10, 2]

# 양수는 리스트에 그대로 저장하고, 음수는 0으로 변환해서 저장하기
result = [n if n>0 else 0 for n in arr]
print(result)
[0, 0, 0, 24, 5, 0, 2]

In [93]:

arr = []
for i in range(1, 4):
  for j in range(1, 3):
    arr.append(i * j)

print(arr)
[1, 2, 2, 4, 3, 6]

In [94]:

arr = [i*j for i in range(1,4) for j in range(1, 3)]
print(arr)
[1, 2, 2, 4, 3, 6]

In [95]:

result = [[0 for i in range(2)] for j in range(3)]
print(result)
[[0, 0], [0, 0], [0, 0]]
728x90
반응형

'파이썬 기초' 카테고리의 다른 글

(파이썬) 세트  (0) 2023.03.08
(파이썬) 딕셔너리  (0) 2023.03.08
(파이썬) 조건문 및 연산자  (0) 2023.03.07
(파이썬) 튜플  (0) 2023.03.07
(파이썬) 리스트  (0) 2023.03.06
Comments