파이썬 메모
a, b, c = 1, 2, 3
위와 같이 초기화 가능
----------------사용자 정의 함수------------------
def func(a, b):
return a + b
와 같이 정의한다.
--------------------내장 함수------------------------
ord() : 문자의 아스키 코드값을 리턴하는 함수이다.
chr() : 아스키 코드값을 입력으로 받아 그 코드에 해당하는 문자를 출력하는 함수이다.
len() : 문자열의 길이나 리스트의 길이 등을 구할 때 사용 괄호안에 변수도 들어갈 수 있다
string.upper() : 문자열 대문자로 변경하는 함수
string.lower() : 문자열 소문자로 변경하는 함수
string.isupper() : 문자가 모두 대문자인지 확인하는 함수 (대문자 이외의 소문자, 한글이나 공백 등이 하나라도 있으면 false)
string.islower() : 문자가 모두 소문자인지 확인하는 함수 (소문자 이외의 대문자, 한글이나 공백 등이 하나라도 있으면 false)
exit() : 프로그램을 종료한다.
***import math***
math.sqrt(a) : a의 제곱근을 반환
math.pow(a, b) : a의 b제곱을 반환
math.ceil(x) : x의 올림 값을 반환
math.floor(x) : x의 내림 값을 반환
--------------------정수의 각 자리수 분리, 더하기-------------------
**1. 문자로 만들어 분리**
list(str(input()))
12345입력
이렇게 하면 12345를 띄어쓰기 없이 입력했음에도 1,2,3,4,5를 개별의 문자 요소로 입력받는다
여기서 str을 int로 바꾸면 오류가 난다
따라서 int로 쓰고 싶을 땐 리스트에서 하나씩 뽑아 int로 형변환 후 사용한다.
**2. 10으로 나누어 분리***
number = 123
a = []
while(number!=0):
a.append(number%10)
number = number//10
***3. map함수로 분리 후 더하기***
number = 123
sum(map(int, str(number))
str(number)로 먼저 문자열로 만들고, map으로 int로 만든 후, sum으로 더한다.
------------SyntaxError: invalid syntax 오류날때-------------
윗줄에 괄호 빠진거 없나 확인
소수점 반올림하기(round)
round(반올림하고자 하는 값, 자릿수)
e = round(1.23456, 3)
1.235
소수점 반올림하기
f'문자열 {변수 : 0.2f}'
f'abcd {변수: .2f}'
ex)
a=1.239
f'''가나다라 {a:.2f}'''
가나다라 1.24
소수점 반올림 (format)
"문자열 { : .2f}".format(실수)
print쓸때 한줄에 출력하기
for i in range(10):
... print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
print의 괄호안에 매개변수end를 사용한다 따옴표안에 띄어쓰기를 두면 출력할때 띄어쓰기가 된다
print("\")
print 에서 (역슬래쉬)를 그대로 쓰고 싶다면 \를 하나 더붙이면 된다.
---줄넘김 하는법-----
print('''가나다
라마바
사아자''')
이렇게 엔터까지 그대로 문자열로 출력하고 싶다면 작은 따옴표나 큰 따옴표를 세번 붙인다
print('hello\n')
이렇게 \n (역슬래쉬)n을 이용해서 할 수 있다.
print연속으로 이용
print('hello')
n1=1, n2=2
print(f'''{int(n1)+int(n2)}''')
문자열 안에서 변수나 수식을 사용하고 싶으면 따옴표앞에 f를 붙이고 수식이나 변수를 {}로 감싼다
a=tree
print(a[3])
e
이렇게 문자열 변수에서 특정 문자만을 뽑아낼 수 있다
주의 할 점은 파이썬은 첫글자가 1이 아닌 0부터 시작하므로 tree에서 t를 뽑으려면 a[0]을 해야한다
a=input() (a에 123입력)
print(10*a[1])
이렇게 하면 a의 [1]인 2가 10번 반복해서 나온다 ex.2222222222
a라는 변수는 입력받을때 숫자가 아닌 문자열로 입력 받았기 때문이다
a=int(input())
print(10*a[1])
그렇다고 이렇게 하면 오류가 난다
[1] <- 이런 특정 순서의 문자를 뽑아내는것은 문자열에서만 가능하기 때문에 숫자열 변수는 오류가 나는것이다
a=input()
print(10*int(a[1]))
이렇게 일단 문자를 뽑아내고 뽑아낸 문자를 int를 통해 숫자열로 바꿔줘서 계산하는 것은 가능하다
---------------------ragne 함수----------------
a=range(10)
이렇게 하면 0~9의 range가 된다
a=range(1, 11)
이렇게 하면 1~10까지의 range가 된다
a=range(1, 11, 1)
이렇게 하면 1~10까지 1씩 증가하는 range가 된다
■■■■■■■■■■■■■■■■■■리스트■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
a=range(1,10,1)
1에서 1씩 증가하여 9까지 포함하는 리스트이다 (1,2,3,4,5,6,7,8,9)
--------------얕은 복사와 깊은 복사--------------
참고 사이트
https://black-hair.tistory.com/49
얕은복사
li1 = [1, 2, 3]
li2 = li1
li2[0] = 99
li2의 값을 변경했지만 li1의 [0] 인덱스 요소가 변경됨
--------------같은 차원의 리스트 더하기-----------
a = ['aaa']
b = ['bbb']
c = ['ccc']
d = a + b + c
['aaa', 'bbb', 'ccc']
같은 차원의 리스트를 더하면 차원은 변하지 않고 요소만 더해진다
------------리스트를 역순으로 하고 싶을때는------------
for i in reversed(range(1,10,1)) 으로 reversed를 이용하거나
for i in range(10,1,-1) 처럼 -1을 넣으면 된다
------------리스트 요소 끄집어내기(pop)------------
a=[1,2,3]
print(a.pop())
3
print(a)
a=[1,2]
pop을 쓰면 리스트 내의 특정 요소를 끄집어 내고, 리스트 내에서 그 요소가 삭제된다
괄호를 비워놓으면 제일 끝의 요소가 끄집어 내진다
괄호안에 숫자를 넣으면 해당 순서의 요소가 끄집어 내진다.
------------리스트 내의 최댓값, 최솟값 구하기------------
a=[1,2,3,4,5]인 리스트가 있다.
min(a)를 하면 최솟값이, max(a)를 하면 최댓값이 반환된다.
key 매개변수를 이용해 조건설정도 가능
------------위치반환(index)------------
a=[1,2,3]
a.index(3)
2
리스트 내에 똑같은 요소 여러개가 있으면 제일 앞 순서의 요소의 위치를 반환한다.
------------요소추가(append, insert)------------
a=[1,2,3]
a.append(4)
a=[1,2,3,4]
append하면 리스트의 마지막에 요소를 추가한다.
a.insert(0, 111)
a = [111, 1, 2, 3]
insert(인덱스, 값) 하면 요소추가 가능
------------요소갯수 세기(count)------------
a[1,2,3,4]
a.count(2)
1
count(x)는 리스트 내에 x가 몇개인지 센다
-------------리스트 뒤집기 (reverse)-----------
a = [1, 2, 3, 4]
a.reverse()
[4, 3, 2, 1]
reversed : 거꾸로 뒤집기, iterable한 객체를 반환, 확인을 위해서는 list로 한번 더 변형 필요
x = [1 ,11, 2, 3]
y = reversed(x)
x
[1, 11, 2, 3]
y
<list_reverseiterator object at 0x1060c9fd0>
list(y)
[3, 2, 11, 1]
------------리스트 정렬 (sort)----------------
**오름차순**
a=[1, 4, 2, 3]
a.sort()
[1, 2, 3, 4]
**내림차순**
a=[1, 3, 4, 2]
a.sort(reverse=True)
[4, 3, 2, 1]
**sort의 key옵션**
key옵션에 지정된 함수의 결과에 따라 정렬한다.
ex) 원소의 길이에 따라 정렬할 때
m='나는 파이썬을 잘하고 싶다'
m = m.split()
['나는', '파이썬을', '잘하고', '싶다']
m.sort(key=len)
['나는', '싶다', '잘하고', '파이썬을']
**정렬된 결과 반환 (sorted)**
정렬된 결과를 반환. 원본 리스트는 변하지 않음
a=[1, 4, 2, 3]
b=sorted(a)
b>>> [1, 2, 3, 4]
a는 안변함
--------------리스트 내의 중복 제거하기-------------------
set을 이용할경우 (집합자료형은 중복을 허용하지 않고, 순서가 없다는 특징을 이용)
my_list = ['A', 'B', 'C', 'D', 'B', 'D', 'E']
my_set = set(my_list) #집합set으로 변환
my_list = list(my_set) #list로 변환
print(new_list)
출력된 값은 ['D', 'B', 'A', 'E', 'C']
다만 set을 이용할경우 위와같이 리스트의 순서는 뒤죽박죽이 된다
set은 파괴적 함수가 아니기 때문에 변수에 대입해줘야 한다.
FOR문을 이용할경우
my_list = ['A', 'B', 'C', 'D', 'B', 'D', 'E']
new_list = []
for v in my_list:
if v not in new_list:
new_list.append(v)
print(new_list)
출력된 값 ['A', 'B', 'C', 'D', 'E']
--------------리스트 길이 구하기(len)--------------
a=[1,2,3]
len(a)
3
--------------리스트 요소 제거(remove)--------------
a=[1,2,3,4,3]
a.remove(3)
a=[1,2,4,3]
remove(x)는 리스트에서 첫번째로 나오는 x를 삭제한다.
---------------리스트 요소 모두 출력---------------
a = [1, 2, 3]
print(*a)
1 2 3
이렇게 쓰면 a리스트의 모든 요소를 출력한다
-----------리스트 컴프리헨션----------------
반복문을 통해 리스트에 값을 추가하는게 아니라, 리스트 [] 중괄호 내부에 코드를 작성한다.
형식 -> [ 표현식 for문 조건문]
ex)
li = [x for x in range(0, 10) if x % 2 == 0]
print(li)
[0, 2, 4, 6, 8]
ex)
li = [input() for _ in range(5)] # _는 값을 따로 활용하지 않는다는 의미
1, 2, 3, 4, 5입력
li = [1, 2, 3, 4, 5]
ex)
li = [ [] for _ in range(5)] #이렇게 표현식에 []를 넣으면
[[], [], [], [], []] #빈 리스트가 생성된다
ex) 컴프리 헨션 내부에 for문과 if문을 제한없이 반복하여 쓸 수 있다
[ (x, y) for x in ['쌈밥', '치킨', '피자'] for y in ['사과', '아이스크림', '커피']]
[('쌈밥', '사과'),
('쌈밥', '아이스크림'),
('쌈밥', '커피'),
('치킨', '사과'),
('치킨', '아이스크림'),
('치킨', '커피'),
('피자', '사과'),
('피자', '아이스크림'),
('피자', '커피')]
ex)
[ x for x in range(10) if x < 5 if x % 2 == 0 ]
[0, 2, 4]
---------------리스트 언패킹------------
iterable 객체 앞에 *를 붙이면 언패킹 할 수 있다.
ex)
li = [1,2,3,4,5]
a,b,c,d,e = *li
print(*li)
1 2 3 4 5
■■■■■■■■■■■■■■■입력받기 (input)■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
ex)
a = input("숫자입력")
a라는 변수를 미리 생성하지 않아도 input을 쓸 때 자동으로 생성됨
("숫자입력") 부분은 입력을 받을때 print 하는 기능
input은 str로 입력값을 받아온다 따라서 필요할 경우 형변환을 해줘야 한다
a = ord(input()) : 입력 받음과 동시에 해당 문자의 아스키 코드값을 a에 저장
a, b = input().split() 이런식으로 입력받은 값을 나눠 두 개 이상의 변수에 받을 수 있다
--------------리스트로 입력 받기-------------------
a=[input()]
12345입력
이렇게 하면 리스트로 입력받는데, 12345전체를 하나의 요소로 입력받는다
a=list(map(int, input().split()))
1 2 3 4 5 입력
이렇게 하면1,2,3,4,5 를 각각 개별의 요소로 입력받는다
list는 파괴적함수가 아니기 때문에 변수에 대입해줘야 한다.
list(input())
12345입력
이렇게 하면 12345를 띄어쓰기 없이 입력했음에도 1,2,3,4,5를 개별의 문자 요소로 입력받는다
a=input().split()
1 3 5입력
a=['1', '3', '5']
이렇게 변수를 하나만 설정해 놓고 여러값을 입력 받으면 리스트 형태로 변수에 저장된다
------------------------split--------------------
a, b=input().split()
두가지 이상의 입력을 받을 때는 .split()을 써야함 ()괄호안은 비우면 띄어쓰기로 입력받은 문자 구분
(':')같이 특정 문자가 들어가 있으면 해당 문자를 기준으로 구분
a, b=int(input().split()) <<<-에러남
split을 쓸때는 이렇게 int를 앞에 넣을 수 없다 문자열로 저장된다
a=input().split()
1 3 5입력
a=['1', '3', '5']
이렇게 변수를 하나만 설정해 놓고 여러값을 입력 받으면 리스트 형태로 변수에 저장된다
a=input()
n1, n2 = a.split()
이렇게 입력을 하나의 변수로 받고 나중에 두개로 나눌수도 있다.
a=int(input())
이렇게 입력받는 동시에 숫자형으로 변수저장 가능
a, b = map(int, input().split())
이렇게도 가능하다
a=list(map(int, input().split()))
이렇게 하면 리스트 형태로 저장한다.
문자열을 분해해서 리스트로 만들기
m='나는 파이썬을 잘하고 싶다'
m = m.split()
['나는', '파이썬을', '잘하고', '싶다']
-------------------------연산자--------------------
2/4
0.5 파이썬은 나눗셈을 하면 자동으로 자료형이 float으로 변환되어 값이 실수형으로 나타난다.
10/5
2.0 나머지가 0이더라도 나눗셈은 무조건 float형으로 변환된다.
print(7//4)
//를 하면 나눗셈에서 몫인1만을 반환하고 소수점은 반환하지 않는다
7%3
1 %는 나머지를 반환한다
3**4
81 여기서 **는 3의 4제곱을 나타낸다
a+=1
a=a+1
a-=1
a=a-1
*=, %=, /= 들도 있다 (+=, -+ 같은 기능들은 int에서만 되는듯 하다)
-------------------비교, 논리 연산자--------------------
10==10 두개의 값이 같은지 비교
10!=10 두개의 값이 다른지 비교
10>20, 10<20 10이 20보다 큰지, 작은지 비교
10<=20, 10>=20 10이 20보다 크거나 같은지, 작거나 같은지 비교
1 is 1.0 만약 ==를 썼다면 두개가 같다고 나오지만, is는 객체를 비교하기 때문에 다르다고 나온다.
1 is not 1.0 마찬가지로 객체를 비교하기 때문에 다르다고 나온다.
x or y x와 y 둘중에 하나만 참이어도 참이다
x and y x와 y 모두 참이어야 참이다
not x x가 거짓이면 참이다
x in 리스트(또는 튜플, 문자열) 리스트(또는 튜플, 문자열)안에 x가 있는가?
x not in 리스트(또는 튜플, 문자열) 리스트(또는 튜플, 문자열)안에 x가 없는가? (없으면 참, 있으면 거짓)
-----------------------if문------------------------
a, b=map(int, input().split())
if a>b:
print(">")
elif a<b:
print("<")
else:
print("==")
if, elif 뒤엔 조건식을 쓴후 :를 붙인다 else는 조건식을 안쓰고 :붙인다
if, elif, else 다음줄은 tab으로 띄어쓰기 한 후 실행식을 쓴다 또는 실행식을 조건문 뒤에 써도됨 ex) if a>b: print(">")
if로 조건을 설정하고 elif로 조건을 만족하지 않는 값들 중 다시 조건을 걸어 선별하고 마지막 나머지는 else로 한다
if a>0:
if a<0: print("1")
else: print("0")
이렇게 if나 else, elif 내에서 다시 if, elif, else를 쓸 수 있다
print('>' if a > b else ('<' if a < b else '=='))
이렇게 print 함수 내에서도 쓸 수 있다
**예제**
a=int(input())
if 89<a:
print("A")
elif 79<a:
print("B")
elif 69<a:
print("C")
여기서 50을 입력한다면 B와 C를 출력하는 조건에 모두 들어맞으니 B,C 둘다 출력될것 같지만 아니다
처음에 50은 A를 출력하기 위한 조건에 부합되지 않아 밑의 elif로 넘어갔고, B 출력 조건에 부합하자 B를 출력한 후 if문을 빠져나가 종료된다
따라서 출력은 B만 출력된다.
------------------------for문 과 while문------------------------
a=int(input())
b=range(1,10,1) [1에서 9까지 1씩 올라감 10은포함X)
for c in b:
print(a, "", c, "=", ac)
a=int(input())
for c in range(1,10,1):
print(a, "", c, "=", ac)
이렇게 쓸 수도 있다
for i in range(2,10):
... for j in range(1, 10):
... print(ij, end=" ")
... print('')
여기서end=" "를 넣으면 앞에 ij가 출력된 이후 다음줄이 아닌 옆에 다음것이 출력된다
s3 = '하이. P y T h O n !'
for i in s3: ##이렇게 하면 하나의 문자열에서도 한 글자씩 나눠서 i에 넣는 for문이 된다
print('\'{0}\'는 대문자? : {1}'.format(i, i.isupper()))
***while문***
while True:
a, b=map(int, input().split())
if a==0 and b==0:
break
print(a+b)
while 이후 조건식을 쓴다 조건식 대신 True(T대문자로)쓰면 항상 조건이 성립되있다고 간주한다
다음줄에 반복될 문장을 쓴다
break를 쓰면 강제로 while문에서 빠져 나갈 수 있다
while문 내에서도 if로 또 조건식 설정이 가능하다 if와 break로 while문을 빠져나가는 조건식을 만든다
**주석***
한줄주석 : #을 맨 앞에 붙인다
여러줄 주석 : """ 또는 ''' 로 감싼다
ex)
'''a = 1'''
#b = 2
"""c = 3"""