Python - 3

더키·2022년 4월 4일
0

Python

목록 보기
3/5

오늘은 조건문에 대해서 알아보려고 한다. 제일 어려워 보였던 조건문이었지만, 이제는 쉬운 부분중 하나가 되었다. 역시 반복만이 살 길이다.

조건문

조건문은 어떤 조건을 만족해야만 실행이 되는 것으로 주어진 조건에 따라 결과를 다르게 할 수 있다. 파이썬에서 사용하는 조건문에는 if문, for문, while문이 존재한다.

if문

if문은 어떤 조건이 만족할 때, 실행하도록 하는 문법?이다. if문은 다른 조건의 경우를 고려한 elif와 그 외의 조건을 고려한 else가 함께 사용되곤 한다.

if 1 == 1:
	print('Hello World!')
> Hello World!

위 처럼 조건에 1 == 1이라는 조건이 참이기에 그 뒤에 따라오는 print('Hello World!')에 따라 Hello World!가 출력되었다.
조건이 하나가 아닌 더 많은 경우의 수에서는 if를 두 번 세 번 쓸 수 도 있지만, elif 또는 else를 사용할 수 있다.

a = [3,5]
if 3 in a:
	print('3은 a안에 있다.')
elif 5 in a:
	print('5는 a안에 있다.')
else:
	print('값이 a안에 존재하지 않는다.')

3과 5가 들어있는 a를 가지고 if문을 돌리면, if와 elif가 같이 출력될 것 같지만, '3은 a안에 있다.'라는 문구와 함께 if문이 끝난다. 첫 조건에서 이미 만족을 했기 때문이다.

a = int(input('값을 입력하세요 : ')
b = [3,5]
if a in b:
	print(a,'은 a안에 있다.')
else:
	print('값이 a안에 존재하지 않는다.')
> 값을 입력하세요 : 3
3 은 b안에 있다.
> 값을 입력하세요 : 7
값이 b안에 존재하지 않는다.

이번엔 input 함수를 사용해 a라는 변수에 값을 입력시키고, b에 있는 데이터와 비교하여 b라는 리스트 안에 값과 일치하면 'a안에 있다'라는 문구가 출력되도록 해보았다. 그리고, b 안에 없는 값이 입력되면 '값이 b안에 존재하지 않는다.'라는 문구가 출력된다.

더 복잡한 조건문에서는 if, elif, else를 적절히 사용해 조건문을 완성할 수 있고, if문 안에 또 다른 if문을 넣어 이중조건문을 만들 수도 있다.

얼마 전 예제문제를 풀던 도중, 난관에 부딪혔었다.

a = [5, 6, 7]
if 1 or 2 or 3 in a:
	print('a 안에 값이 존재')
>a 안에 값이 존재

문제가 정확히 기억이 나지 않지만, 대충 이렇게 문제를 풀고 있었다. False가 되어 출력되지 않아야 할 print안의 문구가 출력되었다.

그 이유는 or는 둘 중 하나가 참이면 무조건 참이다. 문제는 여기서 a안에 있는 1 또는 2 또는 3을 찾는 것이 아니라, (1 또는 2) 또는 (3이 a안에 있는가) 라고 해석이 되는 것이다.
3은 a안에 없기 때문에 False이지만, 1 또는 2는 a와 별개로 실재하는 값이기 때문에 True가 출력되어 결과적으로 print안의 문구가 출력되었다.

이를 해결하기 위해서는 위 조건문을 수정해주어야 했다.

a = [5, 6, 7]
if (1 in a) or (2 in a) or (3 in a):
	print('a 안에 값이 존재')
>

a = [3, 4, 5]
if (1 in a) or (2 in a) or (3 in a):
	print('a 안에 값이 존재')
> a 안에 값이 존재

그제서야 올바르게 작동했다.

for문

for문은 if문과 함께 가장 많이 사용되는 조건문이라고 한다. for문은 반복문이라고도 하는데, 어떤 조건 안에서 계속해서 반복적인 처리를 하기 때문이다.

for 인덱스 in 범위:
	명령문

위 형태로 for문은 진행이 된다.

for i in range(5):
	print(i)
>0
1
2
3
4

range라고 하는 함수를 이용해 0부터 4까지의 리스트를 지정해주었다. 그리고 그 안에서 1씩 증가하며 해당 숫자를 출력하는 방법이다. for문은 이런 조건을 이용해 반복적인 작업을 진행할 수 있다.
for문을 여러번 반복하는 중첩 반복문을 통해 9*9단을 만들 수도 있다.

for i in range(1, 10) :
    print(i, '단')
    for j in range(1, 10) :
        print (i, "X", j, "=", i*j)
    print()
> 1 단
1 X 1 = 1
1 X 2 = 2
1 X 3 = 3
1 X 4 = 4
1 X 5 = 5
1 X 6 = 6
1 X 7 = 7
1 X 8 = 8
1 X 9 = 9

2 단
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18

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

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

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

6 단
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
6 X 7 = 42
6 X 8 = 48
6 X 9 = 54

7 단
7 X 1 = 7
7 X 2 = 14
7 X 3 = 21
7 X 4 = 28
7 X 5 = 35
7 X 6 = 42
7 X 7 = 49
7 X 8 = 56
7 X 9 = 63

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

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

while문

while 또한 for처럼 반복문으로 사용된다. while문은 조건을 주고, 그 조건을 만족하는 동안에만 수행이 된다. 여기서 for문과 다른 점은 while문에서는 인덱스의 값을 직접 선언해주어야 한다.

i = 0
while i <= 5:
    print('Hello World!')
    i = i+1
>Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

처음 0으로 시작한 i 값이 1씩 더해지면서 while 앞에서는 이 조건을 만족하는지 검토하게 된다. i가 6을 넘는 순간 while문은 종료된다. 여기서 i = i + 1i += 1로 바꿔쓸 수 있다.

무한루프

반복문에는 무한루프라는 것이 존재한다. 무한히 돌고 도는 반복문이라는 뜻이다.

While True:
	print('A')

라는 코드를 실행시키면, 계속해서 돌아가며 빠져나올 수 없는 도르마무에 빠지게 된다. 여기서 빠져나오기 위해서는 Ctrl+C를 누르면 된다.

알고리즘 문제

마지막으로 if문과 반복문을 이용해 알고리즘 문제를 해결해보았다.

for i in range(1,6):
  print(' '*(5-i), end='')
  for j in range(1, i * 2):
    print('*', end = "")
  print()
>   *
   ***
  *****
 *******
*********

코드를 이용해 그림을 그려보는 아주 재밌는 문제였다.
이 문제를 복습하면서 예전에 보았던 갑작스레 생각난 알고리즘 문제도 한 번 풀어보았다.

import random, copy
temp = 0
my1=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#my1.sort()
#a = copy.deepcopy(my1)
a = sample(my1, 10) #a 값을 의미로 뽑아옴
my1.reverse() #10부터 1로 순서 뒤바꿈
while a != my1:  # a와 my1이 같은지 확인, 틀리면 반복
    for i in range(0,9): #range 범위 안 1씩 증가시킴
        if a[i] < a[i+1]: #a[i] 깂과 a[i+1]값이 같은지 확인, 다를 경우 문구 실행
            temp = a[i]  #a[i]의 값을 임의의 함수에 이동 (하노이 퍼즐)
            a[i] = a[i+1] #a[i]의 값에 a[i+1]의 값을 대입
            a[i+1] = temp #a[i+1]에 temp에 넣었던 수를 대입
            print(a) #a가 어떤지 확인
    continue
> [7, 3, 6, 4, 10, 8, 9, 2, 1, 5]
[7, 6, 3, 4, 10, 8, 9, 2, 1, 5]
[7, 6, 4, 3, 10, 8, 9, 2, 1, 5]
[7, 6, 4, 10, 3, 8, 9, 2, 1, 5]
[7, 6, 4, 10, 8, 3, 9, 2, 1, 5]
[7, 6, 4, 10, 8, 9, 3, 2, 1, 5]
[7, 6, 4, 10, 8, 9, 3, 2, 5, 1]
[7, 6, 10, 4, 8, 9, 3, 2, 5, 1]
[7, 6, 10, 8, 4, 9, 3, 2, 5, 1]
[7, 6, 10, 8, 9, 4, 3, 2, 5, 1]
[7, 6, 10, 8, 9, 4, 3, 5, 2, 1]
[7, 10, 6, 8, 9, 4, 3, 5, 2, 1]
[7, 10, 8, 6, 9, 4, 3, 5, 2, 1]
[7, 10, 8, 9, 6, 4, 3, 5, 2, 1]
[7, 10, 8, 9, 6, 4, 5, 3, 2, 1]
[10, 7, 8, 9, 6, 4, 5, 3, 2, 1]
[10, 8, 7, 9, 6, 4, 5, 3, 2, 1]
[10, 8, 9, 7, 6, 4, 5, 3, 2, 1]
[10, 8, 9, 7, 6, 5, 4, 3, 2, 1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

순차적으로 앞에서부터 값을 비교하면서 작은 수는 뒤로 큰 수는 앞으로 자리를 바꿔가며 내림차순으로 정렬을 하는 방법이다.

import random, copy
temp = 0
my1=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#my1.sort()
#a = copy.deepcopy(my1)
a = sample(my1, 10) #a 값을 의미로 뽑아옴
#my1.reverse()
while a != my1:
    i = 9  #while의 경우 for문처럼 자동으로 수가 올라가지 않기 때문에 i 값을 지정 그리고 변화 시켜줘야함, 여기서 i=9는 밑에서 0이 된 i 값에 다시 보충해주기 위함.
    while i != 0: # i = 0이 되면 탈출
        if a[i-1] > a[i]: #위 실습과 반대로 정 배열 리스트
            temp = a[i-1]
            a[i-1] = a[i]
            a[i] = temp
            print(a)
        i -= 1 #1을 감소 시킴
        continue
>[9, 8, 7, 2, 10, 1, 4, 3, 5, 6]
[9, 8, 7, 2, 10, 1, 3, 4, 5, 6]
[9, 8, 7, 2, 1, 10, 3, 4, 5, 6]
[9, 8, 7, 1, 2, 10, 3, 4, 5, 6]
[9, 8, 1, 7, 2, 10, 3, 4, 5, 6]
[9, 1, 8, 7, 2, 10, 3, 4, 5, 6]
[1, 9, 8, 7, 2, 10, 3, 4, 5, 6]
[1, 9, 8, 7, 2, 3, 10, 4, 5, 6]
[1, 9, 8, 2, 7, 3, 10, 4, 5, 6]
[1, 9, 2, 8, 7, 3, 10, 4, 5, 6]
[1, 2, 9, 8, 7, 3, 10, 4, 5, 6]
[1, 2, 9, 8, 7, 3, 4, 10, 5, 6]
[1, 2, 9, 8, 3, 7, 4, 10, 5, 6]
[1, 2, 9, 3, 8, 7, 4, 10, 5, 6]
[1, 2, 3, 9, 8, 7, 4, 10, 5, 6]
[1, 2, 3, 9, 8, 7, 4, 5, 10, 6]
[1, 2, 3, 9, 8, 4, 7, 5, 10, 6]
[1, 2, 3, 9, 4, 8, 7, 5, 10, 6]
[1, 2, 3, 4, 9, 8, 7, 5, 10, 6]
[1, 2, 3, 4, 9, 8, 7, 5, 6, 10]
[1, 2, 3, 4, 9, 8, 5, 7, 6, 10]
[1, 2, 3, 4, 9, 5, 8, 7, 6, 10]
[1, 2, 3, 4, 5, 9, 8, 7, 6, 10]
[1, 2, 3, 4, 5, 9, 8, 6, 7, 10]
[1, 2, 3, 4, 5, 9, 6, 8, 7, 10]
[1, 2, 3, 4, 5, 6, 9, 8, 7, 10]
[1, 2, 3, 4, 5, 6, 9, 7, 8, 10]
[1, 2, 3, 4, 5, 6, 7, 9, 8, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

반대로도 진행해보았다. 진행하면서 반복문이 꽤나 무궁무진하게 쓰일 수 있겠다는 생각을 해보았다.

profile
메디컬 딥러닝 엔지니어

0개의 댓글