본문 바로가기

배운 책들 정리/혼자 공부하는 파이썬

혼자 공부하는 파이썬 4 - 반복문(조건문 응용(if), dict, list, 이중for문, range, while문)

4장 반복문

1. 리스트와 반복문

1) for 반복문

a = [[1,2,3],[4,5,6],[7,8,9],10]
for i in a:
  if type(i) == list:
   for j in i:
    print(j)
  else:
      print(i)

이중 포문에 대한 이해 필요

 

2) append() 함수와 전개 연산자의 차이

append() : 파괴적 처리 (원본 수정 가능)전개 연산자 : 비파괴적 처리 (원본 수정 안 됨)

 

3) 문제 213p

* 1번부터 2번까지

# 문제 3-1번
numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]
for number in numbers:
    if number % 2 == 1:
        print(number, "는 홀수")
    else:
        print(number, "는 짝수")

* 3번 문제 // 홀수, 짝수, 자릿수 출력

 

* 4번 문제 // 리스트 함수에서 원하는 번호만 출력

0,1,2를 이해하기

0에 해당 하는 것만 뽑아라 

1에 해당 하는 것만 뽑아라

 

* 5번 문제 // 적절한 j값 입력하기 & 리스트의 특정 부분 제곱하기

# 문제 5번 # format 방법
numbers = [1,2,3,4,5,6,7,8,9]

for i in range(0, len(numbers) // 2):
  # // 는 반복 횟수를 의미함

# j가 1,3,5,7이 나오려면
# 어떤 식을 사용해야 할까요?
 j = i*2+1
 print("i={}, j={}".format(i,j))
# 왼쪽에 i를 넣으면 리스트 전체 제곱 
# j만 넣으면 j만 제곱
 numbers[j] = numbers[j] **2

print(numbers)

i에 있는 부분만 제곱 1234까지만

 

4) 딕서녀리와 반복문

* 생성부터 추가, 제거까지

* 딕셔너리의 문법 차이 (get과 일반적인 표현)

get을 사용하면 None라고 출력됨

 

 

5) 딕셔너리 문제 227p

* 1번~ 2번 문제

# 1번 문제 227p
dict_a = {
    "name" : "구름"
}
print(dict_a)
# 1-2번 문제 227p
dict_a = {
    "name" : "구름"
}
del dict_a["name"]
print(dict_a)
# 2번 문제
pets = [
    {"name": "구름", "age": 5},
    {"name": "초코", "age": 3},
    {"name": "아지", "age": 1},
    {"name": "호랑이", "age": 1}
]
print("# 우리 동네 애완 동물들")
for i in pets:
  print("{} {}살".format(i["name"],i["age"]))


# 출력 결과 구름 5살, 초코 4살, ...
# 2번 문제 (format 안쓰고)
pets = [
    {"name": "구름", "age": 5},
    {"name": "초코", "age": 3},
    {"name": "아지", "age": 1},
    {"name": "호랑이", "age": 1}
]
print("# 우리 동네 애완 동물들")
for i in pets:
  print(i["name"], str(i["age"])+"살")


# 출력 결과 구름 5살, 초코 4살, ...

 

* 3번

정렬 안한 상태로 출력
dict을 써서 정렬해서 표현

* 4번

# 문제 4번 chatgpt
# 조건
# type("문자열") is str
# type([]) is list
# type({}) is dict


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

# 사전 "문자"에서 각 키-값 쌍을 반복합니다
for key, value in character.items():
  # 키 값이 dict인지 확인합니다
    if isinstance(value, dict): # true,false를 반환하는 함수
    # 그렇다면 내부 사전의 각 키-값 쌍을 반복합니다
        for inner_key, inner_value in value.items():
          # 서식을 사용하여 내부 키 및 값 인쇄
            print("{} : {}".format(inner_key, inner_value))
    # 키 값이 목록인 경우
    elif isinstance(value, list):
      # 목록의 각 항목을 반복합니다
        for item in value:      
          # 서식을 사용하여 키 및 항목 인쇄
            print("{} : {}".format(key, item))
    
    # 키 값이 사전이나 목록이 아닌 경우
    else:
      # 서식을 사용하여 키 및 값 인쇄
        print("{} : {}".format(key, value))


# 출력결과
# name : 기사
# level : 12
# sowrd : 불꽃의 검
# armor : 풀플레이트
# skill : 베기
# skill : 세게 배기
# skill : 아주 세게 배기

character = {
    "name" : "기사",
    "level" : 12,
    "items" : { # 키를 가져 오는 것 (dict 값을 통해서 가져와야 함)
        "sword" : "불꽃의 검",
        "armor" : "풀플레이트"
    },
    "skill": ["베기", "세게 베기", "아주 세게 베기"]
}
# 사전의 키를 몇 번이고 반복합니다
for i in character:
  # 키와 관련된 값이 사전인 경우 // items - sowrd & items - armor
  if type(character[i]) is dict: # (딕셔너리 안의 요소가 딕셔너리인 경우)
    # 사전의 키와 값을 반복합니다
    for j in character[i]: # j는 dict의 키
      # 키와 값을 인쇄합니다
      print(j, ":", character[i][j])
  
  # 키와 연결된 값이 목록인 경우 (딕셔너리 안의 요소가 리스트인 경우) // skill
  elif type(character[i]) is list:
    # 목록의 항목을 반복합니다
    for k in character[i]:
      print(i,":",k) # k는 리스트 값
  # 키와 관련된 값이 사전이나 목록이 아닌 경우 (딕셔너리 안의 요소가 나머지인 경우) // name, level
  # 문자열인지 확인
  else: 
    print(i,":",character[i])


# 1. 경우가 몇개 있는지 확인하고 if를 생각한다
# 2. 경우를 설정할 때 마다 하위 카테고리의 이름(key)을 생각한다
# 3. 딕셔너리 - 리스트 - 나머지 순서로 생각
# 4. if에서 카테고리 생각 // for에서 키값 생각

6) 범위 자료형과 while 반복문

* range

range(A,B,C) : A는 시작번호, B는 끝번호, C는 간격

# 3) range(A,B,C) : A 시작번호 B 끝번호 C: 간격
for i in range(1,5,2): # 1,3
  print(i)

# 리스트와 범위를 함께 사용
a = [1,23,14,5,7]
for i in range(len(a)):
  print("{}번째 값: {}".format(i,a[i]))
for i in range(4,0-1,-2):
  print(i)
# 함수 이용
for i in reversed(range(5)):
  print(i)

 

7) 별표 예제

* 정방향 피라미드 1 (반만)

# 피라미드 만들기 1
a = ""
for i in range(1,9+1):
  for j in range(0,i):
    a += "*"
  a += "\n"
print(a)

* 반방향 피라미드 2 (반만)

# 피라미드 만들기 2
a = ""
for i in range(1,15):
  for j in range(i, 15):
    a += ' '
  for k in range(0,i*2-1):
    a+= "*"
  a+="\n"
print(a)

8) while문

# 상태를 기반으로 반복
# 리스트에 원하는 값이 있는 동안
a = [1,3,5,3,1,5,3]
value = 3
while value in a:
  a.remove(value)
print(a)

 

 

* 핵심

- for문,if문 이용해서 dict, list 사용법 숙지하기

 

 

* 링크 (직접 글 쓴 당사자만 확인 가능 // 계정 이동해서 확인하기)

 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST