파이썬(Python)

For 반복문

BlueNoa 2021. 6. 12. 20:10
728x90
반응형

· For문

다른 프로그래밍 언어에서도 For 반복문은 자주 사용된다.

for문은 다양한 범위를 지정해서 사용자가 원하는 구조를 만들어 줄 수 있으며 구조 자체가 한 눈에 들어오기 때문에 작성하는데 있어 편하다는 장점이 있다.

 

 


· for문의 기본 구조

for 객체 in 범위:
    명령어1

 

<간편 예제>

for i in [1,2,3,4,5,6]:
    print(i, end=" ") # 가로로 공백을 넣어서 일렬로 출력한다.

 

· 여러 타입의 for문

<예제>

# list
color = ['r', 'g', 'b']
for c in color:
    print(c, end=' ')
    
# set : 순서(불규칙), 중복을 허락하지 않는다.
print()
color = {'r','g','b','r','g','g'}
for c in color:
    print(c, end = ' ')
    
# tuple
print()
color = ('r','g','b')
for c in color:
    print(c, end = ' ')

# dict
print()  
pcos = {'apple':'macOS','MS':'Window'}
for os in pcos.items(): # keys(), values() 등도 가능
    print(os, end = ' ')

<결과>

r g b 
g b r 
r g b 
('apple', 'macOS') ('MS', 'Window') 

· for문으로 구구단 만들기 + range()함수

저번 게시물에서는 while문으로 구구단을 표현했었다. 이번엔 for문을 이용해서 구구단을 만들어 보자.

<코드>

for a in range(2, 10):
    print('---{0}단---'.format(a))
    for b in range(1, 10):
        print('{0} * {1} = {2}'.format(a,b,a*b))

<결과>

---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부터 100까지 소수 구하기 (for문과 range()함수)

<코드>

# 소수 구하기
for i in range(2, 101): # 소수
    check = True
    for j in range(2, i): # 2부터 i - 1까지 반복
        if i % j == 0: # i = 5일때, j는 2, 3, 4
            # 즉, 소수란 1과 자기 자신만 나누어 떨어져야 한다.
            check = False
            break # 나누어 떨어지는 값이 생기면 바로 중단
    if check == True:
        print(i)

<결과>

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

 


​· enumerate() 함수 - 수를 세다, 열거하다 라는 뜻을 갖고 있다.

<예제>

a = ['a','b','c','d']
for i, d in enumerate(a):
    print(i, d) # index값과 데이터 값을 출력한다.

<결과>

0 a
1 b
2 c
3 d

※ list, tuple, set, dictionary, string 등의 데이터들을 받아서 index 값과 데이터의 요소 값을 함께 출력한다.

 

· for문을 한줄로 압축하기

<예제>

# 기존 표현 방법
l1 = [3, 4, 5] 
l2 = [0.5, 1, 2] 
for a in l1: 
    for b in l2: 
        print(a + b, end = ' ') 

# 한 줄로 압축해서 출력하는 예시         
print()
datas = [a + b for a in l1 for b in l2] # 수식을 쓰고 for문으로 a와 b를 가져온다. 
print(datas)

<결과>

3.5 4 5 4.5 5 6 5.5 6 7 
[3.5, 4, 5, 4.5, 5, 6, 5.5, 6, 7]

 

· for문을 통한 단어의 개수 세기

<예제>

# 단어의 갯수 세기
import re # 정규 표현식을 사용하기 위한 모듈
print('--- 문자열 단어의 수를 출력하기 위한 본문 내용 ---')

# 뉴스 본문
news_content = """
신종 코로나바이러스(코로나19)가 중국 우한 연구소에서 최초로 유출된 것이라고 밝혔던 중국의 한 바이러스학자가 중국뿐 아니라 
미국 보건당국도 이를 알고도 은폐했다고 폭로했다.
중국 질병예방통제센터(CDC)가 파우치에게 보낸 이메일 중에는 팬데믹과 관련해 사태의 심각성이 담긴 내용도 있었다고 말했다.

옌리멍은 앞서 이전에도 지난해 2건, 올해 1건 등 코로나19 관련 논문을 발표한 바 있다. 가장 최근인 지난 3월 31일에 발표한 논문에서는 
"코로나19의 원인은 자연적으로 발생하는 병원체가 아니라, 무제한적인 생물학무기"라고 표현했다.

당시 그는 "(바이러스는) 중국 공산당 정부의 생물학무기 실험으로 만들어진 것"이라며 "공산당 소속 과학자들뿐만 아니라, 
다른 나라의 과학자들과 단체들도 연관되어 있다"고 설명했다.

해당 내용은 동료들의 검증이나 평가를 거치지 않고 온라인 개방형 플랫폼 '제노도(Zenodo)'를 통해 출판됐다.

바이러스가 우한 연구소에서 최초로 유출됐다는 가설은 팬데믹 초기 중국 정부를 비난하기 위한 음모론 정도로 치부됐으나, 
조 바이든 미국 대통령이 당국에 관련 내용을 들여다보라고 주문하면서 재조명되고 있다. 영국 매체 선데이타임스에 따르면 
최근 영국 정보당국도 이와 관련, '비현실적'이라 판단하던 것을 '실현 가능'이라고 재평가한 바 있다.
"""
# 정규식
Rect = re.sub(r'[^가-힣\s]', '', news_content) # 한글과 공백만 추출
# sub는 문자열을 특정 문자로 구분지어(여기서는 '') 뽑아내는 치환 기능이다.
# \s : 공백

print(Rect)

a = Rect.split(' ') # 공백으로 문자열들을 나눴다.
print(a)

cnt = {} # 단어 개수 세기용
for i in a: # i는 a에 값을 순차 반복적으로 받아온다.
    if i in cnt: # i가 cnt 안에 존재한다면 True, 아니면 False => 처음엔 다 공집합이기 때문에 else값이 들어간다.
        cnt[i] += 1 # cnt의 ['단어 key값']이 존재하면 계속 + 1이 된다. 
    else:
        cnt[i] = 1 # cnt['단어 key값'] = value 값으로 dict타입이 된다.
print(cnt) # 결과 출력

<코드>

--- 문자열 단어의 수를 출력하기 위한 본문 내용 ---

신종 코로나바이러스코로나가 중국 우한 연구소에서 최초로 유출된 것이라고 밝혔던 중국의 한 바이러스학자가 중국뿐 아니라 
미국 보건당국도 이를 알고도 은폐했다고 폭로했다
중국 질병예방통제센터가 파우치에게 보낸 이메일 중에는 팬데믹과 관련해 사태의 심각성이 담긴 내용도 있었다고 말했다

옌리멍은 앞서 이전에도 지난해 건 올해 건 등 코로나 관련 논문을 발표한 바 있다 가장 최근인 지난 월 일에 발표한 논문에서는 
코로나의 원인은 자연적으로 발생하는 병원체가 아니라 무제한적인 생물학무기라고 표현했다

당시 그는 바이러스는 중국 공산당 정부의 생물학무기 실험으로 만들어진 것이라며 공산당 소속 과학자들뿐만 아니라 
다른 나라의 과학자들과 단체들도 연관되어 있다고 설명했다

해당 내용은 동료들의 검증이나 평가를 거치지 않고 온라인 개방형 플랫폼 제노도를 통해 출판됐다

바이러스가 우한 연구소에서 최초로 유출됐다는 가설은 팬데믹 초기 중국 정부를 비난하기 위한 음모론 정도로 치부됐으나 
조 바이든 미국 대통령이 당국에 관련 내용을 들여다보라고 주문하면서 재조명되고 있다 영국 매체 선데이타임스에 따르면 
최근 영국 정보당국도 이와 관련 비현실적이라 판단하던 것을 실현 가능이라고 재평가한 바 있다


['\n신종', '코로나바이러스코로나가', '중국', '우한', '연구소에서', '최초로', '유출된', '것이라고', '밝혔던', '중국의', '한', '바이러스학자가', '중국뿐', '아니라', '\n미국', '보건당국도', '이를', '알고도', '은폐했다고', '폭로했다\n중국', '질병예방통제센터가', '파우치에게', '보낸', '이메일', '중에는', '팬데믹과', '관련해', '사태의', '심각성이', '담긴', '내용도', '있었다고', '말했다\n\n옌리멍은', '앞서', '이전에도', '지난해', '건', '올해', '건', '등', '코로나', '관련', '논문을', '발표한', '바', '있다', '가장', '최근인', '지난', '월', '일에', '발표한', '논문에서는', '\n코로나의', '원인은', '자연적으로', '발생하는', '병원체가', '아니라', '무제한적인', '생물학무기라고', '표현했다\n\n당시', '그는', '바이러스는', '중국', '공산당', '정부의', '생물학무기', '실험으로', '만들어진', '것이라며', '공산당', '소속', '과학자들뿐만', '아니라', '\n다른', '나라의', '과학자들과', '단체들도', '연관되어', '있다고', '설명했다\n\n해당', '내용은', '동료들의', '검증이나', '평가를', '거치지', '않고', '온라인', '개방형', '플랫폼', '제노도를', '통해', '출판됐다\n\n바이러스가', '우한', '연구소에서', '최초로', '유출됐다는', '가설은', '팬데믹', '초기', '중국', '정부를', '비난하기', '위한', '음모론', '정도로', '치부됐으나', '\n조', '바이든', '미국', '대통령이', '당국에', '관련', '내용을', '들여다보라고', '주문하면서', '재조명되고', '있다', '영국', '매체', '선데이타임스에', '따르면', '\n최근', '영국', '정보당국도', '이와', '관련', '비현실적이라', '판단하던', '것을', '실현', '가능이라고', '재평가한', '바', '있다\n']


{'\n신종': 1, '코로나바이러스코로나가': 1, '중국': 3, '우한': 2, '연구소에서': 2, '최초로': 2, '유출된': 1, '것이라고': 1, '밝혔던': 1, '중국의': 1, '한': 1, '바이러스학자가': 1, '중국뿐': 1, '아니라': 3, '\n미국': 1, '보건당국도': 1, '이를': 1, '알고도': 1, '은폐했다고': 1, '폭로했다\n중국': 1, '질병예방통제센터가': 1, '파우치에게': 1, '보낸': 1, '이메일': 1, '중에는': 1, '팬데믹과': 1, '관련해': 1, '사태의': 1, '심각성이': 1, '담긴': 1, '내용도': 1, '있었다고': 1, '말했다\n\n옌리멍은': 1, '앞서': 1, '이전에도': 1, '지난해': 1, '건': 2, '올해': 1, '등': 1, '코로나': 1, '관련': 3, '논문을': 1, '발표한': 2, '바': 2, '있다': 2, '가장': 1, '최근인': 1, '지난': 1, '월': 1, '일에': 1, '논문에서는': 1, '\n코로나의': 1, '원인은': 1, '자연적으로': 1, '발생하는': 1, '병원체가': 1, '무제한적인': 1, '생물학무기라고': 1, '표현했다\n\n당시': 1, '그는': 1, '바이러스는': 1, '공산당': 2, '정부의': 1, '생물학무기': 1, '실험으로': 1, '만들어진': 1, '것이라며': 1, '소속': 1, '과학자들뿐만': 1, '\n다른': 1, '나라의': 1, '과학자들과': 1, '단체들도': 1, '연관되어': 1, '있다고': 1, '설명했다\n\n해당': 1, '내용은': 1, '동료들의': 1, '검증이나': 1, '평가를': 1, '거치지': 1, '않고': 1, '온라인': 1, '개방형': 1, '플랫폼': 1, '제노도를': 1, '통해': 1, '출판됐다\n\n바이러스가': 1, '유출됐다는': 1, '가설은': 1, '팬데믹': 1, '초기': 1, '정부를': 1, '비난하기': 1, '위한': 1, '음모론': 1, '정도로': 1, '치부됐으나': 1, '\n조': 1, '바이든': 1, '미국': 1, '대통령이': 1, '당국에': 1, '내용을': 1, '들여다보라고': 1, '주문하면서': 1, '재조명되고': 1, '영국': 2, '매체': 1, '선데이타임스에': 1, '따르면': 1, '\n최근': 1, '정보당국도': 1, '이와': 1, '비현실적이라': 1, '판단하던': 1, '것을': 1, '실현': 1, '가능이라고': 1, '재평가한': 1, '있다\n': 1}

 

[기사 출처] - https://www.mk.co.kr/news/world/view/2021/06/542977/

 

 

· 시간함수를 이용하여 현재시간의 일정 출력하기

<코드>

import time
from time import localtime # 본인 컴퓨터의 로컬 시간을 알려주는 모듈
print(localtime()) # 현재 시간과 각종 데이터를 출력한다. tm_isdst=0 는 섬머 타임이다.
a = {8:'기상', 9:'수업', 14:'점심', 18:'수업 끝', 23:'취침'}
# print(a)
hour = localtime().tm_hour
for i in sorted(a.keys()):
    ti = localtime()
    time.sleep(2)
    # print(i)
    print(ti.tm_year, ti.tm_mon, ti.tm_mday, ti.tm_hour, ti.tm_min, ti.tm_sec)
    if hour < i:
        print(a[i]) # a.keys값이 들어간다.
        break

<결과>

time.struct_time(tm_year=2021, tm_mon=6, tm_mday=12, tm_hour=19, tm_min=25, tm_sec=42, tm_wday=5, tm_yday=163, tm_isdst=0)
2021 6 12 19 25 42
2021 6 12 19 25 44
2021 6 12 19 25 46
2021 6 12 19 25 48
2021 6 12 19 25 50
취침

 

 

· 구매한 물건 개수에 따른 가격 자동 계산

price = {'아이폰':1000, '갤럭시':800, '벨벳':500}
gogek = {'아이폰':2, '갤럭시':1} # 아이폰 두 개와 갤러기 하나 구매
result = sum(price[a] * gogek[a] for a in gogek) # 고객 dict의 key가 a로 들어간다.
print('고객이 구매한 제품의 총 가격 : {}원'.format(result))
고객이 구매한 제품의 총 가격 : 2800원

 

 

728x90
반응형

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

정규 표현식(정규식) - 2  (0) 2021.06.13
정규 표현식(정규식) - 1  (0) 2021.06.13
While문과 Random함수  (0) 2021.06.10
If문 - 조건문  (0) 2021.06.09
Set 자료  (0) 2021.06.09