티스토리 뷰

728x90
반응형

Chapter 07 연습문제 풀이

 

1. 리스트를 만들고 출력하는 방식이다. 오류가 나는 부분을 고르시오.

aa = [10, 20, 30]

print(aa[0])

print(aa[1])

print(aa[2])

  print(aa[3])    aa에 index 3번은 존재하지 않는다.

> IndexError: list index out of range

 

 

2. 빈 리스트를 100개 만들고 길이를 구하는 코드이다. 빈칸을 예에서 골라서 채우시오.

myList = []

for i in range(0, 100) :

    myList.append(0)

len(myList)

 

 

3. 사용자가 숫자를 3개 입력하고 입력한 숫자의 합계를 구하는 코드이다. 빈칸을 for 문으로 완성하시오.

myList = []

for i in range(0, 3) :

    myList.append(0)

hap = 0

 

for i in range(0, 3) :

    myList[i] = int(input(str(i + 1) + "번째 숫자 :"))

 

for k in range(0, 3) :

    hap = hap + myList[k]

 

print("합계 ==> %d" % hap)

 

 

4. 비어 있는 자료구조를 초기화하는 코드이다. 서로 맞는 것끼리 줄로 이으시오.

① aa = []                            나. 리스트

 bb= {}                            다. 딕셔너리

 cc= ()                             가. 튜플

 dd= None                       라. 일반 변수

 

 

5. 다음 리스트가 있을 때, 각 문제의 출력 결과를 예측하시오.

aoa = ['설현', '초아', '지민', '유나', '유경', '혜정', '민아', '찬미']

① aoa[2]

 > 지민

② aoa[-2]    # 뒤에서 2번 째 원소

 > 민아

③ aoa[0:1]    # 0번 index부터 1번 전 index까지 list로 접근

 > ['설현']

④ aoa[6:]    # 6번 index부터 끝까지 list로 접근

 > ['민아', '찬미']

⑤ aoa[-7:-5]    # 뒤에서 7번 째 index부터 위에서 5번 째 전 index까지 list로 접근

 > ['초아', '지민']

⑥ aoa[1::3]    # 1번 index부터 끝까지 index를 3씩 증가해서 list로 접근

 > ['초아', '유경', '찬미']

 

 

6. 각 설명에 해당하는 리스트 조작 함수를 보기에서 고르시오.

append(), pop(), sort(), reverse(), index(), insert(), remove(), extend(), count()

① 리스트의 뒤에 리스트를 추가한다    ★ extend()

② 리스트에서 지정한 값을 제거한다.    ★ remove()

③ 리스트 항목의 순서를 역순으로 만든다.     ★ reverse()

④ 리스트 맨 뒤의 항목을 빼내고, 빼낸 항목은 삭제한다.    ★ pop()

 

## append() -> 리스트 맨 뒤에 항목을 추가한다.

sort() -> 리스트의 항목을 정렬한다.(default로 오름차순 정렬)

index() -> 지정한 값을 찾아 해당 위치를 반환한다.

insert() -> 지정된 위치에 값을 삽입한다.

count() -> 리스트에서 해당 값의 개수를 센다.

 

 

7. 2차원 리스트의 예이다. 각 문제의 출력되는 결과를 예측하시오.

myList = [ [1, 2, 3, 4],

               [5, 6, 7, 8],

               [9, 10, 11, 12]]

① myList[0][1]     # 0번 index 리스트의 1번 index 원소

 > 2

② myList[1][3]    # 1번 index 리스트의 3번 index 원소

 > 8

③ myList[2]    # 2번 index 리스트

 > [9, 10, 11, 12]

 

 

8. 다음 코드를 실행했을 때 myData에 저장된 값은 몇 개인가 ?

myData = {1, 1, 1, 2, 2, 3, 3, 3}
myData.add(1)

 Set 형이기 때문에 key의 중복을 허용하지 않는다. 따라서 {1, 2, 3}이 저장되므로 값은 3개다.

 

 

9. 다음 코드를 실행했을 때 myData에 저장된 값은 ?

import math
myData = [int(math.pow(2,num)) for num in range(0, 5) if num % 2 != 0]

 리스트 Comprehension의 형태로 리스트 = [수식 for 항목 in range() if 조건식]의 형태이다. (range()에는 일반 for문처럼 list같은 반복 가능 객체가 올 수 있다.)

for문을 돌면서 if의 조건식에 맞는 항목이 수식에 의해 계산되어 리스트의 원소로 초기화 되어 리스트가 생성된다.

0 ~ 4의 num 중에서 if 조건식( 2로 나눈 나머지가 0이 아닌 수, 즉 홀수)에 만족하는 num을 pow(2, num)연산한다. pow(x, y) 함수는 x의 y제곱의 결과 값을 반환해주는 함수로, 위에서는 2의 num제곱 결과를 int형으로 myData 리스트에 넣는다.

따라서 2의 1제곱과 2의 3제곱을 수행해 myData의 원소로 넣고 myData 생성한다.

print(myData)

[2, 8]

 

 

10. [프로그램 1]을 수정해 X+Y 좌표가 가장 작은 거북이부터 정렬한 후 거북이끼리 선을 긋는다. 거북이 10마리를 좌표로 정렬한 후 선 긋기.

import turtle 
import random

## 전역변수 선언 부분 ##
myTurtle, tX, tY, tColor, tSize, tShape, tSum = [None] * 7  # tSum = x좌표와 y좌표의 합
playerTurtles = []
swidth, sheight = 500, 500

## 메인 함수 부분 ##
if __name__ == "__main__" :
    turtle.title('리스트 활용해서 거북이 정렬')
    turtle.setup(width = swidth + 50, height = sheight + 50)
    turtle.screensize(swidth, sheight)

    ## 랜덤으로 거북이 객체 10개를 생성 후 playerTurtles에 넣기 ## 
    for i in range(0, 10) :
        myTurtle = turtle.Turtle('turtle')
        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)
        tSum = tX + tY
        playerTurtles.append([myTurtle, tX, tY, tSize, r, g, b, tSum])  # 2차원 리스트 형태

    ## tSum을 key로 해서 playerTurtles를 오름차순 정렬한 다음 reverse ##
    ## playerTurtles의 각 원소를 반환하면 이를 turtles로 받아 turtles[7]인 tSum을 key로 사용 ##
    soredTurtles = sorted(playerTurtles, key=lambda turtles : turtles[7] ,reverse = True)

    for index, tList in enumerate(soredTurtles[0:]) :  # enumerate는 index 값을 같이 반환해 줌 (튜플 형태)
        myTurtle = tList[0]
        myTurtle.color((tList[4], tList[5], tList[6]))
        myTurtle.pencolor((tList[4], tList[5], tList[6]))
        myTurtle.turtlesize(tList[3])
        myTurtle.penup()
        if index == 0 :     # 첫 번째 거북이는 이전 거북이가 없기 때문에 해당 위치로만 이동
            myTurtle.goto(tList[1], tList[2])
            continue
        myTurtle.goto(soredTurtles[index-1][1], soredTurtles[index-1][2]) # 선을 그을 거북이를 이 전의 거북이 위치로 이동

        myTurtle.pendown()
        myTurtle.goto(tList[1], tList[2])   # 설정된 거북이의 좌표로 이동하면서 선 긋기

    turtle.done()

 

--- result ---

 

728x90
반응형

'python > 파이썬 for Beginner' 카테고리의 다른 글

파이썬 for Beginner Chapter 09  (2) 2019.04.28
파이썬 for Beginner Chapter 08  (4) 2019.04.28
파이썬 for Beginner Chapter 06  (0) 2019.04.15
파이썬 for Beginner Chapter 04  (3) 2019.04.08
파이썬 for Beginner Chapter 05  (2) 2019.04.08
댓글