728x90
반응형
SMALL

1. 반복문

 

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

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

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

# int
# 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
 
 

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

<class 'str'>
False
 
 

 
 
# list
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
 
 

 
 
list1 = [1, 3, 5]

if list1: #값이 있어 True
    print('요소가 있습니다')
else:
    print('요소가 없습니다')
 
요소가 있습니다
 
 

1-2. 대입 연산자

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

 
num = 10

num += 1 # num = num + 1 과 같음
print(num)
 
11
 

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

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

 
num = 10
num /= 10
print(num)
 
1.0
 

 
num = 10
num %= 2
print(num)
 
0
 
 

1-3. while 문

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

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

 
i = 1

while i <= 5:
    print('Hello python')
    i += 1
print('현재 i의 값은:', i)
print('루프가 %d번 반복하였습니다' % (i-1))

 
Hello python
Hello python
Hello python
Hello python
Hello python
현재 i의 값은: 6
루프가 5번 반복하였습니다
 

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

 
# 1 ~ 10까지의 총합
# 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
'''
sum = 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55 -> print
i   = 1, 2, 3, 4,  5,  6,  7,  8,  9, 10, 11
'''

i = 1
sum = 0

while i <= 10:
    sum += i
    i += 1
print(f'1부터 10까지의 합: {sum}')
 
1부터 10까지의 합: 55
 
 

문제 1

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

 
i = 0
sum = 0

while i <= 100:
    if i % 2 == 0:
        sum += i
        i += 2
#    else:
#        i += 1
print(f'1~100까지의 짝수의 합: {sum}')
 
1~100까지의 짝수의 합: 2550
 
 

 
# 선생님 답안

i = 1
sum = 0

while i <= 100:
    if i % 2 == 0:
        sum += i
    i += 1
print(f'1부터 10까지의 합: {sum}')
 
1부터 10까지의 합: 2550
 
 

문제 2

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

 
# 원하는 단을 입력하세요: 7
# 7단
# 7 * 1 = 7
# 7 * 2 = 14
# ...
# 7 * 9 = 63

dan = int(input('원하는 단을 입력하세요: '))
print('%d단' % dan)

i = 1

while i <= 9:
    print('%d * %d = %d' % (dan, i, dan * i))
    i += 1
 
원하는 단을 입력하세요: 5
5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
 
 

 
# 선생님 답안
dan = int(input('원하는 단을 입력하세요: '))
print(f'{dan} 단')

i = 1

while i <= 9:
    print(f'{dan} * {i} = {dan * i}')
    i += 1
 
원하는 단을 입력하세요: 5
5 단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
 
 

1-4. for in 문

for 변수 in iterable 객체:
    이터러블 객체의 요소 갯수만큼 반복할 문장
    ...
  • ★★★ iterable 객체: 순서가 있고 요소가 있는객체
 

 
list1 = [10, 20, 30, 40]

for li in list1:
    print(li)

 
10
20
30
40
 

 

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

isinstance(list1, collections.Iterable)
 
True
 
 

 
# range(): 범위를 생성해주는 함수
# range(시작인덱스, 종료인덱스(여기 직전까지임), 증가값)
num = range(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 해줘야 함
isinstance(num, collections.Iterable)
 
True
 
 

 
num = 10
# print(num)

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

 
isinstance(num, collections.Iterable)
 
False
 

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

 

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

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

문제

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

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

 
# 선생님 답안
sum = 0
for i in range(0, 101, 2):
    sum += i

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

1-5. enumerate

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

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

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

1-6. zip() 함수

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

# li1, li2의 요소 갯수가 같기때문에 괜찮지만 
# 다를경우도 있기 때문에 좋은 코드는 아니다.
 
(10, 'apple')
(20, 'banana')
(30, 'orange')

 
 
for l1, l2 in zip(li1, li2):
    print((l1, l2))
# 위의 코드의 더 좋은 버전
# for 변수1, 변수2 zip(이터러블객체1, iterable2):
 
(10, 'apple')
(20, 'banana')
(30, 'orange')

 
 
# 튜플의 형태로 반환한다.
for li in zip(li1, li2):
    print(li)
 
(10, 'apple')
(20, 'banana')
(30, 'orange')

 
# 3개도 튜플로 묶기 가능
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')

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

 

 
 
# 리스트에서 for문 사용하기
li1 = ['apple', 'banana', 'orange', 'melon']

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

 
# 튜플에서 for문 사용하기
li1 = ('apple', 'banana', 'orange', 'melon')

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

문제 1

아래 score 리스트에 저장된 점수가 60점 이상인 학생이 몇명인지 알아보는 프로그램을 작성해보자

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

 
score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
num = 0
for i in score:
    if i >= 60:
        num += 1
print(f"60 점 이상인 학생은{num}명 입니다.")    
 
60 점 이상인 학생은5명 입니다.

 
# 선생님 답안
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개 이상 겹쳐져 있는 형태

 
 
for i in range(1, 4):
    print(f'😎i: {i}')
    for j in range(1, 4):
        print(f'{" " * 4}😍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

 
 
# '😈'를 이용하여 아래와 같은 도형을 만들어 보자. (다중반복문으로!!!)
'''
😈 😈 😈 😈 😈
😈 😈 😈 😈 😈
😈 😈 😈 😈 😈
😈 😈 😈 😈 😈
😈 😈 😈 😈 😈
'''

for i in range(5):
    for j in range(5):
        print('😈', end=" ") # 25번 옆으로찍힌다.
    print() # print가 엔터키 역할

 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 😈 

문제 1

'😈'를 이용하여 아래와 같은 도형을 만들어 보자. (다중반복문으로!!!)

😈 😈 😈 😈 😈
😈 😈 😈 😈
😈 😈 😈
😈 😈
😈


 
 
for i in range(5):

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

 
 
# 선생님 답안
for i in range(5):
    for j in range(i, 5):
        print('😈', end=" ") 
    print() 
 
😈 😈 😈 😈 😈 
😈 😈 😈 😈 
😈 😈 😈 
😈 😈 
😈 

문제 2

'😈'를 이용하여 아래와 같은 도형을 만들어 보자. (다중반복문으로!!!)

😈
😈 😈
😈 😈 😈
😈 😈 😈 😈
😈 😈 😈 😈 😈


 
 
# for i in range(5):

for j in range(5):
    j += 1  
    print()      
    print(f"{'😈' * (j)}", end=" ")
        
 
😈 
😈😈 
😈😈😈 
😈😈😈😈 
😈😈😈😈😈 
 

 
 
# 선생님 답안
for i in range(5):
    for j in range(0, i + 1):
        print('😈', end=" ") 
    print() 
 
😈 
😈 😈 
😈 😈 😈 
😈 😈 😈 😈 
😈 😈 😈 😈 😈 

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

# 9단
# 9 * 1 = 9
# ...
# 9 * 9 = 81

for i in range(2,10):#단
    print(f'{i}단')
    # 2 * 1 = 2
    # 2 * 2 = 4
    for j in range(1,10):
        print(f'{i} * {j} = {i * j}')
    print()
 
2단
2 * 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

3단
3 * 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

4단
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

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

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

8단
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

9단
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81


문제

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

 
 
dan = 2
while dan < 10:
    num = 1 # 한바퀴 돌고나면 다시 곱해지는 숫자가 1이 되어야 곱셈을 연산하기때문에
            # while문 안에서 변수를 계속 갱신할수 있게 지정해준다
    print(f'{dan}단')
    while num < 10:
        print(f'{dan} * {num} = {dan * num}')
        num += 1 #곱하기 한번하면 곱할숫자를 하나씩 늘려준다.
    dan += 1 #곱셈연산이 끝나면 단의 수를 하나 더해준다.
    print() #엔터키.
 
2단
2 * 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

3단
3 * 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

4단
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36

5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

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

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

8단
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72

9단
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81


 
 
# 선생님 답안

# 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()
 
 

문제

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

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

for i in range(0, 3):
    for j in range(0, 3):
        print(score[i][j], end=" ")
 
80 90 50 40 70 30 90 50 100 

 
 
score = [[80, 90, 50], [40, 70, 30], [90, 50, 100]]
i = 0
j = 0
while i < 3:
    while j < 3:
        print(score[i][j], end=" ")
        j += 1   # j 인덱스 증가
    i += 1 # i 인덱스 증가
    j = 0 # j 초기화

 
80 90 50 40 70 30 90 50 100 

 
 
# 선생님 답안

# for i in range(3):    ### 상수를 고정해서 사용하면 데이터가 바뀌게 되었을때 
#     for j in range(3):### 코드를 변경하여야 하기때문에 아래 방법
#         print(score[i][j], end=" ")### 객체를 지정해버리는 것 이 더 좋다
### 파이썬에서만 사용가능한 방법임(아래)

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

3. 컴프리헨션(Comprehension)

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

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

[ ]n = 10 result = [0 for i in range(n)] # 0 ~ 9 까지 반복하면서 각각에 0을 대입하고 리스트형태로 만들어  # result 라는 변수에 대입해라 print(result)
 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

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

result = [n*n for n in arr]
# arr의 갯수만큼 반복하면서 요소를 n에 대입
# 그후 n*n 값을 뽑아서 리스트 형태로 출력하란 뜻
print(result)
 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

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

result = [len(string) for string in arr]
# arr의 갯수만큼 반복하면서 요소를 string에다 대입,
# 그후 string의 요소의 길이를 result에 대입하여 리스트로 출력
print(result)
 
[5, 6, 6, 5]

 
 
# if 문도 사용 가능
result = [n for n in range(10) if n % 2 == 0]
print(result)
 
[0, 2, 4, 6, 8]
 

 
 
# 0 ~ 100의 숫자 중 3의 배수이며, 홀수인 숫자만 리스트에 저장하기

result = [n for n in range(101) if n % 3 == 0 if n % 2 != 0]
print(result)

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]
[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]

 
 
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]
 

 
 
 
 
 
 
[1, 2, 2, 4, 3, 6]
[1, 2, 2, 4, 3, 6]

 
 
 
 
 
 
[[0, 0], [0, 0], [0, 0]]

728x90
반응형
LIST

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

세트(set)  (0) 2023.03.08
자료구조- 딕셔너리(dictionary)  (0) 2023.03.08
제어문- 조건문(if 함수)  (0) 2023.03.07
튜플(Tuple)  (0) 2023.03.07
자료구조- list  (0) 2023.03.06

+ Recent posts