컴퓨터 공부/🐍 Python

파이썬 기본_1

letzgorats 2021. 7. 19. 19:30

파이썬에 대해 우리는 파이썬 3.x 버전을 사용한다.

파이썬 3버전에서의 문법을 숙지하자.

 

 

출력

- 가장 먼저 출력을 하기 위해, 컴퓨터에 명령을 해야하는데, 해당 명령을 파이썬에서는 print() 로 한다.

(ex)  print('문자/문자열')

       print(3)

 

연산

- 연산 몫연산/ 나머지 연산 / 나누기 연산

(ex)  print(15//4) 처럼 슬래쉬를 2개 쓰면 몫연산이다. 예시의 출력은 3이 나오겠다

(ex)  print(15%4)처럼 %는 modular 연산 (나머지 연산)이라고 하는데, 나머지를 출력한다. 예시의 출력은 3이 나오겠다.

(ex)  print(15/4) 처럼 /는 나누기 연산이다. 출력 결과는 소수점이 나온다.

 

변수,데이터 타입

- 변수는 데이터를 할당하는 것으로, 데이터 타입으로는 문자열, 정수, 소수, boolean 등이 있다.

코드에서 어떤 변수의 타입을 알고 싶을 때는 type()함수를 쓰면 된다.

- 변수의 이름은 영어 소문자로 시작하는 것이 보편적이다. 띄어쓰기는 언더바로 연결시켜준다.

(ex) player_name = "김정엽" 처럼 player_name은 변수가 된다.

 

input

- 파이썬에서 입력받는 내장 함수는 input() 이다. 이 때, 입력받는 데이터 타입의 default는 문자열이다.

예를 들어, x = input() 해서 사용자가 3을 입력하면 이 3은 '3'과 같이 문자열을 의미하는 것이다. 그래서 이것을 int형으로 바꾸려면 x = int(input()) 으로 해야 할 것이다.

사용자에게 어떠한 출력문을 통해 입력값을 받길 원한다면, print문을 따로 쓰는 것이 아니라

(ex) name = input("What's your name? ") 처럼 input() 괄호 안에 원하는 출력문을 쓰면 된다.

 

길이 함수 len 함수

개수 세는 count 함수

해당 인자가 있는 가장 첫 index 출력해주는 find 함수

스트링이나 리스트의 길이를 알아내는 함수는 len()이다.

count()함수도 괄호 안의 인자의 개수를 세는 함수이다.

(ex) friends = ['김정엽','박현','김시형']

len(freinds) = 3

 

(ex) friends_2 = "kimandpark"

len(friends_2) = 10

 

(ex) number_list = [1, 2, 3, 4, 5]

how_many1 = len(number_list)  # 5

how_many2 = number_list.count(2)  # 1

print(how_many1+how_many2)  # 6가 나오겠지?

 

(ex) my_name = "son_heung_min"

print(my_name.find("n"))   # 2번째 인덱스에 n 처음 있으므로 2 출력

 

대체하는 replace 함수

(ex)

my_name = "Kim Jeong Yeop"

new_name = my_name.replace("Kim", "Park")  # Kim 을 Park 으로 바꿔버림

print(new_name)  # Park Jeong Yeop 이 출력된다.

 

인덱싱

   : 파이썬에서는 인덱싱이 매우 중요하다. 슬라이싱이 유용하게 사용되는 언어이기 때문이다.

예를 들어 설명하겠다.

(ex) 

number_list = [1,2,3,4,5,6,7,8,9,10] 이 있다고 하면

맨 앞의 원소의 인덱스는 0이고 맨 마지막 인덱스는 9가 되겠다. ( 0,1,2,3,... 순으로 인덱스가 진행되므로)

또, 파이썬에서는 음수로 인덱스 표현을 활용할 수 있는데, -1 부터 작아지는 순으로 앞으로 인덱스가 역순된다.

예를 들어, 위 number_list 에서 8 이라는 원소를 추출하고 싶으면 number_list[7] 로 뽑아도 되지만, number_list[-3]으로 뽑아도 8을 뽑을 수 있다는 것이다.

number_list[-1] = 10

number_list[-2] = 9  이런 순으로 쭉쭉 가는 꼴이다. 이런 음수 표현은 슬라이싱에서 자주 이용되는데,

예를 들어 내가 반복문으로 돌 때, number_list 중에 4부터 9까지 돌고 싶다면 어떻게 표현할 수 있을까?

for i in number_list[3:9] 로 표현할 수도 있겠지만, 통상적으로 

for i in number_list[3:-1]로 표현하는 것이 더 직관적으로 이해할 수 있다.

이 때, 9는 -2번째 index에 해당되는 수 인데, 왜 -1 로 표현했냐고 하면, 슬라이싱에서는 [a:b]라고 하면 a부터 b-1까지이다. 즉, 마지막 수는 포함하지 않는다.

예를 들어, my_name = "Park_Hyeon" 이라 하면,

for text in my_name[2:-1]:

    print(text)

라고 하면, 

출력은 한줄에 text 하나씩 출력되는데, 

r

k

_

H

y

e

o

순으로 출력될 것이다. 슬라이싱 할 때, 값을 따로 지정해주지 않고 빈칸으로 나두면, 처음과 끝을 가리킨다.

예를 들어, 위 예에서

for text in my_name[:]:

    print(text,end="")  #  여기서 end=""는 한 문자씩 출력할 때, 개행(한줄씩 띄우지 않고) 대신 ""로 해서 그대로 이어서 출력되도록 하는 역할 

 

라고 하면, 출력은

Park_Hyeon 이렇게 다 나올 것이다. 

그래서 그냥

for text in my_name:

    print(text,end="") 과 똑같은 역할이다.

 

strip() 함수

    : strip 함수는 lstrip과 rstrip이 있는데, lstrip()은 왼쪽 빈칸을 다 없앤다는 것, rstrip()은 오른쪽 빈칸을 다 없앤다는 것이다. (개행도 없애준다.)

   : strip()은 lstrip()과 rstrip() 이 짬뽕된 양 옆의 빈칸을 없애준다.

(ex)

name = "     LetzGoRats       "

name = name.strip()

print(name)   # LetzGoRats 가 깔끔하게 출력된다.

 

(ex)

name = "_____LetzGoRats******"

name = name.strip("_")

name = name.strip("*")  

print(name)   # LetzGoRats 가 깔끔하게 출력된다.

※ strip() 괄호 안의 문자를 정리해준다는 것인데, default가 빈칸이라고 보면 이해하기 편하다.

 

다양한 출력

format 함수를 종종 사용한다.예를 들어, (ex) my_name = "김정엽"my_bro = "박현"print("My name is {0}, and My friend is {1}".format(my_name,my_bro))# 이렇게 되면 format()에서 0번째에 my_name 이 있으므로 "김정엽" 이 출력되고,1번째에 my_bro가 있으므로, "박현"이 출력된다.최종 출력은

My name is 김정엽, and My friend is 박현

이 되겠다.

 

(ex) 소수 표현에서 몇번째 자리까지 표현하고 싶을 때,

hitting_rate = 0.345 # 3할4푼5리의 타율을 소수 2번째 자리까지 표현하고 싶으면?

print(f'{hitting_rate: .2f}') 이런 형식으로 쓰거나

print('%.2f' % hitting_rate) 처럼 쓰거나

print('{:.2f}'.format(hitting_rate)) 처럼 쓰거나

print(format(hitting_rate,.'2f')) 처럼 쓰거나

 

근데, 나는 반올림할 때는 round 함수 자주 쓴다.

print(round(hitting_rate,2)) # 소수 2번째 자리까지 반올림해서 표현

 

리스트

다른 언어에서의 배열이 리스트라고 이해하면 편하다.

- 빈 리스트 선언하는 방법(매우 간편)

name = []

name = list()

# 둘 다 name이라는 변수를 가진 빈 리스트를 생성

- 리스트변수.append(데이터) : 리스트에 무언가를 추가하고 싶을 때 쓰는 함수

- 리스트변수.insert(인덱스번호, 데이터) : 리스트의 해당 인덱스에 무언가를 추가하고 싶을 때 쓰는 함수

- 리스트변수.remove(데이터) : 리스트에 무언가를 삭제하고 싶을 때 쓰는 함수

- del 리스트변수(인덱스번호) : 리스트의 해당 인덱스의 원소를 삭제하고 싶을 때 쓰는 함수

 

리스트 정렬하기 

number_list = [100,23,325,1,0]print(number_list)  # [100,23,325,1,0] 가 출력

 

number_list = [100,23,325,1,0]

number_list.sort()  # 리스트.sort()는 기존 리스트를 오름차순으로 출력된다.print(number_list)  # [0,1,23,100,325] 로 오름차순으로 정렬된 리스트가 출력

 

number_list = [100,23,325,1,0]

number_list.sort(reverse=True) # 기존 리스트를 내림차순으로 정렬

print(number_list) # [325,100,23,1,0]

 

number_list = [100,23,325,1,0]

number_list.reverse()  # 기존 리스트를 거꾸로 배열

print(number_list) # [0,1,325,23,100]

 

근데, 나는 sort()함수보다 sorted() 함수를 쓴다. 쓰는 방식은

sort() 함수는 리스트.sort()인 반면,

sorted() 함수는 sorted(리스트)이다.

내가 sorted함수를 선호하는 이유는

첫째, sort() 함수의 리턴값은 None 인 반면, sorted()함수는 리턴값이 객체이다.

둘째, sorted() 함수를 쓰면 기존 리스트는 변하지 않고 남길 수 있다. 기존 정렬하기 전의 초기 리스트가 필요할 때가 있기 때문이다.

(ex)

number_list = [100,23,325,1,0]

new_number_list = sorted(number_list)

new_reversed_number_list = sorted(number_list,reverse=True)

print(number_list) # [100,23,325,1,0]

print(new_number_list) # [0,1,23,100,325]

print(new_reversed_number_list) #  [325,100,23,1,0]

 

(ex) 

number_list = [100,23,325,1,0]

number_list.sort()

print(number_list) # [0, 1, 23, 100, 325] 

# 하지만, 기존 리스트를 정렬해버렸기 때문에, 다음에 기존리스트를 못가져온다.

 

split() 함수

    : default는 빈칸을 기준으로 나눈다는 것이어서 split('')이나 split()이나 같은 뜻이다.

(ex)

vibe = "Lets go rats"

vibe = vibe.split()  # 빈칸을 기준으로 vibe 리스트 생성

print(vibe)  # ['Lets', 'go', 'rats']



friends = "Kim**Park**Choi"

friends = friends.split('**') # **을 기준으로 friends 리스트 생성

print(friends)  # ['Kim', 'Park', 'Choi']

반응형