-
[Python] Part.2 제어문Python 2023. 2. 6. 22:07
Ch02-01. 기초 연산자들
Boolean 타입 : True or False 의 두가지 경우만 있는 자료형
비교 연산자 설명 예제 결과 > 값을 비교하여 왼쪽의 값이 크면 True, 그렇지 않으면 False 7 > 3 True < 값을 비교하여 왼쪽의 값이 작으면 True, 그렇지 않으면 False 3 < 3 False >= 값을 비교하여 왼쪽의 값이 크거나 같으면 True,그렇지 않으면 False17 >= 17 True <= 값을 비교하여 왼쪽의 값이 작거나 같으면 True,그렇지 않으면 False3 <= 7 True == 값을 비교하여 동일하면 True, 동일하지 않으면 False7 == 7 True != 값을 비교하여 동일하면 False, 동일하지 않으면 True7 != 7 False 다음 예시는 b가 문자열, 리스트, 튜플, set, dictionary 등일 때 유효.
멤버 연산자 설명 예제 in a가 b에 포함되어 있다면 참을, 그렇지 않으면 거짓을 반환 a in b
1 in (1,2,3) → True
b=[1, 2, 3, 4]
5 in b → Falsenot in a가 b에 포함되어 있지 않으면 참을, 그렇지 않으면 거짓을 반환 5 not in(1,2,3) → True
b=[1, 2, 3, 4]
3 not in b → False여러 개의 판별문이 중첩되어 있을 경우 and, or을 사용한다.
논리 연산자 설명 예제 and 둘 모두 참일 경우에만 참을 반환
연산자 모두 True인 경우에만 True 그 외는 전부 FalseA and B
x>y and a>b
x가 y보다 크고, a보다 b보다 크면 참을 반환or 둘 중 하나만 참이면 참을 반환
연산자 중 하나라도 True라면 True 모두 False인 경우에만 FalseA or B
x>y or a>b
둘 중 하나만 성립해도 참을 반환not 결과값을 반전
True는 False , False는 Truenot A 비트 연산자 : 정수 데이터끼리 비트 단위로 연산을 수행 한 후 결과를 10진수로 반환
ex) a=12 ( 2진법으로 1100 ), b=61 ( 2진법으로 111101 )
비트 연산자 이름 설명 예제 & AND 연산 비트 단위로 비교,
대응되는 비트가 모두 1이면 1을 반환함.a&b = 1100(2진법) = 12 | OR 연산 대응되는 비트 중에서 하나라도 1이면 1을 반환함 a&b = 111101(2진법) = 61 ^ XOR 연산 대응되는 비트가 서로 다르면 1을 반환함 a ^ b = 110001(2진법) = 49 ~ NOT 연산 비트를 1이면 0으로, 0이면 1로 반전 후 반환 << Left shift 연산 왼쪽으로 지정된 비트 수 만큼 이동 a << 2 = 110000(2진법) = 48 >> Right shift 연산 오른쪽으로 지정된 비트 수 만큼
부호를 유지하면서 이동- 비트 AND 연산
두 비트가 모두 1이면 1을 반환 아니라고 한다면 0을 반환한다. 결과는 5가 나온다.
- 비트 OR 연산
두 비트 중 하나라도 1이라면 1 모두 0이라면 0 그 외는 1을 반환한다 결과는 31이 나온다 .
- 비트 XOR 연산
두 비트가 모두 다르면 1 모두 같다면 0을 반환한다 26의 결과값이 나온다.
- Left 연산자
15를 2비트만큼 왼쪽으로 이동시키면 비트들이 2칸 왼쪽으로 이동이 되어 60이라는 결과값이 나오게 된다.
- Right 연산자
15를 2비트만큼 오른쪽으로 이동시킨다면 3이라는 결과가 나오게 된다.
식별 연산자: 같은 메모리 위치를 가리키는지 판단
식별 연산자 설명 예제 is 같은 메모리 위치를 가리키면 참
두피 연산자의 식별 값을 비교하였을 때 동일한 객체이면 TrueA is B is not 다른 메모리 위치를 가리키면 참
두피 연산자의 식별 값을 비교하였을 때 동일한 객체이면 FalseB is not True a=[1,2,3,4] b=a a is b True
변수 변경 후 할당 연산자들
복합 연산자 설명 예제 결과 += 왼쪽 변수에 오른쪽 값을 더하고 결과를 왼쪽 변수에 할당
x = x + yA = 7
A += 3A = 10 -= 왼쪽 변수에 오른쪽 값을 빼고 결과를 왼쪽 변수에 할당
x = x - yA = 10
A -= 9A = 1 *= 왼쪽 변수에 오른쪽 값을 곱하고 결과를 왼쪽 변수에 할당
x = x * yA = 10
A *= 10A = 100 /= 왼쪽 변수에 오른쪽 값을 나누고 결과를 왼쪽 변수에 할당
x = x / yA =10
A /= 4A = 2.5 //= 왼쪽 변수에 오른쪽 값을 나눈 결과의 정수만 왼쪽 변수에 할당
x = x // yA = 10
A //= 4A = 2 %= 왼쪽 변수에 오른쪽 값을 나눈 나머지 결과를 왼쪽 변수에 할당
x = x % yA = 10
A %= 3A = 1 **= 왼쪽 변수에 오른쪽 값을 제곱한 결과를 왼쪽 변수에 할당
x = x ** yA = 10
A **= 3A = 1000
Ch02-02. if문
제어문이란?
프로그램은 보통 위에서 아래로 한 문장씩 수행된다. 이를 순차적인 제어 흐름이라 한다.
때로는 이 흐름에서 벗어나 건너뛰거나 반복하기로 할 필요가 있는데 이를 컨트롤하는 문장을 제어문이라고 한다.
파이썬의 제어문은 if, for, while 이라는 단어로 시작함
파이썬의 코드 작성 규칙 : 첫 코드는 들여쓰기 없이 작성.
제어문 작성 규칙 : 제어문으로 인해 통제받는 문장(이하 코드블록이라 부름)은 들여쓰기로 구분.
들여쓰기 방법으로는 스페이스 바와 탭(tab)이 있음. 들여쓰기 간격은 일정하기만 하면 둘을 혼용해도 무방하나, 보통은 스페이스 바 4번을 쓰는 게 일반적임.
ex)
if x>0:
print(‘양수입니다.’)
Else:
print(‘음수입니다.’)
if 문의 기본 구조 : 조건문을 확인하여 참일 경우 if의 코드블록을 수행하고 거짓일 경우 else의 코드블록을 수행
if 조건문: 수행할 문장1 수행할 문장2 else: 수행할 문장x 수행할 문장y
i=0 if i>0: print("양수입니다.") #스페이스바를 통한 구분도 가능 elif i<0: print("음수입니다.") #tab을 통한 구분도 가능 일반적으로 Tab 사용 else: print("0입니다.") 0입니다.
조건문이 여러 개일 때
만약 조건문이 여러 개라면 elif로 시작하는 다음과 같은 형태로 작성 if 조건1: 문장 elif 조건2: 문장 elif 조건3: 문장: ... else: 문장
조건문을 한 줄로 표현?
if a>b: 문장1 else: 문장2 또는 문장1 if 조건문1 else 문장2
Ch02-03. for문
For문 : 조건을 평가하는 대신 순서열을 순회하며 반복적으로 코드를 실행.
몇 번 정도 반복을 할 것인지 알고 있거나 계획이 있을 때 사용
다음과 같은 형태로 작성
for 반복변수 in 순서열(문자열, 리스트, 튜플 등 순서를 갖은 자료): 코드블록 ex) for i in [1,2,3,4]: print(i) ''' 순서열에 들어갈 수 있는 데이터 형식에는 list, tuple, 문자열 등이 있고, 순서열은 아니지만 set이나 dictionary도 사실은 들어갈 수 있다. '''
msg = "hello python" for i in msg: print(i) h e l l o p y t h o n
for i in [1,21,3,42]: print(i) 1 21 3 42
이중 for문
for x in range(반복횟수): for y in range(반복횟수): 수행코드y # 안쪽 for문이 끝날 때 출력 수행코드x # 밖 for문이 끝나면 출력 ''' 상위 for문의 첫 문장이 동작이 되고 하위 for문의 모든 문장이 동작이 완료가 되면 다음 상위 for문의 두 번째 문장이 동작이 되고 또 다시 하위 for문의 모든문장이 동작이 된다 '''
구구단 출력(가로) for i in range(2,10): for j in range(1,10): print(f"{i} * {j} = {i*j}",end='\t') print() print() 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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
구구단 출력(세로) for i in range(1, 10): for j in range(2, 10): print('{} * {} = {}'. format(j, i, i*j), end='\t') print() 2 * 1 = 2 3 * 1 = 3 4 * 1 = 4 5 * 1 = 5 6 * 1 = 6 7 * 1 = 7 8 * 1 = 8 9 * 1 = 9 2 * 2 = 4 3 * 2 = 6 4 * 2 = 8 5 * 2 = 10 6 * 2 = 12 7 * 2 = 14 8 * 2 = 16 9 * 2 = 18 2 * 3 = 6 3 * 3 = 9 4 * 3 = 12 5 * 3 = 15 6 * 3 = 18 7 * 3 = 21 8 * 3 = 24 9 * 3 = 27 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 5 * 4 = 20 6 * 4 = 24 7 * 4 = 28 8 * 4 = 32 9 * 4 = 36 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 6 * 5 = 30 7 * 5 = 35 8 * 5 = 40 9 * 5 = 45 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 7 * 6 = 42 8 * 6 = 48 9 * 6 = 54 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 8 * 7 = 56 9 * 7 = 63 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 9 * 8 = 72 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
range 함수
range(num) : 0에서부터 시작해서 1씩 증가해서 num 직전까지 증가하며 만들어진 순서열 for i in range(5): print(i) 0 1 2 3 4
range(num1, num2): num1에서부터 시작해서 1씩 증가해서 num2 직전까지 증가하면서 만들어진 순서열. for i in range(1,5): print(i) 1 2 3 4
range(num1,num2,간격) : range(num1,num2)와 같으나 간격이 1이 아니라 직접 입력가능. for i in range(5,0,-1): print(i) 5 4 3 2 1
Ch02-04. while문
while : 조건식이 거짓이 될 때까지 무한적으로 반복되는 방식
몇 번 반복을 시켜야 될지 모를 때 주로 사용
while문과 for문은 굉장히 비슷하며 대부분의 경우 서로 호환 가능하다.
조건이 참인 동안에 계속 코드블록을 반복한다. while 조건: 코드블록 예시) i = 0 while i<=5: print(i) i += 1 0 1 2 3 4
pass, break, continue
제어문 안에서 쓸 수 있는 특수 명령어로 pass, break, continu가 있다
- pass : 아무 일 없이 그냥 통과. (pass가 없으나 있으나 똑같음)
- break : for문이나 while문에서 loop를 끝냄.
- continue : for문이나 while문에서 현재 loop를 중단하고 다음 loop로 넘어감.
Ch02-05. 실전 문제풀이
i=1 sum = 0 while True: # while 뒤에 True이면 무한 반복 if i > 50: # 종료하기 위해서는 break을 사용 sum+=i break # 반복문 종료 sum += i i += 1 print('합계 : ',sum) 합계 : 1275
# continue는 아래 부분을 실행하지 않고 다음 반복문 실행 for i in range(10): print(i) if i > 4: continue # break 반복문 종료 print('난 출력 되나') 0 난 출력 되나 1 난 출력 되나 2 난 출력 되나 3 난 출력 되나 4 난 출력 되나 5 6 7 8 9
# while문을 사용하여 1부터 25사이의 짝수를 출력해 보세요 i = 1 while i <= 25: if i % 2 == 0: print(i) i += 1 2 4 6 8 10 12 14 16 18 20 22 24
- 튜플 for i in (1, 2, 3): print(i) sings = '안녕하세요' 1 2 3 - 문자열 for s in sings: print(s) 안 녕 하 세 요 - list li = [1, 2, 3] for i in li: print(i) 1 2 3
li = [1,2,3,4,5] # li데이터 하나씩 가져와서 3승하여 출력 for i in li: print('{} ** 3 = {}'.format(i,i**3)) 1 ** 3 = 1 2 ** 3 = 8 3 ** 3 = 27 4 ** 3 = 64 5 ** 3 = 125
# for문에 for가 있는 경우 중첩 for for i in range(4): # i 가 0일 때 j가 0부터 3까지 # i 가 1일 때 j가 0부터 3까지 # i 가 2일 때 j가 0부터 3까지 # i 가 3일 때 j가 0부터 3까지 print('i = {}, '.format(i), end='') for j in range(4): print(j, end=' ') print() i = 0, 0 1 2 3 i = 1, 0 1 2 3 i = 2, 0 1 2 3 i = 3, 0 1 2 3
# 주사위를 두 번 던져서 나온 숫자들의 합이 4의 배수가 되는 경우 for i in range(1,7): # 1 ~ 6 첫 번째 주사위 for j in range(1,7): # 1 ~ 6 두 번째 주사위 k = i + j if k % 4 == 0: print('{} + {} = {}'.format(i, j, i+j)) 1 + 3 = 4 2 + 2 = 4 2 + 6 = 8 3 + 1 = 4 3 + 5 = 8 4 + 4 = 8 5 + 3 = 8 6 + 2 = 8 6 + 6 = 12
# 주사위 두 개를 던져서 나온 숫자의 합이 6이 되는 경우 출력 for i in range(1, 7): for j in range(1, 7): k = i + j if k == 6: print('{} + {} = {}'.format(i, j, i+j)) 1 + 5 = 6 2 + 4 = 6 3 + 3 = 6 4 + 2 = 6 5 + 1 = 6
print('수박 무게를 입력하세요.') weight = int(input()) if weight > 10: result = 1 elif weight > 7: result = 2 elif weight > 4: result = 3 else: result = 4 print('수박은 {}등급입니다.'.format(result)) 수박 무게를 입력하세요. 11 수박은 1등급입니다.
print('아이디를 입력하세요 : ') id = input() password = input('암호를 입력하세요 : ') if id == 'root' and password == 'system': print('로그인 성공') elif id != 'root': print('넌 누구냐!!!') else: print('암호를 모르네') 아이디를 입력하세요 : root 암호를 입력하세요 : sdlf 암호를 모르네
# while문을 사용하여 100이상의 자연수 중 가장 작은 23의 배수를 출력해 보세요. i=100 while True: if i % 23 == 0: print('23의 배수 : ',i) break i += 1 23의 배수 : 115
score = int(input('점수? ')) # if score > 60: message = '성공' # else: message = '실패' message = '성공' if score > 60 else '실패' print(message) 점수? 70 성공
sings = ['아이유', '뉴진스', 'Blxst', 'NCT Dream'] for i in range(len(sings)): if i == len(sings) - 1: print(sings[i]) else: print(sings[i], end=', ') 아이유, 뉴진스, Blxst, NCT Dream
numbers=[2, 3, 5, 7, 11, 13, 17, 19] # 인덱스 값 for i in range(len(numbers)): print(i, numbers[i]) 0 2 1 3 2 5 3 7 4 11 5 13 6 17 7 19
# 1 - 1000 3의 배수 합 result = 0 i = 1 while i <= 1000: if i % 3 ==0: result += i i += 1 print('1000까지 3의 배수 합 : ',result) 1000까지 3의 배수 합 : 166833
# 중첩 while i = j = 0 while i < 5: while j < i +1: print('*', end='') j += 1 i += 1 print() j = 0 # while로 처리 파이썬은 *를 그 갯수 만큼 반복 i = 0 while i < 5: i += 1 print('*' * i) * ** *** **** ***** * ** *** **** *****
# for문을 사용하여 평균 a = [70, 60, 55, 75, 95, 90, 80, 80, 85, 100] sum = 0 for score in a: sum += score print('평균 : ',sum/len(a)) 평균 : 79.0
'Python' 카테고리의 다른 글
[Python] Part.6 상속과 예외처리 (0) 2023.02.15 [Python] Part.5 클래스 (0) 2023.02.07 [Python] Part.4 함수 심화학습 (0) 2023.02.07 [Python] Part.3 함수 및 변수 (0) 2023.02.07 [Python] Part.1 Python의 자료형 (0) 2023.02.04