Python

Python 문법 기초 2 - 연산자, 출력 서식, 치환, format함수

코딩탕탕 2022. 10. 21. 18:26

 

v1 = 2 # 치환
v1 = v2 = v3 = v4 =5
print(v1, v2, v3, v4)


<console>
5 5 5 5

v1의 값을 치환해주는 것으로 v2, v3, v4 는 v1과 같은 주소(사물함 키)를 가지게 된다.

 

v1 = 1, 2, 3
print(v1)  // tuple type 으로 들어갔다.
v1, v2 = 10, 20
print(v1, v2)
v2, v1 = v1, v2
print(v1, v2)


<console>
(1, 2, 3)
10 20
20 10

v1, v2의 값은 위치에 따라서 들어가며 자리를 바꿔서 치환해주면 그 값도 서로 바뀐다.

 

print('값 할당 packing')
# v1, *v2 = 1,2,3,4,5
*v1, v2 = 1,2,3,4,5
# *v1, *v2 = 1,2,3,4,5  err 난다 서로 다 가져가려고 하기때문에
print(v1)
print(v2)

v1, v2, *v3 = 1,2,3,4,5
print(v1, v2, v3)


<console>
값 할당 packing
[1, 2, 3, 4]
5
1 2 [3, 4, 5]

변수명 앞에 *를 붙이면 나머지 값을 list 타입으로 다 가지고 가겠다는 의미이다.

4번째 줄의 err는 서로 나머지 값을 다 가져가려고 했기 때문에 err 가 발생한 것이다.

 

print('\n연산자(산술, 관계, 논리)')
print(5 + 3, 5 - 3, 5 * 3, 5 / 3)
print(5 // 5, 5 % 3, divmod(5, 3))


<console>
연산자(산술, 관계, 논리)
8 2 15 1.6666666666666667
1 2 (1, 2)

5 // 5로 작성한 이유는 5 / 5를 하게되면 float 타입으로 나오기 때문에다 //로 작성하면 int 타입으로 출력된다. % 는 나눈 값의 나머지 값이다.

divmode 함수는 두 숫자를 인자로 전달 받아 첫번째 인자를 두번째 인자로 나눈 몫과 나머지를 tuple 형식으로 반환시켜준다.

 

print('연산자 우선순위', 3 + 4 * 5, (3 + 4) *5)
# 소괄호 () > 산술연산자(** > *, / > +, -) > 관계연산자 > 논리연산자 > 치환(=)


<console>
연산자 우선순위 23 35

 

print('관계연산자')
print(5 > 3, 5 == 3, 5 != 3)
print('논리연산자')
print(5 > 3 and 4 < 3, 5 > 3 or 4 < 3, not(5 >= 3))


<console>
관계연산자
True False True
논리연산자
False True False

and = 모두 참일 때 참으로 반환

or = 그 중에 하나라도 참일 때 참으로 반환

not = 부정

print('문자열 더하기 연산자')
print('파이썬' + '만' + '세')
print('파이썬' * 20)


<console>
문자열 더하기 연산자
파이썬만세
파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬파이썬

문자열 더하기 가능하다. 문자열에 * 를 하면 그만큼의 문자가 나열된다.

 

print('누적')
a = 10
a = a + 1
a += 1 # a++ , ++a 는 안 됨(Python에는 증감 연산자가 존재하지 않음)
print('a:', a)
print(a, a * -1, -a, --a)


<console>
누적
a: 12
12 -12 -12 12

 

print('bool : ', True, False, type(True))
print(bool(True), bool(1), bool(-23.4), bool('kbs'))
print(bool(False), bool(0), bool(0.0), bool(''), bool(None), bool([]), bool(()), bool({}))


<console>
bool :  True False <class 'bool'>
True True True True
False False False False False False False False

참은 0이 아닌 값이 있거나, 빈 문자열이 아니거나, true 를 사용하면 된다.

불은 값이 0이거나, none 일때, 아무런 값이 들어있지 않을 때 거짓이 된다.

 

print() 출력 방식

#출력 서식
print(format(123.45678, '10.3f')) // 소숫점 3자리까지만 사용하고 뒤는 반올림
print(format(123.45678, '10.3'))
print(format(123, '10d'))
print ('{0:.3f}'.format(1.0/3))
print ('{0:_^11}'.format('hello'))
print ('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
print('이름:{0}, 가격:{1}'.format('마우스', 5000))
print('이름:{}, 가격:{}'.format('마우스', 5000))
print('이름:{1}, 가격:{0}'.format('마우스', 5000))
print('이름:{1}, 가격:{0} 가격:{0}'.format('마우스', 5000))


<console>
123.457
  1.23e+02
       123
0.333
___hello___
Swaroop wrote A Byte of Python
이름:마우스, 가격:5000
이름:마우스, 가격:5000
이름:5000, 가격:마우스
이름:5000, 가격:마우스 가격:마우스

format 함수란 문자열 중간 중간에 특정 변수의 값을 넣어주기 위해서 사용한다.

7번째 줄의 코드는 {} 안에 숫자가 아니어도 format() 안에 같은 이름을 넣어주면 가능하다.

8번째 줄의 인덱스는 {인덱스} 적지 않으면 순서대로 알아서 적용된다. 인덱스는 복수 적용 가능하다.

 

print(format(1.5678, '10.3f')) // 소숫점 3자리까지만 사용하고 뒤는 반올림
print('나는 나이가 %d 이다.'%23)  // %d 는 숫자
print('나는 나이가 %s 이다.'%'스물셋') // %s 는 문자열
print('나는 나이가 %d 이고 이름은 %s이다.'%(23, '홍길동')) // 복수 사용도 가능하다.
print('나는 나이가 %s 이고 이름은 %s이다.'%(23, '홍길동'))
print('나는 키가 %f이고, 에너지가 %d%%.'%(177.7, 100)) // 소수점 6자리까지 나오도록 설정


<console>
1.568
나는 나이가 23 이다.
나는 나이가 스물셋 이다.
나는 나이가 23 이고 이름은 홍길동이다.
나는 나이가 23 이고 이름은 홍길동이다.
나는 키가 177.700000이고, 에너지가 100%.

%d 는 숫자가 들어가고 %s는 문자열이 들어간다. 다만 숫자도 %s에 넣을 수 있는데 그 경우에는 int 타입이 아닌 String 타입으로 읽힌다.

 

print('aa\tbb') // tab 설
print(r'aa\tbb') # raw string을 선행하면 이스케이스 기능 해제
print("c:\aa\bbc\nbc.txt")
print(r"c:\aa\bbc\nbc.txt")

print('aa', end=', ')
print('bb')


<console>
aa	bb
aa\tbb
c:abc
bc.txt
c:\aa\bbc\nbc.txt
aa, bb

앞에 소문자 r 을 붙이면 뒤의 이스케이프 기능이 해제된다.

파이썬의 print 는 기본적으로 라인 스킵이 적용되어있다. java로 치면 println 이다. 하지만 뒤에 , end 를 사용하면 위의 예시처럼 뒤에 바로 붙게 된다.