ch 04. 반복문
04-1 리스트와 반복문
리스트란? 목록
#여러가지 자료를 저장할 수 있는 자료
#리스트 선언하고 요소에 접근하기
#리스트를 생성하는 방법은 대괄호에 자료를 쉼표로 구분해서 입력
#대괄호 내부에 넣는 자료 : 요소
#각각의 요소는 다음과 같은 형태로 저장 -> 일반적으로 현실에서는 숫자를 1부터 세지만
#문자열 때처럼 파이썬은 0부터 셈
리스트 기호인 (대괄호 [ ] ) 안에 들어간 숫자 : 인덱스
리스트의 특정 요소는 변경할 수도 있음
-
대괄호 안에 음수 넣어 뒤에서부터 요소 선택 가능
#음수를 넣어서 뒤에서부터 선택 가능
list_a = [2733,32,103,"문자열",True, False]
list_a[-1] -
리스트 접근 연산자를 다음과 같이 이중으로 사용할 수 있음
#list_a [3]을 지정하면 "문자열" list_a[3][0] 지정하면 "문자열"에서 다시 0번째 가져오기
list_a = [2733,32,103,"문자열",True, False]
list_a[3]
list_a[3][0] -
리스트 안에 리스트 사용 가능
list_a = [[1,2,3],[4,5,6], [7,8,9]]
list_a[1]
list_a[1][1]
(1). 리스트 연산자 : 연결(+), 반복(*), len()
#문자열과 리스트는 굉장히 비슷한 자료형, 사용할 수 있는 연산자와 함수 비슷
- 리스트 연산자
# 리스트 선언
list_a = [1,2,3]
list_b = [4,5,6]
# 선언된 리스트 출력
print("#리스트")
print("list_a =", list_a)
print("list_b=", list_b)
print()
# 기본연산자
# 문자열 연결 연산자 : +
print("# 리스트 기본 연산자")
print("list_a + list_b =",list_a + list_b )
# 문자열 반복 연산자 : *
print("list_a * 3 =", list_a * 3)
print()
# 함수
print("# 길이 구하기")
# len() 함수 : 문자열의 글자 수(=길이) 세어 줌,
# 리스트 변수를 넣으면 요소의 개수 세어줌
print("len(list_a) =", len(list_a))
(2). 리스트에 요소 추가하기 : append, insert
#append() : 리스트 뒤에 요소 추가
#list명.append(요소)
#insert() : 리스트 중간에 요소 추가
#list명.insert(위치, 요소)한번에 여러 요소 추가하고 싶을 때 : extend()
-> append() 함수를 세 번 반복 실행한 효과
list_a = [1,2,3] list_a.extend([4,5,6]) print(list_a) >> [1,2,3,4,5,6]
- extend() 함수를 사용하면 list_a에 직접적으로 영향을 줌
- 원본에 어떠한 영향도 주지 않는 것을 비파괴적
- append() , insert(), extend() 함수와 같이 리스트에 직접적인 영향을 주는 함수 또는 연산 : 파괴적
list_a = [1,2,3] list_b = [4,5,6] list_a.extend(list_b) list_a #list_b
(3). 리스트에 요소 제거하기
- 인덱스로 제거하기, 값으로 제거하기
-인덱스로 제거 : del(), pop()
요소의 위치를 기반으로 요소 제거하는 것
-del 리스트명[인덱스] - 리스트의 특정 인덱스에 있는 요소 제거
-리스트명.pop(인덱스) - 제거할 위치에 있는 요소 제거,
매개변수를 입력하지 않으면 마지막 요소 제거
# 리스트 연결 연산자와 요소 추가의 차이
list_a = [0,1,2,3,4,5]
print("# 리스트의 요소 하나 제거하기")
# 제거 방법 [1] - del
del list_a[1]
print("del list_a[1]:", list_a)
# 제거 방법[2] - pop
list_a.pop(2)
print("pop(2):", list_a)
- del
list_b = [0,1,2,3,4,5,6]
# 마지막 요소를 포함하지 않는다
del list_b[3:6]
list_b
# 범위의 한쪽을 입력하지 않으면 지정한 위치를 기준으로
한쪽을 전부 제거해버릴 수도 있습니다.
# [:3]을 지정하면 3 기준으로(3번째 불포함) 왼쪽 모두 제거
list_c = [0,1,2,3,4,5,6]
del list_c[:3]
list_c
- 값으로 제거하기(remove)
리스트 내부에 있는 2를 제거해주세요 처럼 값을 지정해서 제거하는 것을 말한다. 이때는 remove( ) 함수를 사용한다.
#리스트.remove(값)
# remove() 함수 사용
#지정한 값이 리스트 내부에 여러개가 있어도 가장 먼저 발견되는
하나만 제거한다.
list_c = [1,2,1,2] # 리스트 선언
list_c.remove(2) # 리스트 요소를 값으로 제거하기
list_c
모두 제거하기 : clear
#리스트 내부의 요소를 모두 제거할 때는 clear( ) 함수 사용
- 리스트.clear() list_d = [0,1,2,3,4,5] list_d.clear() list_d
(4). 리스트 내부에 있는지 확인하기: in/not in 연산자
- 리스트 내부에 있는지 확인하기
파이썬은 특정 값이 리스트 내부에 있는지
확인하는 방법 제공
in연산자 활용
[값 in 리스트]
list_a = [273, 32, 103, 57, 52]
273 in list_a
99 in list_a
# 내부에 값이 있으면 True, 없으면 False 출력
- not in 연산자
# 리스트 내부에 해당 값이 없는지 확인하는 연산자
list_a = [273, 32, 103, 57, 52]
# 273 notin list_a
99 not in list_a
(5). for 반복문
# 컴퓨터에 반복을 지시하는 방법
for i in range(100): #반복에 사용할 수 있는 자료
print("출력")
# range () : for반복문과 함께 많이 사용되는 범위 자료형
(6). for반복문 : 리스트와 함께 사용하기
# for 반복문 : 리스트와 함께 사용하기
# for 반복자 in 반복할 수 있는 것:
# 코드
# 리스트 선언합니다.
array = [273, 32, 103, 57, 52]
# 리스트에 반복문을 적용합니다.
for element in array:
# 출력합니다.
print(element)
# for문은 문자열을 함께 사용할 수 도 있습니다.
<마무리>
1.
# 100이상의 숫자만 출력하게 만들기
numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]
for number in numbers :
if number >= 100 :
print("- 100 이상의 수:", number)
numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]
for number in numbers:
if number % 2 ==0:
print(number, "는 짝수입니다.")
else :
print(number, "는 홀수입니다.")
# 자릿수 구하기 : len()
numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]
for number in numbers :
print(number, "는", len(str(number)), "자릿수입니다.")
list_of_list =[
[1,2,3],
[4,5,6,7],
[8,9],
]
# 실행결과를 세로로 하나하나 모두 출력
for line in list_of_list: # list_of_list을 line을 만듬
for item in line:
# line으로 만든(선) 의 하나의 아이템들을 하나씩 출력
print(item)
numbers = [1,2,3,4,5,6,7,8,9]
output = [[],[],[]]
for number in numbers :
output[(number+2)%3].append(number)
print(output)
04-2. 딕셔너리와 반복문
list : 인덱스 기반으로 값 저장하는 것
#인덱스 : 변수 =[]
#딕셔너리 : 키 기반으로 값을 저장하는 것
#인덱스 : 변수 ={}#딕셔너리 선언하기
#중괄호로 선언, 키:값 형태를 쉽표로 연결해서 만듬
#키는 문자열, 숫자, 불 등으로 선언
#문자열 사용하는 경우가 많음
(1).딕셔너리 선언하기
#생성
# 변수 = {
# 키:값,
# 키:값,
# 키:값
#}
dict_a ={
"name": "어벤저스 엔드게임",
"type":"히어로 무비"
}
print(dict_a)
(2). 딕셔너리 요소에 접근하기
# 특정 키 값만 따로 출력할 수도 있다.
# 딕셔너리를 선언할 때는 중괄호{} 사용, 딕셔너리의 요소에
접근할 때는 리스트처럼 딕셔너리 뒤에 대괄호[]를 입력하고
내부에 인덱스처럼 키를 입력한다.
dict_a["name"]
dict_a["type"]
dict_b ={
"director":["안소니 루소","조 루소"],
"cast":["아이언맨","타노스","토르","닥터스트레인지","헐크"]
}
print(dict_b)
dict_b["director"]
리스트 : list_a = [ ] // ex) list_a[1]
딕셔너리 : dict_a = { } // ex) list_a["name"]
# 딕셔너리의 요소에 접근하기
# 딕셔너리 선언
dictionary = {
"name": "7D 건조 망고",
"type": "당절임",
"ingredient" : ["망고", "설탕","메타중아황산나트륨","치자황색소"],
"origin" : "필리핀"
}
# 출력합니다.
print("name:" , dictionary["name"])
print("type:" , dictionary["type"])
print("ingredient:" , dictionary["ingredient"])
print("origin:" , dictionary["origin"])
print()
# 값 변경
dictionary ["name"] = "8D 건조 망고"
print("name:", dictionary["name"])
# ingredient : 리스트
# 특정 값 출력 가능
dictionary["ingredient"]
dictionary["ingredient"][1]
>> '설탕'
(3). 딕셔너리에 값 추가하기 /제거하기
# 추가 : 키를 기반으로 값 입력
# 딕셔너리[새로운 키] = 새로운 값
# 추가
dictionary["price"] = 5000
dictionary
dictionary["name"] = "8D 건조 파인애플"
dictionary
# 제거 - del()함수 사용
# 특정 키 제거
del dictionary["ingredient"]
dictionary
# 딕셔너리에 요소 추가
# 딕셔너리 추가
dictionary = {}
# 요소 추가 전에 내용 출력
print("요소 추가 이전:", dictionary)
# 딕셔너리에 요소 추가
dictionary["name"] = "새로운 이름"
dictionary["head"] = "새로운 정신"
dictionary["body"] = "새로운 몸"
# 출력합니다.
print("요소 추가 이후:", dictionary)
# 딕셔너리에 요소 제거하기
# 딕셔너리 선언
dictionary ={
"name": "7D 건조 망고",
"type": "당절임"
}
# 요소 제거 전에 내용을 출력해봅시다.
print("요소 제거 이전:", dictionary)
# 딕셔너리 요소 제거
del dictionary["name"]
del dictionary["type"]
# 요소 제거 후에 내용 출력
print("요소 제거 후:", dictionary)
(4). 딕셔너리 내부에 키가 있는지 확인하기
# in 키워드
#키가 존재하는지 확인하고 값에 접근하기
# 딕셔너리 선언
dictionary = {
"name" : "7D 건조 망고",
"type" : "당절임",
"ingredient" : ["망고", "설탕", " 메타중아황산나트륨","치자황색소"],
"origin" : "필리핀"
}
# 사용자로부터 입력을 받는다.
key = input(">접근하고자 하는 키 :")
# 출력합니다.
if key in dictionary:
print(dictionary[key])
else:
print("존재하지 않는 키에 접근하고 있습니다.")
- get() 함수
-존재하지 않는 키에 접근하는 상황에 대한
두 번째 대처 방법
-존재하지 않는 키에 접근하면 None을 출력# 키가 존재하지 않을 때 None을 출력하는지 확인하기 # 딕셔너리 선언 dictionary = { "name" : "7D 건조 망고", "type" : "당절임", "ingredient":["망고","설탕","메타중아황산나트륨","치자황색소"], "origin": "필리핀" } # 존재하지 않는 키에 접근해 봅시다 value = dictionary.get("존재하지 않는 키") print("값:", value) # None 확인방법 if value == None: # None과 같은지 확인하면 됨 print("존재하지 않는 키에 접근했었습니다.")
(5). for반복문: 딕셔너리와 함께 사용하기
- 딕셔너리 내부에 있는 키가 변수에 들어간다.
for 키 변수 in 딕셔너리
코드
# 딕셔너리 선언
dictionary={
"name": "7D 건조 망고",
"type": "당절임",
"ingredient":["망고","설탕","메타중아황산나트륨","치자황색소"],
"origin": "필리핀"
}
# for 반복문 사용
for key in dictionary:
# 출력합니다.
print(key,":", dictionary[key])
- 확인문제
2. # 딕셔너리와 히스트 선언
pets = [
{"name":"구름","age":5},
{"name":"초코","age":3},
{"name":"아지","age":1},
{"name":"호랑이","age":1}
]
print("# 우리 동네 애완 동물들")
# 숫자와 문자열 사이에 빈칸이 없게 출력하세요
for pet in pets:
print(pet["name"], str(pet["age"])+"살")
>> # 우리 동네 애완 동물들
구름 5살
초코 3살
아지 1살
호랑이 1살
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)
# 특정 값이 어떤 자료형인가?
# type("문자열") is str # 문자열인가?
# type([]) is list # 리스트인가?
# type({}) is dict # 딕셔너리인가?
#딕셔너리 선언
character = {
"name": "기사",
"level":12,
"item" : {
"sword":"불꽃의 검",
"armor":"풀플레이트"
},
"skill": ["베기","세게 베기","아주 세게 베기"]
}
# for 반복문 사용
for key in character:
if type(character[key]) is dict:
for small_key in character[key]:
print(small_key,":", character[key][small_key])
elif type(character[key]) is list:
for item in character[key]:
print(key,":", item)
else:
print(key,":", character[key])
>>
name : 기사
level : 12
sword : 불꽃의 검
armor : 풀플레이트
skill : 베기
skill : 세게 베기
skill : 아주 세게 베기
04-3 반복문과 while반복문
- for문과 함께 많이 사용되는 자료형 : 범위 (range)
특정한 횟수만큼 반복해서 돌리고 싶을 때는 for문과 범위를 조합해서 사용
(1).범위
- 매개변수에 숫자를 한 개 넣는 방법
0 ~ A-1 까지 정수로 범위 만듬
range(A) A: 숫자 - 매개변수에 숫자를 두 개 넣는 방법
A ~ B-1 까지 정수로 범위 만듬
range(A,B) - 매개변수에 숫자 세 개 넣는 방법
A부터 B-1까지의 정수로 범위를 만드는대 앞뒤의 숫자가 C만큼의 차이를 가진다.
range(A,B,C)
# 숫자 한개
a = range(5)
a
# list() 함수를 이용해 범위를 리스트로 변경하면 범위 내부에
어떤 값들이 들어 있는지 확인할 수 있다.
list(range(10))
# 숫자 2개
list(range(0,5)) # 0 ~ (5-1)의 범위
list(range(5,10)) # 5 ~ (10-1)의 범위
# 숫자 3개
list(range(0, 10, 2))
# 0부터 2씩 증가하면서 (10-1)까지의 정수로 범위 만듬
list(range(0, 10, 3))
# 0부터 3씩 증가하면서 (10-1)까지의 정수로 범위 만듬
# ***파이썬의 모든 기능들은 범위를 지정할 때 뒤에 입력한 숫자를
포함하지 않는다.
# 범위 만들때 매개변수 내부에 수식 사용
# 10을 반드시 포함 -> 강조
a = range(0, 10+1)
list(a)
# n = 10
# a = range(0, n/2)
# 매개변수에는 무조건 정수만 넣어야 함
a = range(0, int(n/2))
list(a)
a = range(0, n//2) # 정수 나누기 연산자 사용
list(a)
(2). for 반복문 : 범위와 함께 사용하기
# for문 : 범위와 함께 사용하기
# for 숫자 변수 in 범위:
# 코드
# for문과의 범위
# for문과 범위를 함께 조합하여 사용
for i in range(5):
print(str(i)+" = 반복 변수")
print()
for i in range(5, 10):
print(str(i) + "= 반복 변수")
print()
for i in range(0, 10, 3):
print(str(i)+"= 반복 변수")
print()
(3). for 반복문: 리스트와 범위 조합하기
- 몇 번째 반복일까?
#리스트 선언
array = [273, 32,103, 57, 52]
#리스트에 반복문 적용
for element in array :
# 출력합니다.
print(element)
#현재 무엇을 출력하고 있는지 보다, 몇번째 출력인지
알아야 하는 경우가 있다.
# 리스트와 범위 조합하여 사용하기
# 리스트 선언
array = [273, 32, 103, 57, 52]
# 리스트에 반복문 적용 - len() 함수 사용
# 리스트 array 반복(길이 얼만큼?)
for i in range(len(array)):
# 출력합니다.
print("{}번째 반복 : {}".format(i, array[i]))
(4). for 반복문 : 반대로 반복하기
# 반대로 반복
# 작은 숫자 -> 큰 숫자
# 역반복문도 적용해야하는데
# 첫번째 방법은 range() 함수 사용
# 역반복문
# for i in range(4, 0, -1): # 0은 안나옴
for i in range(4, 0-1, -1): # 0까지 나옴
# 0까지 반복하고 싶어서 이 코드를 사용했어 ( 강조 )
# 출력합니다.
print("현재 반복 변수 : {}". format(i))
>> 현재 반복 변수 : 4
현재 반복 변수 : 3
현재 반복 변수 : 2
현재 반복 변수 : 1
현재 반복 변수 : 0
# reversed()
# 역반복문
for i in reversed(range(5)):
# 출력합니다.
print("현재 반복 변수 :{}".format(i))
# [0,1,2,3,4] 라는 형태의 범위가 반대로 뒤집어짐
# 9~0 까지 반대로 반복문을 돌릴 수 있음
# 리스트에도 적용 가능
# 매개변수에 리스트 넣는 경우, 딕셔너리 넣는 경우,
범위 넣는 겨우로 구분하여 생각해보기
(5). while 반복문
# 리스트 또는 딕셔너리 내부의 요소를 모두 순회하는 경우
# 특정 횟수만큼 반복하는 경우 : for문 사용
# while 불 표현식:
# 문장
# 불 표현식이 참인 동안 문장 계속 반복
# while 반복
while True:
# "." 출력
# 기본적으로 end가 \n 이라 줄바꿈 일어남
# 빈 문자열 ""로 바꿔서 줄바꿈이 일어나지 않게 함
print(".", end="")
1. for 반목문처럼 사용하기
# 반복 변수 기반으로 반복
i = 0
while i <10:
print("{}번째 반복입니다.".format(i))
i += 1
-----------------------------
2. 상태를 기반으로 반복하기
# for 문 : 무한반복 x
# while : '조건', 조건활용 -> 반복 (o)
# while 반복문 : 상태 기반으로 반복
# remove() : 리스트 내부에서 해당하는 값 하나만 제거 가능
# while을 사용하면 여러 개 제거 가능
# 변수선언
list_test = [1,2,1,2]
value = 2
# list_test 내부에 value가 있다면 반복
while value in list_test:
list_test.remove(value)
# 출력합니다.
print(list_test)
-----------------------------
3.시간을 기반으로 반복하기
# 시간
import time
time.time()
# 유닉스 타임과 while 반복문과 조합하면 특정 시간 동안 프로그램 정지시킬 수 있음
# 5초동안 반복
# 시간과 관련된 기능 가져오기
import time
# 변수 선언
number = 0
# 5초 동안 반복
target_tick = time.time()+5
while time.time() < target_tick:
number += 1
# 출력합니다.
print("5초동안 {}번 반복했습니다.".format(number))
-----------------------------
4. while 반복문 : break 키워드 / continue 키워드
# 반복문 내부에서만 사용할 수 있는 break와
continue라는 특수한 키워드가 있다.
# break키워드 : 반복문 벗어날 때 사용
# break 키워드
# 변수 선언
i = 0
# 무한 반복
while True:
# 몇 번째 반복인지 출력
print("{}번째 반복분입니다.".format(i))
i = i+1
# 반복을 종료합니다.
input_text = input("> 종료하시겠습니까?(y): ")
if input_text in ["y","Y"]:
print("반복을 종료합니다.")
break
-----------------------------
5. continue 키워드
# 변수 선언
numbers = [5, 15, 6, 20, 7, 25]
# 반복을 돌립니다.
for number in numbers :
# number가 10보다 작으면 다음 반복으로 넘어갑니다.
if number <10:
continue # 현재 반복 중지 다음 반복으로 넘어감
# 출력합니다.
print(number)
# 처음부터 반복에 조건을 걸고 사용하고 싶을 때 continue 키워드를
사용하면 이후 처리의 들여쓰기를 하나 줄일 수 있습니다.
# continue 키워드 사용x
for number in numbers:
# 반복 대상 한정합니다.
if number >= 10:
# 문장
# 문장
# 문장
# 문장
# continue 키워드를 사용한 경우
# 반족을 돌린다.
for number in numbers :
# 반복 대상에서 제외해버립니다.
if number < 10:
continue
# 문장
# 문장
# 문장
# 문장
# 확인문제
# 1. 하나의 딕셔너리 만들기
key_list = ["name","hp","mp","level"]
value_list = ["기사", 200, 30, 5]
character = {}
for i in range (0, len(key_list)): # 길이
character[key_list[i]] = value_list[i]
# 최종 출력
print(character)
>>> {'name': '기사', 'hp': 200, 'mp': 30, 'level': 5}
# 2. 1부터 하나씩 증가시키면서 더하는 경우 생각해보기
# 몇을 더할 때 1000을 넘는가?
# 그때의 값?
# 1000이 넘는 경우를 구한 예
limit = 10000
i = 1
sum_value = 0
while sum_value < limit:
sum_value += i
i += 1
print("{}를 더할 때 {}을 넘으며 그때의 값은
{}입니다.".format(i, limit, sum_value))
>>> 142를 더할 때 10000을 넘으며 그때의 값은 10011입니다.
# 몇을 더해야 1000이 넘을까?
limit = 1000
i = 1
sum_value = 0
while sum_value < limit :
sum_value += i
i += 1
print("{}를 더할 때 {}을 넘으며 그때의 값은 {}입니다.".format(i-1,limit, sum_value))
>>> 45를 더할 때 1000을 넘으며 그때의 값은 1035입니다.
# 3. 1~ 100까지의 숫자가 있다고 하자
# 최대가 되는 경우는 어떤 숫자를 곱했을 때인지 찾아주세요
# 반복문을 사용해서 모든 경우를 찾는 방법으로 풀어보기
max_value = 0
a = 0
b = 0
for i in range(1, 100//2 + 1):
j = 100-i
# 최댓값 구하기
current = i * j
if max_value < current:
a = i
b = j
max_value = current
# 출력하기
print("최대가 되는 경우: {} * {} = {}".format(a,b,max_value))
Author And Source
이 문제에 관하여(ch 04. 반복문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yy9356/ch-04.-반복문저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)