728x90
반응형
파이썬 실습창을 열 수 있습니다.실습창 열기
1. 연산자 우선순위
연산은 우선순위, 결합법칙 등이 정해져 있습니다.
주요한 우선순위(precedence)는 다음과 같습니다.
순서를 외우고 있어야 합니다.
연산순위 | 연산 | 설명 |
1 | () | 괄호는 소괄호만 겹쳐서 사용한다. |
2 | 함수 | int(), list() 등 |
3 | 지수(**) | 거듭 제곱은 오른쪽에서 왼쪽으로 연산한다. 2**3**2 ==> 2**(3**2) ==> 2**9 ==> 512 |
4 | * , /, //, % | 왼쪽에서 오른쪽 순서로 연산한다. |
5 | + , - | 왼쪽에서 오른쪽 순서로 연산한다. |
6 | >, >=, <, <=, ==, != | 왼쪽에서 오른쪽 순서로 연산한다. |
7 | not | |
8 | and | |
9 | or |
※ [참고] 다음은 완전한 순위표입니다.
더보기
no | category | precedence (우선순위) |
operation (연산) |
example | description |
1 | primary (기본기능) |
1 | (...), [...], {...} | tuple, list, dict 생성 | |
2 | s[i], s[i:j] | indexing, slicing | |||
3 | s.attr | attribute(속성) | |||
4 | f(...) | function(함수) 다음에 공부한다. | |||
2 | unary (단항연산) |
5 | +x, -x, ~x | a=3 b=~3 print(a,b) |
unary(단항 연산) 000...011 111...100(반전)=>2의 보수 출력 |
3 | arithmetic (산술연산) |
6 | x**y | a=3**2**3 print(a) |
power(지수) 3**2**3=3**(2**3) |
7 | x*y, x/y, x//y, x%y | 곱하기, 나누기, 몫, 나머지 | |||
8 | x+y, x-y | 더하기, 빼기 | |||
4 |
bitwise (비트연산) -> shifting (이동연산) -> bool (논리연산) |
9 | x<<y, x>>y | a=13 b=a<<2 print(f'{a}', f'{b}') print(a,b) |
shifting(이동) 1101 110100 13 52 출력이 위와 같다. 2진수를 left shift 2회한다. |
~x | a=~13 print(a) |
bitwise not | |||
10 | x&y | a=13 & 6 print(a) |
bitwise and(비트 and) 13->1101, 6->0110==>4출력 |
||
11 | x|y | a=13| 6 print(a) |
bitwise or(비트 or) ==>15출력 |
||
x^y | a=13^6 print(a) |
bitwise xor(비트 xor) 다르면 1 ==>11출력 |
|||
12 | x<<y x>>y |
a=13<<2 b=13>>2 print(a,b) # 52 3 |
13(1101)을 2회 left shift하면 110100(52)이다. |
||
5 | comparison (비교연산) |
13 | x<y, x<=y, x>y, x>=y x==y, x!=y x is y, x is not y x in s, x not in y |
a=3<5<4 print(a) |
비교, identity, 순서열 member 검사 다항연산이 가능하다. |
6 | boolean (논리연산) |
14 | not x | a=not (3==5) print(a) |
logical not(논리 부정) |
15 | x and y | logical and(논리 곱) | |||
16 | x or y | a=(1>2)or(3<4)or(5>6) print(a) |
logical or(논리 합) | ||
7 | lambda (람다호출) |
17 | lambda args:expt (람다) |
a=(lambda x,y:x+y)(2,3) print(a) |
lambda function(람다 함수) x,y에 2,3이 할당되어 더한다. |
2. 변수의 활용
변수를 잘 사용하는 것은 프로그램 작성의 기초를 튼튼히 하는 것입니다.
매우 중요합니다.
2-1 변수 활용
댜음 표의 example를 실습하고 원리를 이해하세요.
no | item | example | description | |
1 | 누적법(sum) s=s+e |
s=s+1 # 1씩 증가 s=s-3 #3씩 감소 s=3+s #3씩 증가 s=s+a #a씩 증가 s=s+a*2-1 #(a*2-1)씩 증가 |
∙실행할 때마다 s가 e만 큼 증가(또는 감소)한다. (e=상수, 변수 또는 수식) ∙‘=’의 왼쪽과 오른쪽에 같은 변수(현재는 s)가 있다. ∙‘=’의 오른쪽(right value)을 먼저 계산하여 저장하고, 그 위치를 왼쪽 변수(left value)에 바인딩한다. ∙s에 초기값(initial value)이 있어야 한다. |
|
2 | 교환법(swap) t=a; a=b; b=t b, a=a, b |
a,b=1,2 t=a; a=b; b=t; print(a,b) --------------- a,b=1,2 b,a=a,b print(a,b) |
∙a와 b가 가리키는 것을 바꾼다. a를 콜라, b를 사이다가 들어 있는 컵이라 생각하자. 내용을 바꾸어 담으려면 빈 컵(지금은 t)을 준비하여 순서대로 옮겨 부으면 된다. (t=temporary) ∙3개 이상의 객체도 같은 방법으로 reference를 바꾼다. ∙오른쪽 튜플을 unpacking하여 a, b를 바꾼다. python의 독특한 교환 기능이다. |
|
3 | 반복법(toggle) t=e-t |
a=2 a=3-a print(a) a=3-a print(a) a=3-a print(a) |
∙반복되는 수열을 만든다. ∙두 수의 반복(중요) 2개의 수 x, y를 반복하려면, t=y #x부터 출력할 때는 y를 초기 값으로 한다. t=(x+y)-t #이 부분을 반복한다. print(t) ∙여러 수의 반복(중요) 0부터 (n-1)까지의 수를 반복하려면, t=0 print(t) #이 부분을 반복한다. t=(t+1) % n #‘중국 나머지 정리’ 방법이다. |
|
4 | 확장 대입 | x+=y #x=x+y x-=y #x=x-y x*=y #x=x*y x/=y #x=x/y x//=y #x=x//y x**=y #x=x**y |
x%=y #x=x%y x&=y #x=x&y x|=y #x=x|y x^=y #x=x^y x<<=y #x=x<<y x>>=y #x=x>>y |
∙code가 단순하고, 실행시간을 단축시킨다. |
2-2 예제 문제
예제 문제를 실습하고 원리를 이해하세요.
번호 | 프로그램 | 출력 예상 |
1 | n=0 n=n+5 print(n) n=n-3 print(n) n=n+7 print(n) |
5 2 9 =의 오른쪽을 계산할 때 n의 초기값 필요하다. |
2 | n=0 while n<5: n+=1 print(n) |
1 2 3 4 5 while은 뒤의 조건이(n<5 부분) 참인 동안 들여쓴 부분 반복 실행한다. n+=1은 n=n+1과 같다. |
3 | n=s=0 while n<5: n+=1 s+=n print(n,s) |
1 1 2 3 3 6 4 10 5 15 n은 1씩 증가되고, s에 n을 더한다. |
4 | n,s=0,5 while n<5: print(s) s=9-s n+=1 |
5 4 5 4 5 5와 4가 반복된다. |
5 | n,s,t=0,2,8 while n<5: print(s,t) t,s=s,t n+=1 |
2 8 8 2 2 8 8 2 2 8 2와 8이 교환된다. n은 반복회수 계산에 사용된다. |
매우 중요한 부분입니다.
반드시 원리를 이해하여야 합니다.
수고하셨습니다.
오늘 끝.
728x90
반응형
'알고리듬' 카테고리의 다른 글
[알고리듬] #39 파일 입출력 (0) | 2024.04.06 |
---|---|
[알고리듬] #38 불 표현식 (0) | 2024.04.05 |
[알고리듬] #35 내장함수 (0) | 2024.04.05 |
[알고리듬] #34 구문구조와 할당문 (0) | 2024.04.05 |
[알고리듬] #32 셑 메소드 (0) | 2024.04.04 |