본문 바로가기

Back-End/Python

[Python][파이썬] 제어문 - 조건문(if), 반복문(for, while)

~ 목차 ~

1. 제어문 (control statement) : 문장들이 실행되는 순서를 제어하는 문장

 

 - 제어구조 

     ①순차구조 (흐름대로)

     ②선택구조 (참 ? , 거짓 ? )

     ③반복구조 

 

 - 조건문 (if - else 문)

#형식
if 조건식 :
	문장1
elif 조건식 : 
	문장2
elif 조건식 :
	문장3
else : 
	문장4

 

 ※ 논리연산자

  •  x and y : True True 일 때만 True
  • x or y : True가 1개 이상이면 True
  • not x :  항상 True

삼단 표현

삼단 표현은 if-else 블럭을 한 줄로 표현

문장1 if 조건식 else 문장4

 

 

 - 반복문 (for, while)

  • 횟수 반복 (for 문) : 정해진 횟수만큼 반복
for 변수 in 리스트/튜플/문자열 : 실행문1...
  • 조건 반복 (while 문) : 특정 조건이 성립되는 동안 반복, 반드시 조건식을 변경시키는 로직이 필요 ( i += 1 )
  • continue, break, pass
    • continue : 해당 조건에서 그 루프가 끝나고 다음 루프로 넘어 간다.(건너 뛰기)
    • pass : 실행할 코드가 없는 건을 뜻함. (모두 다 실행하고 다음 루프 넘어 간다.)
    • break : 반복문 자체를 중단 한다.

 

# 제어문 for
- 횟수 반복문
- 가장 많이 쓰임.
- 리스트 / 튜플 / 문자열의 요소의 갯수만큼 반복한다.
- for 변수 in 리스트/튜플/문자열 : 실행문1...

< if 문 >

  • `elif'는 `else if'의 약자.
  • if...elif...elif... 가 연속되면 다른 언어에서의 switch 또는 case 서술문에 대응 (파이썬에는 switch, case 서술문이 없음)
  • else부분은 선택적
if price > 20000 :
	shipping_cost = 0
else :
	shipping_cost = 3000

 

< for 문 >

  • 횟수 반복문
  • 가장 많이 쓰임.
  • 리스트 / 튜플 / 문자열의 요소의 갯수만큼 반복한다.
  • 형태 : for 변수 in 리스트/튜플/문자열 : 실행문1...

예제1 list

ls = [1, 2, 3, 4, 5 ]
for i in ls :
    print(i)

 

결과

1
2
3
4
5

 

예제2 range

for i in range(0, 10):
    print(i)

 

결과

0
1
2
3
4
5
6
7
8
9

# range(len(ls))
list(range(len(ls)))

 

결과

[0, 1, 2, 3, 4]

 

 

예제3  자장면을 x그릇 먹으면 무료 쿠폰

for i in range(1, 11):
    print(f'자장면 {i}그릇을 먹었습니다.')
print('무료 쿠폰을 받았습니다.')

 

결과

자장면 1그릇을 먹었습니다.
자장면 2그릇을 먹었습니다.
자장면 3그릇을 먹었습니다.
자장면 4그릇을 먹었습니다.
자장면 5그릇을 먹었습니다.
자장면 6그릇을 먹었습니다.
자장면 7그릇을 먹었습니다.
자장면 8그릇을 먹었습니다.
자장면 9그릇을 먹었습니다.
자장면 10그릇을 먹었습니다.
무료 쿠폰을 받았습니다.

 

 

예제4 continue : 짝수이면 건너뛰기

for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i)

 

결과

1
3
5
7
9

 

 

예제4 break : 조건 만족하면 반복문 끝

for i in range(1, 11):
    if i % 2 == 0:
        break
    print(i)

 

결과

1

 

 

예제4 pass : 모두 다 실행

for i in range(1, 11):
    if i % 2 == 0:
        pass
    print(i)

 

결과

1
2
3
4
5
6
7
8
9
10

 

 

예제5 : 리스트에서 for문

ls = []
for i in range(1, 51):
    if i % 5 == 0:
        ls.append(i)
print(ls)

 

결과

[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]

 

 

예제5 : 딕셔너리에서 for문

dic = {'name' : 'Merry',
       'num' : 1,
       'birth' : 'jan'}
dic.items()
for key, value in dic.items():
    print(key, ' : ', value)

 

결과

name  :  Merry
num  :  1
birth  :  jan

 

 

예제5 : 튜플에서 for문

a = [(1, 2), (3, 4), (5, 6)]
for i in a:
    print(i)
    print(i[0]+i[1])

 

결과

(1, 2)
3
(3, 4)
7
(5, 6)
11

 

# print(i[0]+i[1]) 이거 대신

# print(i[0]+i[1]) 이거 대신
for i, j in a:
    print(i + j)

 

결과

3
7
11

 

 

#구구단

#구구단
for i in range(2, 10):
    for j in range(1, 10):
        print( i * j, end=' ')
    print()

 

결과

2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36 
5 10 15 20 25 30 35 40 45 
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81

 

 

 

< List 내 for 문 >

  • 리스트 안에 for문을 포함하여 한줄!!로 편하게 코드 작성 하는 문법.
  • [표현식 for 항목 in 반복가능객체 if 조건문]
기본 for 문 list 내 for문 결과
ls = list()
for i in range(1, 5):
     ls.append(i)
print(ls)
ls = [ i for i in range(1, 5) ]
print(ls)
[1, 2, 3, 4]
ls = list()
for i in range(1, 5):
     if i % 2 == 0:
          ls.append(i)
print(ls)
ls = [ i for i in range(1, 5) if i % 2 == 0 ]
print(ls)
#짝수값
[2, 4]
ls = list()
for i in range(1, 5):
    if i % 2 == 0:
        ls.append( i * 4 )
print(ls)
ls = [ i * 4 for i in range(1, 5) if i % 2 == 0 ]
print(ls)
#짝수값 * 4
[8, 16]

 

  • 조건문이 여러 개일 경우
    [표현식 for 항목1 in 반복가능객체1 if 조건문1 for 항목2 in 반복가능객체 if 조건문2...]
#기본 for문
gugudan = list()
for i in range(2, 10):
    for j in range(1, 10):
        gugudan.append(i*j)
print(gugudan)

 

#list 내 for문
gugudan = [ i*j for i in range(2, 10) for j in range(1, 10)]
print(gugudan)

 

결과

[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]

 

 

 

<Dict comprehension (딕셔너리 내 for문)>

 

# Dict comprehension

# Dict comprehension
names = ['Merry', 'John', 'Chris']
num = [1, 2, 3]
dic = {names[i] : num[i] for i in range(len(names))}
dic

 

# 기본 for문

dic1 = dict()
# dic1 = {}
for i in range(len(names)):
    dic1[names[i]] = num[i]
print(dic1)

 

# zip를 사용해서 딕셔너리 형태로 반복문 만들기 (index안쓰기 위해 사용하게됨 + 실수 줄이는 방법)

#zip를 사용해서 딕셔너리형태로 반복문 만들기(index안쓰기 위해 사용하게됨 + 실수 줄이는 방법)
dic = {k:v for k, v in zip(names, num)}
dic

 

 

결과

{'Merry': 1, 'John': 2, 'Chris': 3}

 

 

 


<실습 문제>

예제1

#제목 : 콘테스트 평가 프로그램

#7명의 심판들의 점수를 입력받아 리스트에 저장하고 최소값과 최대값을 리스트에서 제거하는 프로그램을 작성
#제거전 [10.0, 9.0, 8.3, 7.1, 3.0, 9.0, 6.0]
#제거후 [9.0, 8.3, 7.1, 9.0, 6.0]

점수 = [10.0, 9.0, 8.3, 7.1, 3.0, 9.0]
최소값 = min(점수)
최대값 = max(점수)

점수.remove(최대값)
점수.remove(최소값)

print(점수)

 

반복문 사용


# 7번의 인풋 필요 (while)
# 입력값이 실수(float)여야한다.
# 입력값을 리스트에 저장 해야 한다.(input(), append)
# 최솟값, 최댓값을 찾아야 한다.( min(), max() )
# 평균을 구해서 출력하자.( sum(), len() )

scores = list()
count = 0
while count < 7:
    count += 1
    #숫자인지 확인하는 메서드 : isdecimal()
    jumsu = input(f'{count}번째 심사위원 점수를 입력하세요:')
    if jumsu.replace('.', '').isdecimal():
        scores.append(float(jumsu))
print(scores, min(scores), max(scores))
scores.remove(min(scores))
scores.remove(max(scores))
print(f'제거 완료된 리스트는 {scores}입니다.')
avg = sum(scores)/len(scores)
print(f'평균은 : {avg}입니다.')

출력 

terminal >> python test.py 엔터
1번째 심사위원 점수를 입력하세요:10.0
2번째 심사위원 점수를 입력하세요:9.0
3번째 심사위원 점수를 입력하세요:8.3 
4번째 심사위원 점수를 입력하세요:7.1
5번째 심사위원 점수를 입력하세요:3.0
6번째 심사위원 점수를 입력하세요:9.0
7번째 심사위원 점수를 입력하세요:6.0
[10.0, 9.0, 8.3, 7.1, 3.0, 9.0, 6.0] 3.0 10.0
제거 완료된 리스트는 [9.0, 8.3, 7.1, 9.0, 6.0]입니다.
평균은 : 7.88입니다.

 

※  숫자인지 확인하는 메서드 : isdecimal(), isdigit(), isnumeric()

     but, 음수이거나 소수점 있는 경우 False로 반환

     따라서, replace(' . ', ' ') 해서 소수점을 없애고 사용

 

 

728x90