02. Python-Programming(Introduction)(Turtle, List, Tuple, Dictionary, Set)
02. Python-Programming(Introduction)(Turtle, List, Tuple, Dictionary, Set)
[toc]
파이썬(입문) 과제2
Turtle
거북이로 무작위 방향으로 그림을 그리는 UI 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#프로그램1
import turtle
import random
## 전역 변수 선언 ##
myTurtle, tX, tY, tColor, tSize, tShape = [None] * 6
shapeList = []
playerTurtles = []
swidth, sheight = 500, 500
## 메인 코드 부분 ##
if __name__ == "__main__":
turtle.title('거북 리스트 활용')
turtle.setup(width = swidth + 50, height = sheight + 50)
turtle.screensize(swidth, sheight)
turtle.bgcolor('pink')
shapeList = turtle.getshapes()
for i in range(0, 100):
random.shuffle(shapeList)
myTurtle = turtle.Turtle(shapeList[0])
tX = random.randrange(-swidth / 2, swidth / 2)
tY = random.randrange(-sheight / 2, sheight / 2)
r = random.random();g = random.random();b = random.random()
tSize = random.randrange(1, 3)
playerTurtles.append([myTurtle, tX, tY, tSize, r, g, b])
for tList in playerTurtles:
myTurtle = tList[0]
myTurtle.color((tList[4], tList[5], tList[6]))
myTurtle.pencolor((tList[4], tList[5], tList[6]))
myTurtle.turtlesize(tList[3])
myTurtle.goto((tList[1], tList[2]))
turtle.done()
리스트
리스트 내포
1
2
3
4
5
6
7
8
# 코드
# num을 0~5까지 리스트에 넣어라
numList = [num for num in range(0, 6)]
print(numList)
# num이 짝수이면 num^2을 리스트에 넣어라
numList2 = [num * num for num in range(0, 7) if num % 2 == 0]
print(numList2)
1
2
3
# 결과
[0, 1, 2, 3, 4, 5]
[0, 4, 16, 36]
zip함수
- 동시에 여러 리스트에 접근하는 함수이다.
- 여러 리스트 중 개수가 작은 것까지만 접근한다.
타입은 리스트 타입이 아님!!!
zip 타입이다.- 두 리스트를 튜플, 딕셔너리로 짝지을 때도 사용한다.
1
2
3
4
5
6
7
8
9
10
# 코드
myList1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
myList2 = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
for small, big in zip(myList1, myList2):
print(small, '-->', big)
myTup = tuple(zip(myList1, myList2)) # 튜플 변환
myDic = dict(zip(myList1, myList2)) # 딕셔너리 변환
print(myTup)
print(myDic)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 결과
# 리스트 zip으로 묶기
a --> A
b --> B
c --> C
d --> D
e --> E
f --> F
g --> G
# 리스트를 튜플로 변환
(('a', 'A'), ('b', 'B'), ('c', 'C'), ('d', 'D'), ('e', 'E'), ('f', 'F'), ('g', 'G'))
# 리스트를 딕셔너리로 변환
{'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D', 'e': 'E', 'f': 'F', 'g': 'G'}
튜플
2차원 듀플을 생성한 후 모든 값을 출력하는 코드
1
2
3
4
5
6
7
8
9
# 코드
tt = ((1, 2, 3),
(4, 5, 6),
(7, 8, 9))
for i in range(0, 3):
print("\n")
for k in range(0, 3):
print("%3d " % tt[i][k], end='')
1
2
3
4
5
6
# 결과
1 2 3
4 5 6
7 8 9
튜플을 리스트로 받아서 항목 변경하는 코드
1
2
3
4
5
6
# 코드
myTuple = (1, 2, 3, 4)
myList = list(myTuple) #튜플을 리스트로 받음
myList.append(5) #리스트 항목을 변경함
myTuple = tuple(myList) #다시 리스트를 튜플로 받음
print(myTuple)
1
2
# 결과
(1, 2, 3, 4, 5)
딕셔너리
딕셔너리 사용법
1
2
3
4
5
6
7
8
9
10
11
# 코드
dic = {'학번' : '20221234', '이름' : '홍길동', '학과' : '소프트웨어융합학과'}
print(dic.keys()) #모든 키들을 출력한다
print(list(dic.keys())) #리스트를 사용하여 dict_keys를 안 보여준다
print(dic.items()) #키와 값을 튜플 형태로 출력한다
print(dic.values()) #모든 값들을 출력한다
print(list(dic.values())) #리스트를 사용하여 dict_keys를 안 보여준다
print('학과' in dic) #키가 딕셔너리에 있는지 확인할 때 사용한다
1
2
3
4
5
6
7
8
9
10
# 결과
dict_keys(['학번', '이름', '학과'])
['학번', '이름', '학과']
dict_items([('학번', '20221234'), ('이름', '홍길동'), ('학과', '소프트웨어융합학과')])
dict_values(['20221234', '홍길동', '소프트웨어융합학과'])
['20221234', '홍길동', '소프트웨어융합학과']
True
딕셔너리의 모든 값을 출력하는 코드
1
2
3
4
5
6
7
8
9
10
# 코드
singer = {}
singer['a'] = 1
singer['b'] = 2
singer['c'] = 3
singer['d'] = 4
for i in singer.keys():
print("%s --> %d" % (i, singer[i]))
1
2
3
4
5
# 결과
a --> 1
b --> 2
c --> 3
d --> 4
딕셔너리를 정렬하는 코드
1
2
3
4
5
6
7
8
9
# 코드
import operator
aDict, aList = {}, []
aDict = {'홍길동': 1, '류민지': 2, '최태준': 4, '김현준': 3}
# operator.itemgetter()에서 ()안에 0을 넣으면 키 정렬, 1을 넣으면 값 정렬암
aList = sorted(aDict.items(), key=operator.itemgetter(1))
print(aList)
1
2
# 결과
[('홍길동', 1), ('류민지', 2), ('김현준', 3), ('최태준', 4)]
세트
세트 사용법
1
2
3
4
5
6
7
8
9
10
11
# 코드
s = set() #빈 세트 생성
mySet1 = {1, 2, 2, 2, 2, 3, 3, 4} #중복되는 키는 자동으로 하나만 남는다
print(mySet1)
mySet2 ={1, 5, 3, 4, 7, 8, 9}
print(mySet1 & mySet2) #교집합(두 세트에 공통을 들어있는 것)
print(mySet1 | mySet2) #합집합(두 세트를 합친 것)
print(mySet1 - mySet2) #차집합(첫 번째 세트에만 있고 두 번째 세트에는 없는 것)
print
1
2
3
4
5
6
# 결과
{1, 2, 3, 4}
{1, 3, 4}
{1, 2, 3, 4, 5, 7, 8, 9}
{2}
{2, 5, 7, 8, 9}
예제
- 기차 수송량에 따라 순위 매기기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 코드
import operator
trainTupleList = [('토마스', 5), ('헨리', 8), ('에드워드', 9), ('에밀리', 5),
('토마스', 4), ('헨리', 7), ('토마스', 3), ('에밀리', 8),
('퍼시', 5), ('고든', 13)]
trainDic, trainList = {}, []
tmpTup = None
totalRank, currentRank = 1, 1
if __name__ == "__main__" :
for tmpTup in trainTupleList :
tName = tmpTup[0]
tWeight = tmpTup[1]
if tName in trainDic :
trainDic[tName] += tWeight
else :
trainDic[tName] = tWeight
print('기차 수송량 목록 => ', trainTupleList)
print('------------------------')
trainList = sorted(trainDic.items(), key = operator.itemgetter(1),
reverse = True)
print('기차\t총 수송량 순위')
print('------------------------')
print(trainList[0][0], '\t', trainList[0][1], '\t', currentRank)
for i in range(1, len(trainList)) :
totalRank += 1
if trainList[i][1] == trainList[i-1][1] :
pass
else :
currentRank = totalRank
print(trainList[i][0], '\t', trainList[i][1], '\t', currentRank)
1
2
3
4
5
6
7
8
9
10
11
12
# 결과
기차 수송량 목록 => [('토마스', 5), ('헨리', 8), ('에드워드', 9), ('에밀리', 5), ('토마스', 4), ('헨리', 7), ('토마스', 3), ('에밀리', 8), ('퍼시', 5), ('고든', 13)]
------------------------
기차 총 수송량 순위
------------------------
헨리 15 1
에밀리 13 2
고든 13 2
토마스 12 4
에드워드 9 5
퍼시 5 6
End.