본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #37 우선순위와 변수활용

by Mr.Algo 2024. 4. 5.
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)2left 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,y2,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)씩 증가

실행할 때마다 se만 큼 증가(또는 감소)한다.
(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)
ab가 가리키는 것을 바꾼다.
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