1976s

이 블로그는 웹 개발, 프로그래밍, IT 활용법을 다루며, 실용적인 팁과 정보를 제공합니다.

# Side Menu
  • recentPost

  • popularPost

  • Archive

  • recentComment

공부/기타

파이썬 숫자, 연산자

2023. 3. 15., 1976s

그냥 바로 프로그램 시작하려니 막막해서 기초인 숫자와 연산 적어 보기로 하겠습니다. 기초에 기초니 빠르게 훑어보겠습니다.

 

0. 숫자

항목 파이썬 사용예
정수 123, -456, 0
실수 123.45, -12.456, 3.4e10
2진수 0b101, 0b01101
8진수 0o34, 0o25
16진수 0x2A, 0xFE

 

정수형

a = 123
b = -456
c = 0

실수형

a = 1.2
b = -3.45

8진수, 16진수

# 8진수
a = 0p177

# 16진수
b = 0x8ff
c = 0xAB

1. 산술 연산자

=
왼쪽 항에서 오른쪽 항을 왼쪽으로 대입(할당)한다.
+
(숫자) 왼쪽 항에서 오른쪽 항을 더한다.
(문자) 왼쪽 항에서 오른쪽 항을 이어준다.
-
왼쪽 항에서 오른쪽 항을 뺀다.
*
(숫자 * 숫자) 왼쪽 항에서 오른쪽 항을 곱한다.
(문자 * 숫자) 혹은 (숫자 * 문자) 문자를 숫자만큼 반복한다.
**
왼쪽 항에서 오른쪽 항을 거듭제곱한다.
/
왼쪽 항에서 오른쪽 항으로 나눈다.
//
왼쪽 항에서 오른쪽 항으로 나눈 값에서 소수점 아래 부분을 버린다.
%
왼쪽 항에서 오른쪽 항으로 나누고 남은 나머지다.
a = 2
b = 5
c = 'Hi'
d = 'world'

print(a + b) # 7
print(c + d) # Hiworld
print(a - b) # -3
print(a * b) # 10
print(a * c) # HiHi
print(c * b) # HiHiHi
print(a ** b) # 32
print(a / b) # 0.4
print(a // b) # 0
print(a % b) # 2

 

2. 비교 연산자

==
왼쪽 항과 오른쪽 항이 같은지 비교한다.
!=
왼쪽 항과 오른쪽 항이 다른지 대조한다.
>
왼쪽 항이 오른쪽 항보다 큰지 대조한다. (초과)
>=
왼쪽 항이 오른쪽 항보다 크거나 같은지 대조한다. (이상)
<
왼쪽 항이 오른쪽 항보다 작은지 대조한다. (미만)
<=
왼쪽 항이 오른쪽 항보다 작거나 같은지 대조한다. (이하)
a = 7
b = 7
c = 5
d = 1

print(a == b) # True
print(a != c) # True
print(a > b) # False
print(a > d) # True
print(a >= b) # True
print(a >= c) # True
print(a < c) # False
print(a < d) # False
print(a <= b) # True
print(a <= d) # False

 

3. 논리 · 조건 연산자

not
논리형 값을 부정한다.
즉, true는 false가 되고, false는 true가 된다.
and
'그리고'로 해석된다.
or
'또는'으로 해석된다.
^
양 옆의 논리형 값이 서로 다르면 true가 출력된다.
B if A else C
A가 true이면 B, false이면 C를 실행한다.
a = True
b = True
c = False
d = 1
e = 0

print(not b) # False
print(not c) # True
print(a and b) # True
print(a and c) # False
print(a or b) # True
print(a or c) # True
print(a ^ b) # False
print(a ^ c) # True
print(d if a else e) # 1
print(d if c else e) # 0

삼항연산자(Ternary Operator)가 다르군요. 보통 제가 아는것은 '조건식 ? 반항값1 : 반항값2' 이런식이였는데 여긴 다른다는게 특징 같습니다.

 

4. 맴버 연산자

in
왼쪽 피 연산자의 값이 오른쪽 피
연산자 멤버 중 일치하는 값이 존재 하면 True
not in
왼쪽 피 연산자의 값이 오른쪽 피
연산자 멤버 중 일치하는 값이 존재 하지 않으면 True
my_list = [1, 2, 3, 4, 5]
if 3 in my_list: 
    # 리스트에서도 사용할 수 있습니다.
    print("3이 리스트에 있습니다.")

my_set = {1, 2, 3, 4, 5, 6}
if 7 not in my_set: 
    # 세트에서도 사용할 수 있습니다.
    print("7이 세트에 없습니다.")

my_string = "Hello, World!"
if "Hello" in my_string: 
    # 문자에서도 사용할 수 있습니다.
    print("Hello가 문자열에 있습니다.")

멤버 연산자로 'in'과 'not in'이 있습니다. 이러한 연산자는 특정 값이 리스트, 튜플, 세트, 문자열 등의 시퀀스 타입에 속하는지 확인하는 데 사용됩니다.

 

5. 식별 연산자

is
두피 연산자의 식별 값을 비교하였을 때 동일한 객체이면 True
is not
두피 연산자의 식별 값을 비교하였을 때 동일한 객체이면 False
x = [1, 2, 3]
y = x
if x is y:
    print("x와 y는 같은 객체입니다.")

z = [1, 2, 3]
if x is not z:
    print("x와 z는 서로 다른 객체입니다.")
if x == z:
    print("x와 z는 같은 값입니다.")

주의할 점은 isis not 연산자는 값의 동등성(equality)을 확인하지 않습니다. 즉, 두 개의 객체가 같은 값을 가지고 있어도 서로 다른 객체일 수 있습니다. 값의 동등성을 확인하려면 비교 연산자(== 또는 !=)를 사용해야 합니다.

 

6. 비트 연산자

~
비트를 부정한다.
즉, 0은 1이 되고, 1은 0이 된다.
&
'그리고'로 해석된다.
|
'또는'으로 해석된다.
^
양 옆의 비트 값이 서로 다르면 1이 출력된다.
&=
& 비트 연산을 하고 대입한다.
|=
| 비트 연산을 하고 대입한다.
^=
^ 비트 연산을 하고 대입한다.
a = 116
b = 87
print(bin(a)) # 0b1110100
print(bin(~a)) # -0b1110101
print(bin(a & b)) # 0b1010100
print(bin(a | b)) # 0b1110111
print(bin(a ^ b)) # 0b100011
a &= b
print(bin(a)) # 0b1010100 <- a & b 와 같은 값
a = 116 # a 값 초기화
a |= b
print(bin(a)) # 0b1110111 <- a | b 와 같은 값
a = 116 # a 값 초기화
a ^= b
print(bin(a)) # 0b100011 <- a ^ b 와 같은 값

이진수 상태로 출력되어야 비트 연산자의 작동이 한 눈에 보이기 때문에 위의 a는 10진수이고 이를 bin() 함수를 이용하여 2진수로 변환하면 "0b" 접두어를 붙인 문자열을 반환해서 출력됩니다.

 

<<
좌항의 비트를 우항만큼 왼쪽으로 이동한다.
>>
좌항의 비트를 우항만큼 오른쪽으로 이동한다.
a = 116
b = 87
print(bin(a)) # 0b1110100
print(bin(b)) # 0b1010111

print(bin(a << 1)) # 0b11101000
print(int(bin(a << 1), 2)) # 0b11101000 의 10진수값 232
print(a << 1) # 232

print(bin(b >> 1)) # 0b101011
print(int(bin(b >> 1), 2)) # 0b101011 의 10진수값 43
print(b >> 1) # 43

a << 1 을 그림으로 표시
b >> 1 을 그림으로 표시

 

6. 할당 연산자

+=
왼쪽 항에 오른쪽 항을 더하고 할당한다.
-=
왼쪽 항에 오른쪽 항을 빼고 할당한다.
*=
왼쪽 항에 오른쪽 항을 곱하고 할당한다.
**=
왼쪽 항에 오른쪽 항을 거듭제곱을 구하면서 할당한다.
/=
왼쪽 항에 오른쪽 항으로 나누고 할당한다.
//=
왼쪽 항에 오른쪽 항으로 몫을 구하면서 할당한다
%=
왼쪽 항에 오른쪽 항으로 나눈 나머지를 할당한다.
<<=
좌항의 비트를 우항만큼 왼쪽으로 이동한 후 할당한다.
>>=
좌항의 비트를 우항만큼 오른쪽으로 이동한 후 할당한다.
a = 2
b = 5

a += b # a = a + b (a = 2, b = 5)
print(a) # 7
a -= b # a = a - b (a = 7, b = 5)
print(a) # 2
a *= b # a = a * b (a = 2, b = 5)
print(a) # 10
a /= b # a = a / b (a = 10, b = 5)
print(a) # 2.0

 

'%=' 연산자는 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 그 나머지 값을 왼쪽 피연산자에 할당하는 대입 연산자입니다.

예를 들어, 아래의 코드는 변수 x에 7을 할당하고, 그 후 x를 y 값인 3 으로 나눈 나머지 값을 다시 x에 할당합니다.

x = 7
y = 3
x %= y # x = x % y ( 7 / 3 = 2 나머지 1)
print(x) # 1

 

'**=' 연산자는 왼쪽 피연산자를 오른쪽 피연산자의 거듭제곱으로 계산한 후, 그 값을 왼쪽 피연산자에 할당하는 대입 연산자입니다.

예를 들어, 아래의 코드는 변수 x에 7를 할당하고, 그 후 x를 y 값인 3 제곱한 값을 다시 x에 할당합니다.

x = 7
y = 3
x **= y # x = x ** y ( x * x * x )
print(x) # 343

 

'//=' 연산자는 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후, 그 몫 값을 왼쪽 피연산자에 할당하는 대입 연산자입니다.

예를 들어, 아래의 코드는 변수 x에 7을 할당하고, 그 후 x를 y 값인 3으로 나눈 몫 값을 다시 x에 할당합니다.

x = 7
y = 3
x //= y # x = x //= y ( 7 / 3 = 2.333333333 )
print(x) # 2

자바스크립트에서 자주쓰는 '++', '--"은 없는것 같습니다. 대신 '++' -> '+=1', '--' -> '-=1'로 풀어서 사용하면 될것 같습니다.

a = 116
print(bin(a)) # 0b1110100

print(bin(a << 1)) # 0b11101000
# a 의 값은 변경되지 않습니다.
print(bin(a)) # 0b1110100

a <<= 1
# a = a << 1 로 a 은 변경됩니다.
print(bin(a)) # 0b11101000

쉬프트 이동은 위의 비트 연산자를 보시면 됩니다.

 

마무리

대체적으로 몇개를 제외하면 자바스크립트와 유사한것 같습니다. 그래도 한번 정리해 보았네요. 몇몇 자료는 잘 사용하지 않아 잃어버렸는데 이번에 정리하면서 배웠습니다.

반응형

What are you looking for?

Tag List
Total categories: | Searchable posts: