2022/02/02 study record
while문은 for문과 다르게 반복할 횟수를 정하지 않고 반복을 할 수 있는 문법입니다.
while문의 기본 예제로는 아래와같이 나타낼 수 있습니다.
//초기식
while 조건식:
//반복할 코드
일단 초기식이 있고 while옆에 조건식이 있고 조건식의 끝을 :을 붙여 마무리 해주며
반복할 코드를 그 아래에 적고 조건식의 결과에 영향을 주는 코드 즉, 변화식을 주어 조건식을 불만족시킴으로 반복을 멈추는 구조입니다.
while문을 강제로 멈추는 방법으로 break를 쓰는 방법이 있습니다. while문에서 break를 읽게 되면 바로 while문을 빠져나오게 됩니다.
또, while문을 강제로 다시 읽게하는 방법으로 countinue문이 있습니다. countinue문을 읽게 되면 while문의 맨 윗줄부터 다시 읽게 됩니다.
중첩반복문은 반복문 안에 반복문을 쓰는 방법으로 2중,3중 n중 반복문을 사용하는 것을 중첩반복문이라고 부릅니다.
볼펜을 움직이는 것 처럼 거북이가 움직이면서 발자국 같은것을 남겨그림을 그리는 모듈입니다.
사용방법으로는
import turtle as(객체생성할 때 객체의 이름) (ex: t)
t.shape( [arrow, turtle, circle, square, triangle, classic] )//모양을 지정할 수 있습니다.
t.forward() or t.fd() // 괄호() 안에 움직이고싶은 거리만큼을 입력합니다.
t.left() or t.lt() or t.right() or t.rt() // 괄호안에 회전할 각도를 입력합니다.
t.color() // 괄호안에 색을 입력하면 펜의 색이 바뀝니다.
t.begin_fill() and t.end_fill() //begin_fill()을 하면 색칠할 영역의 시작을 알리고 end는 끝을 일립니다.
t.speed() // 모듈이 움직이는 것의 속도를 괄호안에 넣으면 속도를 조정할 수 있습니다.
t.circle() // 괄호안에 반지름을 쓰면 원을 그려줍니다.
리스트는 객체입니다. 객체를 생성했으면 그 객체를 조작하는 함수인 method가 있습니다.
리스트의 요소를 추가하는 메서드는 3가지가 있습니다.
append: 요소 하나를 맨 뒤에 추가
extend: 리스트를 연결하여 확장
insert: 특정 인덱스에 요소 추가
append를 리스트 인스턴스인 a에 응용하는 것을 예를 들자면
a = [10. 20, 30] //객체생성
a.append([500, 600])
a
[10, 20, 30, [500, 600]]
len(a)
4
append는 요소 "하나"를 리스트 a 끝에 추가하는 매서드라서 len으로 길이를 구하면 4가 나오게 됩니다.
extend는 리스트 끝에 다른 리스트를 연결하여 확장을 하는 매서드입니다. extend의 특징으로는 한번에 여러개의 요소를 추가할 수 있다는 것 입니다.
예시로는
a = [10. 20, 30]]
a.extend([500, 600])
a
[10, 20, 30, 500, 600]
len(a)
5
가됩니다.
insert는 inser(인덱스, 요소) 순서대로 인자를 넘겨주게 됩니다.
예시로는
a = [10, 20, 30]
a.insert(2, 500)
a
[10, 20, 500, 30]
len(a)
4
2번째 요소에 새로운 요소를 집어넣고 그 뒤 요소들은 인덱스를 1씩 추가하는 형식으로 변경됩니다.
리스트에서 요소를 삭제하는 방법은 2가지가 있습니다.
pop: 마지막 요소또는 인덱스의 요소를 삭제
remove: 특정 값을 찾아서 삭제
pop()은 리스트의 마지막요소를 삭제하고 그 값을 반환합니다.
pop(인덱스)는 해당 인덱스릐 요소를 삭제한 뒤 삭제한 요소를 반환합니다.
a = [10, 20, 30]
a.pop(1)
20
a
[10, 30]
pop대신
del을 사용해도 됩니다.
a = [10, 20, 30]
del a[1]
a
[10. 30]
이와 같이 해줘도 같은 기능을 합니다.
remove(값)을 사용하면 리스트 내에 값을 찾아서 처음찾은 값을 삭제합니다.
예)
a = [10, 20, 30, 20]
a.remove(20)
a
[10, 30, 20]
위와같이 앞에있는 20이 삭제가 됩니다.
위에 적은 리스트의 매서드 들을 이용하여 스택과 큐를 만들 수 있습니다.
append와 pop을 이용하면 스택이고 append와 pop(0)을 이용하면 큐의 모습이 됩니다.
파이썬에서 큐를 좀더 효율적으로 사용할 수 있도록 덱(deque, double ended queue)라는 자료형을 제공합니다.
form collections import deque
a = deque([10, 20, 30])
a
deque([10, 20, 30])
a.append(500) // 덱의 오른쪽에 500 추가
a
deque([10, 20, 30, 500])
a.popleft() // 덱의 왼쪽 요소 하나 삭제
10
a
deque([20, 30, 500])
deque는 leftpop과 leftappend가 pop과 append와 동시에 사용될 수 있습니다.
리스트에서 특정 값의 개수를 구하는 방법으로 count가 있습니다.
a.count(값) //과 같은 형식으로 사용됩니다.
sort는 리스트에 요소를 오름차순으로 정렬해줍니다.
reverse는 리스트에서 요소를 반대로 뒤집습니다.
sort(reverse=False)라고 하면 오름차순으로 정렬하고
sort(reverse=True)라고 하면 내림차순으로 정렬합니다.
sorted(a) a가 list형 인스턴스일 경우 a가 정렬된채로 새 리스트를 생성합니다.
clear는 리스트의 모든 요소를 삭제합니다.
a = [10, 20, 30]
a.clear()
a
[]
시퀀스 객체가 비어있는지 확인하는 방법으로는
if len(seq) 를 하는 방법이 있습니다. 만약 seq가 비어있다면 길이가 0으로 나오기 때문에 if 0이기 때문에 0=="False"이기 때문에 실행이 안됩니다. 만약 비어있지 않다면 True이기 때문에 실행이 됩니다
a = [10, 20 ,30 ,40]
b = a
a==b #True
b.apend(50)
print(a) #[10, 20 ,30 ,40, 50]
print(b) #[10, 20 ,30 ,40, 50]
c = a.copy()
a==c #False
print(c) #[10, 20 ,30 ,40, 50]
c.pop()
print(a) #[10, 20 ,30 ,40, 50]
print(c) #[10, 20 ,30, 40]
위와같이 b=a를 하면 a와 같은 주소를 b가 할당하게 되어 b를 변경해도 a가 변경됩니다.
하지만 copy()를 하면 안에있는 새 주소를 할당하여 새 리스트가 만들어짐으로 c를 변경해도 a가 변경이 되지않습니다.
a = [38, 21, 53, 62, 19]
for i in a:
print(i)
출력:
38
21
53
62
19
list안에 있는 요소들이 순서대로 출력됩니다.
한번에 주기가있는 수를 list에 넣는 방법으로는
a = [i for i in range(10)]
print(a)
출력값으로는
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]가 출력됩니다.
다른방법으로는
b = list(i for i in range(10))
가있습니다.
c = [i + 5 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 5를 더하여 리스트 생성
print(c)
출력값은
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
으로 위와같은 방법도 가능합니다.
{list.if}
a = [i for i in range(10) if i % 2 == 0]
print(a)
출력값으로는 [0, 2, 4, 6, 8] 와같이 짝수로만 이루어진 리스트를 생성할 수도 있습니다.
[식 for 변수1 in 리스트1 if 조건식1 for 변수2 in 리스트2 if 조건식2 ... for 변수n in 리스트n if 조건식n]
list(식 for 변수1 in 리스트1 if 조건식1 for 변수2 in 리스트2 if 조건식2 ... for 변수n in 리스트n if 조건식n)
위와같은 방법으로 for반복문과 if 조건문을 여러번 사용할 수 있습니다.
2단부터 9단까지 구구단 리스트를 생성.
a = [i * j for j in range(2, 10) for i in range(1, 10)]
print(a)
출력:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
enumerate를 사용하면 인덱스도 함께 출력이됩니다.
a = [38, 21, 53, 62, 19]
for index, value in enumerate(a):
print(index, value)
출력:
0 38
1 21
2 53
3 62
4 19
과 같이 출력이 됩니다.
for index, value in enumerate(a, start=1):
print(index, value)
start를 지정해주면
1 38
2 21
3 53
4 62
5 19
와같이 index의 값이 1부터 시작합니다.
list가 있을때 list중 가장큰 값을 반환해주는 max(), list중 가장 작은 값을 반환하는 min()
모든 값을 더해서 반환해주는 sum()이 있습니다.
map을 이용하여 lsit를 만들 수 있습니다.
map(1,2)
가 있으면 2를 1에 적용시키는 느낌으로 사용이 됩니다.
ex)
a = list(map(str, range(10)))
print(a)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
와 같은 식으로 2에 있던 숫자들이 str()에 씌워져 숫자였던 것들이 문자열로 바뀌어 list에 저장이 됩니다.
2차원 리스트는 리스트 안에 리스트를 넣어서 만들 수 있으며 안쪽의 각 리스트는 ,(콤마)로 구분합니다.
리스트 = [[값1, 값2], [값3, 값4], [값5, 값6]]과 같은 형태로 나타내고
a = [[10, 20], [30, 40], [50, 60]]
와같이 만들 수 있고 안에있는 요소에 접근하려면
a[0][0]와 같은 형식으로 부르게되면 값1 인 10을 반환하게 됩니다.
2차원 리스트의 사각형 구조를 유지하도록 출력하려면 pprint모듈의 pprint함수를 사용하면 됩니다.
from pprint import pprint
a = [[10, 20], [30, 40], [50, 60]]
pprint(a, indent=4, width=20)
[ [10, 20],
[30, 40],
[50, 60]]
위와같이 출력이 됩니다.
indent는 들여쓰기 칸 수, width는 가로 폭입니다.