본문 바로가기
개발&코딩/Python

파이썬 버전별 출력법 + 기초적으로 숙지(제곱값, enumerate, range, 오버플로우)

by 우동이 2021. 4. 18.
300x250

목차

1. 파이썬 버전별 출력법

 

2. Python3 이후 정수형

 

3. 파이썬에서 제곱값 구하기

 

4.enumerate()와 range()


1.파이썬 버전별 출력법

 

2021. 04. 18일자 기준

 

파이썬의 최신 버전은 현재 3.9.4 버전이며

 

2 버전에서 3 버전으로 오며 많은게 바뀌었지만 

 

그 중에서도 기초적인 print()의 방식의 차이가 있다.

 

Old School Format(Python 2)

#Old version 
# python 2 버전 지원
str='hello world'
print('%s'%(str))

>>> 'hello world'

New School Format(Python 2,3)

#python 2,3
#New School Format
str1='hello'
str2='world'
print('{} {}'.format(str1, str2))

>>> hello world

Brand New School Format(Python 3)

#Python 3 권장
#Brand New School Format
str1='hello world'
print(f'{str1}')

float1=3.141592
print('{:.2f}'.format(float1))

>>> 'hello world'
3.14

기존의 Old school 버전의 출력법은 이제  파이썬 3 버전을 이후로 지원하지 않는다.

 

최신 버전의 사용을 권장하는 개발자들의 취지인 듯 하다.

 

파이썬 코딩을 할 때에도 최신버전의 형식에 맞춰 코딩하도록 하자.

 




2. Python3 이후 정수형(int)

 

C, JAVA 에서도 int형은 32bits(4Bytes)의 크기를 지녔고

 

파이썬 역시도 정수형은 4Bytes(9223372036854775807~9223372036854775808)의 범위를 가졌다.

 

하지만 3 이후  Python의 int형은 기존 int형 범위를 넘어서도 오버플로우가 존재하지 않는다.

 

이유는 int형을 벗어난 만큼의 메모리를 long형으로 변환해서 사용하기 때문인데

 

아래 코드를 보면 int형의 maxsize에서 +1된 값또한 int형으로 판별됨을 알 수 있다.

 

#Python 3.6
import sys
print(sys.maxsize-1, sys.maxsize, sys.maxsize+1)

print(type(sys.maxsize))
print(type(sys.maxsize+1))

>>> 9223372036854775806 9223372036854775807 9223372036854775808
<class 'int'>
<class 'int'>

3. 파이썬에서 제곱 값 구하기

이건 내가 공부를 제대로 안해서 몰랐던건지 모르겠는데

 

간단히 연산자만으로 쉽게 제곱값을 구하는 식이 있었다.. ㅎ 

 

#googol은 10의 100제곱을 가리키는 숫자이다. 


googol = 10 ** 100

print(googol)

>>>100000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000

단순히 제곱을 구하는데 곱하기(*) 연산자를 두번만 쓰면 되는거였다니

 

ㅋㅋㅋㅋ 공부좀 열심히 하자

 


4. enumerate(), 와 range()

반복제어문 for문과 while 문을 다룰때에 제일 많이 사용하게 될 두 함수이다. 

 

enumerate()는 인덱스와 원소를 짝지어 튜플로 꺼내는 내장함수이다.

 

range()는 지정한 범위 값 내에서 반복제어를 하는 함수이다.

 

enumerate() 예제

pang=['a','b','c','d']
for x,y in enumerate(pang, 1):
    print(x, y)
    
>>>
1 a
2 b
3 c
4 d

enumerate(스캔할 대상, 인덱스)

 

스캔할 대상을 나열한 후 1부터 시작하는 인덱스를 붙여 튜플로 꺼낸다는데???

엥 왜 내 코드는 enumerate가 tuple을 반환하지 않는지 모르겠다.

 

아무튼 enumerate()는 세다, 열거하다는 뜻을 가진 enumerate의 뜻을 그대로 수행하는 함수이다

 

pang(list)의 자료형에 인덱스를 붙여서 출력했다.

 

왜Tuple로 안나와??

pang=['a','b','c','d']
for x,y in enumerate(pang):
    print(type(x), type(y))

a=(1,2)
print(type(a))


>>>
<class 'int'> <class 'str'>
<class 'int'> <class 'str'>
<class 'int'> <class 'str'>
<class 'int'> <class 'str'>
<class 'tuple'>

뭐지????? 뭐지?????????????

 

ㅋㅋ,, 아 이래서..??

pang=['a','b','c','d']
for x in enumerate(pang):
    print(type(x), x)


>>>
<class 'tuple'> (0, 'a')
<class 'tuple'> (1, 'b')
<class 'tuple'> (2, 'c')
<class 'tuple'> (3, 'd')
<class 'tuple'>

몇번 더 해보니까 반복자를 x,y두개로 해서 각각 인덱스와 값으로 받았더니

 

튜플형으로 나오지 않고 각 int형과 str형으로 나온것 같다.

 

아무래도 enumerate()자체가 인덱스와 스캔값을 함께 묶어서 보낼 수 있어야만 tuple형으로 

 

출력이 되나보다.

 

 

range() 예제

for i in range(1,20,3):
    print(i)
    
>>>
1
4
7
10
13
16
19

range()는 범위를 뜻하는 range 단어 뜻 그대로 범위 내 반복을 지정해준다

 

range(증가할 반복자, 반복범위, 반복할 크기)

 

range(1,20,3)의 경우 1부터 20까지 3씩 증가함을 뜻한다.

300x250

댓글