혼공파

혼공파 3주~~🫡🫡

오쟝 2023. 7. 17. 15:07

 

<리스트>

여러가지 자료를 저장할 수 있는 자료, 즉 독립적인 자료들을 모아서 사용할 수 있게 해주는 특별한 형태의 자료를 말합니다.

리스트는 한 가지 자료형으로도, 여러가지 자료형으로도 구성할 수 있습니다.

리스트는 0번째부터 세고, [  ] 안에 들어있는 숫자를 인덱스, 리스트를 구성하는 자료들을 요소라고 부릅니다.

리스트의 인덱스에 [1:3]과 같이 넣어주면 1번째 이상, 3번째 미만의 값들이 출력이 되고, 리스트의 각 요소는 변경이 가능합니다.

  • 리스트의 기능

대괄호 안에 음수를 넣어 뒤에서부터 요소 선택 가능!

리스트 접근 연산자를 이중으로 사용 가능!

리스트의 3번째에 있는 문자열의 0번째 출력하기

리스트 안에 리스트 사용 가능! (2차원 배열)

리스트의 0번째 [1,2,3], 리스트의 2번째 리스트의 2번째 9 출력

** 리스트의 길이보다 더 긴 인덱스로 요소에 접근하려고 하면 IndexError 오류가 난다!!! 

 

  • 리스트 연산자

+ : 연결

* : 반복

len() : 길이 구하기

 

  • 리스트에 요소 추가하기

append() : 리스트의 마지막에 요소 추가

insert() : 원하는 위치에 요소 추가         

extend() : 한 번에 리스트의 마지막에 여러가지 요소 추가                           

*** 리스트명.append(요소)                                           

*** 리스트명.insert(위치, 요소)

*** 리스트명.extend([요소1, 요소2, 요소3])

리스트의 마지막에 6 추가, 리스트의 1번째 위치에 2 추가, 리스트의 마지막에 한 번에 7, 8, 9 추가

  • 요소 제거하기

del : 인덱스 값에 있는 요소 제거

pop() : 인덱스 값에 있는 요소 제거, 인덱스 값을 지정하지 않으면 맨 마지막 값 제거

***   del 리스트명[인덱스]

*** 리스트명.pop(인덱스)

리스트의 0번째 제거, 리스트의 1번째 제거, 리스트의 맨 마지막 제거

** del에서 범위를 지정해 한 번에 여러가지 요소 제거가 가능~! 

 

  • 값으로 제거하기

remove() : remove에 들어있는 값과 같은 첫 번째의 값 제거

*** 리스트명.remove(값)

첫 번째 2를 제거, 뒤에 있는 2는 제거 X

  • 전체 제거하기

clear() : 리스트 내부 요소 전체 제거

*** 리스트명.clear()

  • 리스트 정리하기

sort() : 리스트를 오름차순으로 정리

*** 리스트명.sort()

  • 리스트 안에 요소가 있는지 확인하기 -> True 또는 False

in : 리스트 안에 요소가 있는지

not in : 리스트 안에 요소가 없는지

*** 값 in 리스트명 / 값 not in 리스트명

 

<반복문>

*** for 반복자 in 반복할 수 있는 것:

         반복할 코드

"안녕"이라는 문자열을 5번 반복

 

글자 하나하나에 반복문 적

  • 리스트와 반복문 같이 사용하기

a 리스트에 있는 값들을 i에 하나씩 넣어주고, i 출력

  • 중첩 리스트와 중첩 반복문

a의 리스트들을 items에 넣음 -> 3번 반복

items에 있는 리스트들을 item 변수에 넣음 -> 각 3번씩

items 출력 -> 각 리스트가 3번씩 출력

item 출력 -> 1부터 9까지 출력

 

  • 전개 연산자

* : 리스트의 0번째부터 끝까지 표현하는 것과 같은 효과

 *** *리스트명

 

chapter 4-1 확인 문제

선택 미션

1. list_a = [0,1,2,3,4,5,6,7]입니다. 다음 표의 함수들을 실행했을 때 list_a의 결과가 어떻게 나오는지 적어 보세요.

-> [0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]

-> [0,1,2,3,4,5,6,7,10]

-> [0,1,2,0,3,4,5,6,7]

-> [0,1,2,4,5,6,7]

-> [0,1,2,3,4,5,6,7]

-> []

 

2. 다음 반복문 내부에 if 조건문의 조건식을 채워서 100 이상의 숫자만 출력하게 만들어 보세요. if 조건문과 for 반복문을 조합하는 코드는 굉장히 많이 사용합니다.

numbers = [279, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
	if number>100:
		print("- 100 이상의 수: ", number)

 

3. 다음 빈칸을 채워서 실행 결과에 해당하는 프로그램들을 완성해 보세요.

numbers = [279, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
    if number%2==0:
        print(number,"는 짝수입니다.")
    else:
        print(number,"는 홀수입니다.")
numbers = [279, 103, 5, 32, 65, 9, 72, 800, 99]

for number in numbers:
        print(number,"는",len(str(number)),"자릿수입니다.")

 

4. 다음 코드의 빈칸을 채워서 실행 결과처럼 출력되도록 완성해 보세요.

numbers = [1,2,3,4,5,6,7,8,9]
output = [[],[],[]]

for number in numbers:
    output[number%3].append(number)
    
print(output)

 

5. 다음 코드의 빈칸을 채워서 실행 결과처럼 출력되도록 완성해 보세요. 짝수 번째 요소를 제곱하는 것입니다.

numbers = [1,2,3,4,5,6,7,8,9]

for i in range(0, len(numbers) // 2): #0부터 8까지
    j = i*2+1
    print(f"i = {i}, j = {j}")
    numbers[j] = numbers[j]**2
    
print(numbers)

 

<딕셔너리>

딕셔너리는 값과 값에 키를 붙여서 저장하는 것입니다.

*** 변수 = {

              "키1" : 값,

              "키2" : 값,

              "키3" : 값

                 }

딕셔너리의 요소는 키의 이름으로 접근할 수 있고, 리스트로도 저장할 수 있습니다.

딕셔너리의 요소도 변경이 가능합니다.

  • 딕셔너리에 값 추가하기

딕셔너리는 키를 기반으로 값을 입력하면 추가할 수 있습니다.

*** 딕셔너리[새로운 키] = 값

  • 딕셔너리의 값 제거하기

딕셔너리는 리스트와 마찬가지로 del로 특정 키를 지정해서 제거할 수 있습니다.

*** del 딕셔너리[키]

  • in 키워드

리스트와 마찬가지로 딕셔너리도 in 키워드로 딕셔너리 내부에 키가 있는지 확인할 수 있습니다.

  • for 반복문과 딕셔너리

*** for 키 변수 in 딕셔너리:

          실행할 코드

 

chapter 4-2  확인 문제

1. 다음 표에서 dict_a의 결과가 나오도록 빈칸을 채워보세요.

-> dict_a["name"] = "구름"

-> del dict_a["name"]

 

2. 딕셔너리와 리스트를 조합하면 다음 코드의 변수 pets처럼 다양한 정보를 축적할 수 있습니다. 이를 실행 결과처럼 출력되도록 빈칸에 반복문과 print() 함수를 조합해 보세요.

pets = [
    {"name" : "구름", "age": 5},
    {"name" : "초코", "age": 3},
    {"name" : "아지", "age" : 1},
    {"name" : "호랑이", "age" : 1}
]
print("# 우리 동네 반려 동물들")
for i in pets:
    print(i["name"], i["age"], "살")

3. 다음 빈칸을 채워서 numbers 내부에 들어 있는 수자가 몇 번 등장하는지를 출력하는 코드를 작성해 보세요.

numbers = [1,2,6,8,4,3,2,1,9,5,4,9,7,2,1,3,5,4,8,9,7,2,3]
counter = {}

for number in numbers:
    if number in counter:
        counter[number] = counter[number] + 1
    else:
        counter[number] = 1
        
print(counter)

4.

character = {
    "name": "기사",
    "level": 12,
    "items" : {
        "sword" : "불꽃의 검",
        "armor" : "풀플레이트"
    },
    "skill" : ["베기", "세게 베기", "아주 세게 베기"]
}

for key in character:
    if type(character[key]) is list:
        for i in character[key]:
            print(key,":", i)
    elif type(character[key]) is dict:
        for item in character[key]:
            print(item,":", character[key][item])
    else:
        print(key,":",character[key])

 

<범위 자료형>

정수로 이루어진 범위는 range(  )로 만듭니다.

 

1. 매개변수에 숫자를 한 개 넣는 방법

*** range(숫자)

0부터 숫자-1까지의 범위를 만듭니다.

 

2. 매개변수에 숫자를 두 개 넣는 방법

*** range(숫자1, 숫자2)

숫자1부터 숫자2-1까지의 범위를 만듭니다.

 

3. 매개변수에 숫자를 세 개 넣는 방법

*** range(숫자1, 숫자2, 숫자3)

숫자 1부터 숫자2-1까지의 범위를 만들고, 숫자 3만큼의 차이를 가집니다.

 

** 매개변수 자리에는 무조건 정수가 들어가야하기 때문에 나눗셈은 들어갈 수 없습니다~!! 그래서 나눈 값을 int(   )를 사용해서 정수로 바꾸어 주거나, // 정수 나누기 연산자를 사용합니다~~ 

 

  • for 반복문과 범위

리스트와 범위를 조합해서 반복문 사용하기~!

1. 몇 번째 출력인지 알고 싶을 때는 range(len(  ))를 사용하면 됩니다~!

2. 반대로 반복하고 싶을 때는 range(  ) 함수의 매개변수를 세 개 사용할 수 있습니다~

5부터 -1까지 -1씩 증가 -> 5, 4, 3, 2, 1

3. 반대로 반복하고 싶을 때는 reversed(  ) 함수를 사용할 수 있습니다~~

 

<반복문으로 피라미드 만들기>

직각 피라미드 만들기
이등변 피라미드 만들기

 

<while 반복문>

while 반복문은 조건이 참인 동안 문장을 반복합니다. 

*** while 불 표현식:

          문장

 

1. for 반복문처럼 사용하기

2. 상태를 기반으로 사용하기

array에 2가 있는 동안 반복, array의 2를 제거

3. 시간을 기반으로 반복하기

time.time()은 유닉스 타임을 기준으로 몇 초가 지나 있는지를 정수로 표현하고, target_tick은 이런 time.time()보다 5 앞서니 while문을 사용해 '5초 동안'을 표현하는 것이 가능합니다~!

 

<break>

break는 반복문을 벗어날 때 사용하는 키워드입니다. 보통 무한 반복문 속에 넣어 사용합니다.

<continue>

continue는 특정 반복을 생략하고 다음 반복문으로 넘어갈 때 사용하는 키워드입니다. 

이렇게 홀수인 수는 건너뛴 것을 볼 수 있습니다!!!~

 

chapter 4-3 확인 문제

1. 다음 표를 채워 보세요. 코드가 여러 개 나올 수 있는 경우 가장 간단한 형태를 넣어 주세요.

-> [4, 5]

-> [7, 6, 5, 4, 3, 2, 1]

-> range(3, 10, 3)

 

2. 빈칸을 채워 키와 값으로 이루어진 각 리스트를 조합해 하나의 딕셔너리를 만들어 보세요.

key_list = ["name", "hp", "mp", "level"]
value_list = ["기사", 200, 30, 5]
character = {}

for i in range(len(key_list)):
    character[key_list[i]] = value_list[i]

print(character)

 

3. 1부터 숫자를 하나씩 증가시키면서 더하는 경우를 생각해 봅시다. 몇을 더할 때 1000을 넘는지 구해 보세요. 그리고 그때의 값도 출력해 보세요.

limit = 1000
i = 1
sum_value = 0

while True:
    if sum_value > limit:
        break
    else:
        sum_value += i 
        i = i + 1
print("{}를 더할 때 {}을 넘으며 그때의 값은 {}입니다.".format(i-1, limit, sum_value))

 

4. 1부터 100까지의 숫자가 있다고 합시다. 이를 다음과 같이 계산한다고 했을 때, 최대가 되는 경우는 어떤 숫자를 곱했을 때인지를 찾아 주세요.

max_value = 0
a = 0
b = 0

for i in range(100):
    j = 100 - i
    
    if i * j > max_value:
        a = i
        b = j
        max_value = i * j
        
print("최대가 되는 경우 : {} * {} = {}".format(a, b, max_value))

 

<리스트에 적용할 수 있는 함수>

min() : 리스트 내부에서 최소값 찾기

max() : 리스트 내부에서 최댓값 찾기

sum() : 리스트 내부에서 값 모두 더하기

*** min/max/sum(리스트명)

reversed() : 리스트 뒤집기

*** reversed(리스트명)

** 그냥 reversed(리스트명)하면 리스트가 뒤집어지기만 하기 때문에 list()로 묶어주거나 새로운 리스트에 넣어줘야함~~!

** reversed()의 결과는 제너레이터이기 때문에 함수의 결과를 여러번 사용하지 않고 함수의 결과를 곧바로 사용해주기~

 

enumerate() : 함수와 반복문 조합하기, 몇 번째인지 알려줌

*** enumerate(리스트명)

enumerate() 함수로 몇 번째인지와 값으로 리스트 만들기
반복문에 반복 변수를 두 개 넣을 수 있고 enumerate()와 사용하면 첫 번째 반복변수에 몇 번째인지, 두 번째 반복변수에 값이 들어갑니다~~

 

<딕셔너리에 적용할 수 있는 함수>

items() : enumerate 함수와 같이 키와 값을 조합하기

key에 키 값이 들어가고, value에 값이 들어가게 하는 items() 함수~~~!!!

 

<리스트 내포>

리스트를 활용한 반복문과 조건문을 한 줄로 변경하는 것

*** 리스트명 = [최종 결과 for 변수 in 반복할 수 있는 것 if 조건문]

반복문을 한 줄로 변경~
반복문과 조건문을 한 줄로 변경~~

 

<문자열 연결하는 방법>

1. 괄호로 연결한다~!

2. \n을 사용해서 연결한다~!

3. join() 함수를 사용한다~!

*** "사이에 넣을 문자(::)".join["문자열", "문자열1", "문자열2"]

--> 문자열::문자열1::문자열2

 

chapter 4-4 확인 문제

1. 다음 중 enumerate() 함수와 itmes() 함수의 사용법으로 올바른 것은?

②,③

 

2. 이를 활용해서 1~100 사이에 있는 숫자 중 2진수로 변환했을 때 0이 하나만 포함된 숫자를 찾고, 그 숫자들의 합을 구하는 코드를 만들어 보세요.

output = [i for i in range(0, 100 + 1) if "{:b}".format(i).count("0") == 1]

for i in output:
    print("{} : {}".format(i, "{:b}".format(i)))
print("합계 : ",sum(output))

 

chapter 4-4 도전 문제

1.

array = [1,5,1,4,6,3,1,6,2,4,5]
dict = {}
for i in array:
    if i in dict:
        dict[i] += 1
    else:
        dict[i] = 1

print(f"{array}에서 사용도니 숫자의 종류는 {len(dict)}개입니다.\n참고:{dict}")

 

2. 

dna = input("염기 서열을 입력해주세요: ")
a = 0
t = 0
g = 0
c = 0

for i in dna:
    if 'a' == i:
        a += 1
    elif 't' == i:
        t += 1
    elif 'g' == i:
        g += 1
    elif 'c' == i:
        c += 1
print(f"a의 개수 : {a}\nt의 개수 : {t}\ng의 개수 : {g}\nc의 개수 : {c}")

 

3.

dna = input("염기 서열을 입력해주세요: ")
dict = {}

for i in range(0, len(dna), 3):
    if dna[i:i+3] in dict:
        dict[dna[i:i+3]] += 1
    else:
        if len(dna[i:i+3]) < 3:
            continue
        else:
            dict[dna[i:i+3]] = 1
        
print(dict)

 

4.

a = [1,2,[3,4],5,[6,7],[8,9]]
b = []

for i, value in enumerate(a):
    if type(a[i]) == list:
        for k in value:
            b.append(k)
    else:
        b.append(value)

print(b)

 

\^o^/ 이번주 혼공파도 성공~~~ \^o^/

'혼공파' 카테고리의 다른 글

혼공파 6주차..!  (0) 2023.08.16
혼공파 5주차!!! 😋  (0) 2023.08.06
혼공파 4주차~😁  (0) 2023.07.25
혼공파 2주차~😊  (0) 2023.07.11
혼공파 1주차~🤓  (0) 2023.07.10