파이썬 기초 정리

Bor·2021년 11월 13일
0
post-thumbnail

데이터형과 변수

파이썬의 데이터형 정수형, 실수형, 문자열형, 부울형이 있으며 나누기와 관련한 연산자는 총 3개로 다음과 같다.

  • /는 실수 형태로 결과를 출력
  • //는 몫
  • % 는 나머지

    데이터형 확인 : type(num) 이렇게 확인

다수의 데이터형 출력

name = '보람'
print('나는', name, '입니다.')

input을 통해서 입력값을 받은 후 연산을 할 수도 있다.

age = int(input('나이: '))
print(type(age))
old = age + 10
print('십년 후 나이: ', old)

변수

변수는 데이터를 저장할 수 있는 메모리 공간의 이름. 파이썬은 변수에 데이터를 할당하는 순간 자동으로 선언되는 효과가 있으며 처음 입력되는 값의 데이터형에 따라 결정된다.

등호는 산술적인 계산이 아닌 어떤 특정한 기능을 수행하는 연산자이며, 등호를 기점으로 오른쪽에 위치한 값을 왼쪽에 저장하라는 연산자이다.


조건문과 반복문

조건문

조건문의 형식은 다음과 같다.

num = -1
if(num > 0 ):
    print('양수')
elif(num < 0):
    print('음수')
else:
    print('0')
    

반복문

for문

for문은 크게 단일 for문과 중첩 for문으로 나뉜다.

for 변수 in (범위 또는 배열):
	명령문 1 
    (명령문 2...)

(예) 
for i in range(3): #range(3)는 0,1,2를 의미
    print('hi')hi

hi
hi
hi
  • range()함수는 최대 3개의 값을 입력 인자로 입력할 수 있으며 다음과 같이 2가지 형식이 있다.
    range(시작, 마지막값 +1, 증가값)
    range(시자, 마지막값 -1, 감소값)
for i in range(0,7,2)
    print(i) #0,2,4,6


#1부터 10까지의 합계
result = 0 
for i in range(1, 11):
    result += i;
print(result)

지금까지 print를 하면, 모두 한 줄 씩 출력이 되었다. 다음과 같이 특수한 옵션으로 줄을 띄우지 않도록 할 수 있다. print함수의 옵션인 end를 사용하면 앞의 문자열을 출력한 후 다음 줄로 띄우지 않고 end에 설정한 문자열이 출력된다.

for i in range(3):
    for j in range(3):
        print('🌟 ', end='')
    print('')
    
[결과]
🌟 🌟 🌟
🌟 🌟 🌟
🌟 🌟 🌟

break / continue

break나 continue는 일반적으로 반복 구문 내에서 조건을 만족하면 빠져나가거나 반복문의 처음으로 돌아가게 하는 기능을 가지고 있다.

break 명령문

아래의 코드는 그 합이 100보다 커지면 더 이상 더하지 않도록 하는 프로그램 코드

sum = 0

for i in range(100):
    sum += i
    if (sum > 100):
        break
print('sum=', sum)

Continue

for문이나 while문 안에서 반복 수행을 하다가 continue를 만나게 되면 그 이후 명령문은 시행하지 않고 반복문의 처음으로 돌아가도록 하는 명령어


문자열과 배열

큰따옴표를 출력해야 하는 문자열은 작은 따옴표를 사용. 작은 따옴표를 사용해야 하는 경우에는 큰따옴표를 사용해야 한다.

print('"안녕"')   #"안녕"

문자열 읽어오기

문자열에 저장된 항목의 일부를 출력하기 위해서 슬라이스의 기능을 사용할 수 있으며 range함수의 동작원리와 비슷하다.

[시작: 끝+1: 단계]

animal = 'frog'
print(animal[1:3]) #ro

아래처럼 간격을 넣을 수도 있다 
animal = 'elephant'
print(animal[1:6:2]) #lpa

콜론이 두 개일 경우
print(animal[::2]) #eehn : 첫문자부터 마지막까지 2의 간격으로 위치한 문자

문자열 함수(메소드)

파이썬에서는 내장함수들을 제공하고 있으며 언제나 호출하여 사용할 수 있다./ 문자열을 위한 함수로 len()이 있으며 문자열의 길이를 반환한다.

print(len(animal)) #8

정보 수집

객체와 객체의 메소드들은 다음과 같은 형태로 호출하여 실행한다.

객체.메소드() #자바스크립트와 동일

animal = 'elephant' 
print('e의 개수', animal.count('e')) // e의 개수 2
animal = 'elephant'
print('앞쪽 찾기:', animal.find('e')) #앞쪽 찾기: 0 문자나 문자열이 처음 나오는 
print('ep 찾기:', animal.find('ep') ) #ep 찾기: 2 인덱스의 값을 반환한다 
print('뒤쪽 찾기:', animal.rfind('e')) #뒤쪽 찾기: 2 rearFind 가장 나중에 나오는 인덱스 값을 반환 
print('위치:', animal.index('e')) #위치: 0 find와 기능 동일, 찾는 내용이 없다면 에러 발생 

특정한 문자열이 존재하는 지 여부를 판단하는 구문이다. 매우 직관적!

animal = 'elephant'
print('n이 있다' 'n' in animal)#False 
print('an이 없다', 'an' in animal) #True
⚠️ 문자열이면 제발 ''로 감싸! 

정보 수집

다음은 문자열의 내용을 수정할 수 있는 다양한 기능의 메소드들을 소개한다.

lang = 'python'
print('선택수정:', lang.replace('p','P'))
print('소문자: ', lang.lower()) 
print('대문자: ', lang.upper())
print('대소문자 swap', lang.swapcase())

정보 분할

다음은 문자열의 공백을 삭제할 수 있는 메소드

animal = '  elephant  '
print('오른쪽 공백 없애기',animal.rstrip())
print('왼쪽 공백 없애기', animal.lstrip())

Random 모듈

random 모듈을 사용하면 무작위에 관련한 여러 기능을 사용할 수 있다.

import random 
print(random.random()) #0.41665479349073664
⚠️ 0에서 1 사이의 무작위 실수형 값을 출력 

다음의 randrange() 메소드를 사용하면 특정 범위의 수 중 무작위의 값을 얻을 수 있다. 2개의 정수를 입력값으로 받으며 첫 번째 정수에서 두 번째 정수 사이의 무작위 정수 값을 반환하게 된다.

import random
print(random.randrange(1,6)) #1에서 5까지의 무작위 수를 출력 

저장된 문자열 중에 무작위로 문자를 출력할 수 있는 함수도 있다. random 모듈에서 제공하는 choice함수이다. 한글우수 중에서 문자를 무작위로 선택하여 출력이 가능하다.

import random
print(random.choice('한글우수')) #수

알파벳, 숫자, 특수문자 중에서 입력한 숫자만큼의 문자를 무작위로 추출하여 문자열 형식으로 저장하고 출력하는 함수 만들기

import random
def password(length):
    pw = str()
    chars = 'abcdefghijklmnopqrstuvwxyz' + '0123456789' + '!@#$%^&*'
    
    for _ in range(length):
        pw = pw + random.choice(chars)
    return(pw)

print(password(8))

배열의 종류

파이썬에는 문자열형(Strings), 유니코드 문자열형(Unicode Strings), 리스트(list), 튜플(tuple), 바이트 배열(byte array)와 같은 형태의 배열형 자료구조가 있다.

변경할 수 있는 자료형

  • 리스트형
  • 사전형
  • 집합형(Set)

변경할 수 없는 자료형

  • 숫자형
  • 부울형
  • 문자열형
  • 튜플형

이후에 나올 배열들은 튜플형을 제외하고 모두 변할 수 있는(mutable) 데이터형이다.

리스트(List)

대괄호를 사용하여 각각의 항목들을 콤마로 구분하면 된다. 앞에서 배운 슬라이싱, 인덱스 모두 동일한 방식으로 동작한다.

fruits = ['사과', '오렌지', '포도', '복숭아']

리스트에서의 병합(Merge) 및 삽입(Insert)

다음은 복수 개의 변수들을 1개의 리스트로 묶거나(packing) 언패킹(unpacking)할 수 있는 방법을 소개한다.

x = 12.23
y = 23.34

packing = [x,y] #패킹!
type(packing)
print('패킹', packing)  #패킹 [12.23, 23.34]

[c1, c2] = packing #unpacking 
print('c1', c1) 		#c1 12.23
print('c2', c2)  		#c2 23.34

복수 개 리스트의 병합

이것도 앞서 배운 문자열과 비슷한 + 기호를 사용한다. 연결할 리스트 사이에 '+' 기호를 삽입하면 모든 리스트에 포함된 원소들을 한 개의 새로운 리스트의 원소로 병합할 수 있다.

#quiz 5.8 

student = ['민준', 172, '서연', 168, '현우', 171,'민서',189,]
alldata = student+ ['동현', 179]
print(len(alldata), "개 데이터")
print(alldata) #10개의 데이터 

리스트에 원소 삽입

append를 통해서 리스트에 원소를 삽입할 수 있다.

def new(n,x):
    n = 2
    x.append(x[-1]+1)
    print('new: ', n, x) 	
    
def one():
    n =1 
    x = [0, 1, 2]
    print('one: ', n, x)	
    new(n,x)
    print('one: ', n, x)
one()

리스트의 항목 삭제

리스트의 항목을 상제하는 방법은 총 3가지다.

  • 지정한 항목을 del로 삭제하는 방법
  • pop() 메소드를 사용하는 방법
  • 빈 리스트 [ ]를 사용하는 방법

del 명령문으로 삭제

del 명령문을 이용하면 지정한 위치에 해당하는 항목을 1개 이상 삭제할 수 있다.

nums = [0,1,2,3,4,5]
del nums[1]
print(nums)

또한 del 명령어로 여러 개의 항목을 삭제하려면 슬라이스 기능을 사용하면 된다.

nums = [0,1,2,3,4,5]
del nums[1:5]
print(nums) 	#[0,5]

pop 함수로 삭제

앞에서 설명한 것처럼 파이썬은 모든 데이터들이 객체로 구성되어 있다. 리스트 또한 객체이다. 객체에는 다양한 기능들을 함수(메소드)로 제공하고 있으며 선택적으로 그 기능들을 사용할 수 있다.

nums = [0,1,2,3,4,5]
nums.pop()
print(nums) #[0, 1, 2, 3, 4]
nums.pop()
print(nums) #[0, 1, 2, 3]

사용방법은 입력 인자를 입력하지 않으면 리스트의 마지막 항목이 삭제되며, 입력 인자를 입력하면 해당 인덱스의 값이 삭제된다.

빈 리스트로 삭제

nums = [0,1,2,3,4,5]
nums[1:2] = []
print(nums) #[0, 2, 3, 4, 5]

검색 기능

빈도수 검사

해당 리스트 내에 존재하는 특정 값의 개수를 측정할 수 있다. 이는 count() 메소드를 사용하면 가능하다. 입력 인자가 해당 리스트에 몇 개 있는지를 카운트하여 알려준다.

Search_result = input('검색:')
nums= [5,1,7,3,5]
print(type(Search_result)) #<class 'str'>
print(nums.count(int(Search_result)))

💁 input으로 받으면 str처리가 되기 때문에 검색이 되지 않는다. 그래서 int로 바꿔야해!

정렬(Sorting)

오름차순으로 정렬하려면 sort() 메소드를 입력값 없이 사용하고 내림차순으로 정렬하려면 reverse = True 옵션을 사용하면 된다. 이것은 임시로 정렬한 내용을 출력하는 것이 아니라 실제로 리스트의 내용을 정렬하여 저장한다.

nums = [3,5,2,1,5,3]
nums.sort()
print(nums)

내림차순은 reverse = True를 옵션을 사용.

nums = [3,5,2,1,5,3]
nums.sort(reverse= True)
print(nums) #[5, 5, 3, 3, 2, 1]

2차원 리스트

다음의 fruitdb 리스트는 '2차원 리스트'이며 다음의 명령문과 같다. 즉 리스트가 여러개의 작은 리스트를 원소로 더불어 갖는 개념이다. fruitdb 리스트는 3개의 리스트 원소를 가지는 리스트.

fruitdb = [['apple', 1020], ['orange', 880], ['grape',3160]]
print(fruitdb[1])  #['orange', 880] fruitdb[1]에 저장된 모든 내용 출력
print(fruitdb[1][0])  #orange fruitdb[1]에 저장된 내용 중 0번 인덱스 내용만 출력 

튜플(tuples)

튜플은 초기화한 후 변경할 수 없는(immutable) 배열이며 리스트의 대괄호가 아닌 괄호()로 묶인 형식이다.

tuples = ()
animals = ('토끼', '사자', '원숭이')
print(animals[1]) #사자
print(animals[1:3]) #('사자', '원숭이')

위의 프로그램을 살펴보면 튜플에서는 리스트와 마찬가지로 인덱싱과 슬라이싱 기능을 제공한다는 것을 확인가능.

animals[1] = '키위새' ##TypeError: 'tuple' object does not support item assignment

위 에러는 튜플은 immutable 배열이라는 의미이며 튜플은 한 번 입력한 내용을 변경할 수 없도록 설계되어 있다. 튜플은 다음의 예와 같이 중첩(nested)될 수도 있다. 다음 예제는 animals 튜플과 fruits 튜플을 원소로 하는 things라는 새로운 튜플을 만들어 출력한 것.

animals = ('토끼', '사자', '원숭이')
fruits = '사과', '오렌지', 1020, 88
things = animals , fruits
print(things) #(('토끼', '사자', '원숭이'), ('사과', '오렌지', 1020, 88))

리스트와 비교한 튜플의 기능

튜플은 기본적으로 리스트에서 사용할 수 있는 대부분의 기능들을 사용할 수 있으나 편집할 수 없는(immutable) 특성을 가지고 있기 때문에 편집에 관련된 기능들은 지원하지 않는다.

가능한 기능

병합
animals = ('토끼', '사자', '원숭이')
fruits = '사과', '오렌지', 1020, 88
things = animals + fruits
print(things) 	#('토끼', '사자', '원숭이', '사과', '오렌지', 1020, 88)
존재 여부(checking Membership)

리스트에서와 같이 찾고자 하는 항목이 튜플에 존재하는지 in 또는 not을 사용가능

animals = ('토끼', '사자', '원숭이')
fruits = '사과', '오렌지', 1020, 88
things = animals + fruits
print('사과' in things)		#True
print('사과' not in things)	#False
반복

리스트와 마찬가지로 튜플에 저장된 값들에 특정값을 곱하면 다음과 같이 반복적으로 저장된다.

a = 1,2,3
b = a * 2 
print(b) 	#(1, 2, 3, 1, 2, 3)

원소의 개수 측정 & 인덱스

a = 1,2,3
b = a * 2 
print(b) #(1, 2, 3, 1, 2, 3)
print(len(b)) #6
print(b.count(3)) #2
print(b.index(2)) #1, 2가 위치한 곳의 인덱스 

튜플 포맷팅

튜플 포맷팅 방식으로 다음과 같은 결과를 출력할 수 있다.

name = '보람'
age = 26
height = 175
print('이름: {} 나이: {} 키: {}' .format(name,age,height))
#이름: 보람 나이: 26 키: 175
#Q5.17
pack = [(0,0), (1,1), (2,4), (3,9), (4,16)]
for (x,y) in range(len(pack)):
    # i 일 때 ,print(pack[i][0], pack[i][1]) 
    print(x,y)
 

사전(dictionary)

key와 value가 하나의 쌍으로 이뤄진 형식으로 구성되어 있다. 리스트나 튜플에서처럼 숫자로 indexing을 하는 것과 달리 키로 색인을 한다. 이러한 키는 문자열, 숫자, 튜플을 사용할 수 있다.

사전의 생성 및 삽입

한 쌍의 중괄호 { }는 빈 사전을 생성한다. 사전에 정렬되지 않은 키:값을 {key:value} 형태의 쌍으로 구성된 집합 형식으로 입력해야 한다.

student = {}
student['보람'] = 2015000
print(student) 	#{'보람': 2015000}

앞선 것에 추가해서 출력. 2개 이상의 항목은 ,로 연결된다.

student = {}
student['보람'] = 2015000
print(student)
student['보람2'] = 2016000
print(student) #{'보람': 2015000, '보람2': 2016000}

여러 개의 정보를 하나의 명령문으로 입력할 수도 있다.

fruitdb = {'apple': 400, 'orange':800, 'grape':4000}
print(fruitdb) #{'apple': 400, 'orange': 800, 'grape': 4000}

사전에서 인덱싱이나 슬라이싱을 실행해보자. 인덱싱이나 슬라이싱 모두 동작하지 않고 에러를 발생시킨다.


fruitdb = {'apple': 400, 'orange':800, 'grape':4000}
print(fruitdb[1]) #에러가 난다. 
print(fruitdb[1:2])

사전 항목 삭제

사전의 항목은 del 명령으로 삭제할 수 있다. 키로 인덱싱하므로 다음과 같이 작성해보자. 여기서 키의 값은 문자열이기 때문에 키(key)의 앞뒤로 따옴표가 필요하다. 결과에서처럼 '사과'에 대한 키:값의 쌍이 삭제되어 출력된 것을 볼 수 있다.

fruitdb = {'apple': 400, 'orange':800, 'grape':4000}
del fruitdb['apple'] 
print(fruitdb) #{'orange': 800, 'grape': 4000}

apple에 대한 키:값이 삭제되어 출력된 것을 볼 수 있다.


사전 항목 검색

작성된 사전의 내용을 조회하기 위한 준비된 다양한 메소드를 살펴보자

fruitdb = {'apple': 400, 'orange':800, 'grape':4000}
del fruitdb['apple']
print(fruitdb) #{'orange': 800, 'grape': 4000}
print('banana' in fruitdb) #False
print(fruitdb.get('grape')) #4000
print(fruitdb.keys()) # 키들 출력: dict_keys(['orange', 'grape'])
print(fruitdb.values()) #밸류들 출력: dict_values([800, 4000])
print(fruitdb.items()) #전체 출력: dict_items([('orange', 800), ('grape', 4000)]) 

사전 병합

fruitStore = {'apple': 400, 'orange':800, 'grape':4000}
newFruit = {'honsi':5000}
fruitStore.update(newFruit)
print(fruitStore)	#{'apple': 400, 'orange': 800, 'grape': 4000, 'honsi': 5000}

사전 포매팅
사전에도 print 함수를 사용할 때 포메팅 기능이 있으며 다음과 같이 포매팅 할 수 있다.

person = {'name': 'boram', 'age':26, 'height':173}
print('이름:{0[name]}, 나이:{0[age]}, 키:{0[height]}'.format(person)) 
#이름:boram, 나이:26, 키:173

집합(Set)

집합은 중복되지 않고 정렬되지 않은 원소들로 구성되어 있다. 집합은 사전과 달리 { } 기호를 사용하고 원소들을 콤마(,)로 구분한다는 공통점이 있지만 사전과 달리 키만 있고 값이 없는 형식이다.

training_data = [['연두', 3, '사과'], ['노랑', 3, '사과'], ['빨강', 2, '포도'], ['빨강', 1, '포도'], ['노랑', 3, '레몬']]

def fruit_counts(data):
    counts: {}
    for row in data:
        label = row[-1]
        if label not in counts:
            counts[label] = 0
        counts[label] += 1
    return counts
result = fruit_counts(training_data)
print(result)

더 공부해볼 부분

  • 패킹, 언패킹 더 공부! #5.17 풀기
  • 알고리즘 문제를 풀어보면서 실전에서 다양하게 사용해보기

0개의 댓글