[python] For문, range, 사전 dictionary

May·2022년 6월 19일
0

python_기초

목록 보기
7/11

🤗 For 반복문

while vs for

둘 다 비슷하지만, 상황에 따라 for문이 더 깔끔할 수 있다

<구조>

 for 변수 in 리스트(또는 문자열 ...):
 	명령문(실행하고 싶은 애들)
    ...

👉 while 문과 다른 점 : 조건부분이 없음!

예시

my_list = [2, 3, 5, 7, 10]for num in my_list:  
   #(ㄴ내가 지정해주고 싶은 변수)print(num)

① my_list에 있는 0번 인덱스의 숫자 2가 for 옆 num 변수에 지정
(여기 num 변수는 리스트 요소를 꺼내기 위한 변수임)
② 명령문 수행 → 2 출력
in my_list → 이 리스트의 마지막 요소까지 계속 반복하다 끝남

결과

2
3
5
7
10

🤗 range 함수

장점 : 간편하고 깔끔하다(for문에 들어가는 긴 리스트를 직접 만들지 않아도 됨),
메모리를 효율적으로 사용 가능

✌ 파라미터 2개 버전

for a in range(start, stop):
	print(a)
    
👉 start 부터 stop-1 까지의 범위

for a in range(3, 11)  # 3부터 10까지의 범위
  # = in [3, 4, 5, 6, 7, 8, 9, 10]
	print(a)

👆 파라미터 1개 버전

for a in range(stop):
	print(a)

👉 0부터 stop-1 까지의 범위

for a in range(10):  # 0부터 9까지의 범위
	print(a)

🤟 파라미터 3개 버전

for a in range(start, stop, step):
	print(a)
   
👉 start부터 stop-1 까지의 범위, 간격 step만큼

for a in range(3, 17, 3):  # 3부터 16까지의 범위, 간격은 3으로!
	# = in [3, 6, 9, 12, 15]
    print(a)

🤗 사전(dictionary)

: key - value pair (키-값 쌍)

구조

사전명 = {
	5: 25,
    2: 4,
    3: 9
    }
    
5: 25 , → 한 쌍
-  -- -
키  값 콤마로 구분

💛 중괄호로 열고 닫으면 사전 생성된다! 들여쓰기 주의~!
💛 사전을 그대로 출력시키면 중괄호까지 같이 포함되어 출력됩니닷~!

type 확인해보면? <class 'dict'> (사전 자료형) 으로 출력됨

✔ 사전의 값을 받아오려면 인덱싱 하듯이 👉 사전명[ ]
대괄호 안에 키를 적어주면 된다!

예시

my_dictionary = {
	5: 10,
    2: 4,
    3: 6
    }

print(my_dictionary[2])  # 키 '2'의 값을 출력해주세요

결과

4

✔ 사전에 새로운 쌍 추가시 👉 사전명[키] = 값

my_dictionary = {
	5: 10,
    2: 4,
    3: 6
    }

my_dictionary[4] = 8  # 키 4에 값이 8인 쌍 추가해주세요~~
print(my_dictionary)

결과

{5: 10, 2: 4, 3: 6, 4: 8}
					---- 쌍이 추가되었음을 볼 수 있다!

✔ 사전이 리스트와 다른 점!
리스트 : 인덱스 번호가 0, 1, 2, 3 ... 순서대로 진행
사전 : 원하는 키 값을 지정해서 값을 출력할 수 있음.
순서라는 개념이 없고, 키가 꼭 정수형일 필요가 없음!

my_family = {
	"엄마": "김길동",
    "아빠": "홍길동",
    "딸": "홍길서",
    "아들": "홍동길"
    }

print(my_family["아빠"])

결과 → 홍길동
🌫️ 키 값이 문자열이어도 상관없다! !@

🤗 사전 tip

✔ 사전의 값들을 알고 싶어~! 목록을 출력하고 싶을 때.
👉 사전명.values()

my_family = {
	"엄마": "김길동",
    "아빠": "홍길동",
    "딸": "홍길서",
    "아들": "홍동길"
    }
    
print(my_family.values())
				-------- → 값의 전체 목록 출력

결과

dict_values(['김길동', '홍길동', '홍길서', '홍동길'])

✔ 사전의 값중에 'a'가 있는 지 알고싶어~!
👉 'a' in 사전명.values()

my_family = {
	"엄마": "김길동",
    "아빠": "홍길동",
    "딸": "홍길서",
    "아들": "홍동길"
    }
    
print('홍길서' in my_family.values())  # my_family의 값 중에 '홍길서'가 있니??

결과 → True (있으니까!)

✔ 반복문 활용

my_family = {
	"엄마": "김길동",
    "아빠": "홍길동",
    "딸": "홍길서",
    "아들": "홍동길"
    }

for value in my_family.values():  # my_family 사전의 값을 
								  # 값 목록 끝까지 value 값에 반복해서 리턴해줌
	print(value)

결과

김길동
홍길동
홍길서
홍동길

✔ 사전의 키 목록을 알고 싶을때 👉 사전명.keys()

my_family = {
	"엄마": "김길동",
    "아빠": "홍길동",
    "딸": "홍길서",
    "아들": "홍동길"
    }

print(my_family.keys())

결과

dict_keys(['엄마', '아빠', '딸', '아들'])

✔ 사전의 키, 값 쌍을 출력하고 싶을 때!
1) key 값을 먼저 받고 그 키를 통해서 값을 받음

my_family = {
	"엄마": "김길동",
    "아빠": "홍길동",
    "딸": "홍길서",
    "아들": "홍동길"
    }

for key in my_family.keys():  # 처음 값 ~ my_family의 마지막 키값을 변수 key에 넣어줌 
	value = my_family[key]  # my_family[key] = my_family 사전의 키에 해당하는 값을 value 변수에 저장
	print(key, value)  # key와 그 쌍인 value 값 출력

결과

엄마 김길동
아빠 홍길동
딸 홍길서
아들 홍동길

2) 한번에 키, 값 받기! 👉 사전명.items() (메소드)

my_family = {
	"엄마": "김길동",
    "아빠": "홍길동",
    "딸": "홍길서",
    "아들": "홍동길"
    }

for key, value in my_family.items():   # key 옆에 변수 value를 추가하면 
									   # 키, 값 모두 받을 수 있음
	print(key, value)

결과

엄마 김길동
아빠 홍길동
딸 홍길서
아들 홍동길

🤗 문제

문제.... 후
문제를 무척이나 풀기 힘들었던 모양.... ㅠ

🎃 피타고라스 삼조 구하기
(조건 : a < b < c 라고 가정할 때, a+b+c=400을 만족)

처음엔 단순하게 아 요래 하면 되것지~

for a in range(1, 400):
    for b in range(1, 400):
        for c in range(1, 400):
            if a ^ 2 + b ^ 2 == c ^ 2 and a < b < c and a + b + c == 400:
                print(a * b * c)

그래도 답이 안나왔다

2번째 힌트를 보고 또 보고 보고보고보고 ... 이 힌트를 어떻게 활용해야 할까? 생각을 엄청 했다

for c에 대해서 없애고 두번째 힌트 c = 400 - a - b 를 그냥 넣어보자! 했다

for a in range(1, 400):
    for b in range(1, 400):
        c = 400 - a - b
        if (a < b < c) and (a ^ 2 + b ^ 2 == c ^ 2):
            print(a * b * c)

그래도 답이 안나왔다
a²+b²=c²을 표현하려고 ^를 썼는데 이게 문제였다
거듭제곱의 기호는 ** 이다^^,,, 나는 증말 바보야^^

for a in range(1, 400):
    for b in range(1, 400):
        c = 400 - a - b
        if a * a + b * b == c * c and a < b < c:
            print(a * b * c)

a*a b*b c*c 이렇게 표현해주니까 정답이 나왔다...,, 😮‍💨 에휴

🎃 for문 사용하여 리스트 뒤집기

🤬🤬🤬🤬🤬🤬🤬🤬🤬🤬🤬🤬

numbers = [2, 3, 5, 7, 11, 13, 17, 19]

# 리스트 뒤집기

# for i in range(len(numbers)):
#    if i  (len(numbers)/2):
#       numbers[i] = numbers[(len(numbers)-1)-i]

#for i in range(len(numbers)):
#    chan_num = []
#    chan_num.append(numbers[(len(numbers)-1)-i])
    
#    numbers = chan_num
    
#print("뒤집어진 리스트: " + str(numbers)) 

수많은 시도들.....
수정을 해도 [2, 3, 5, 7, 7, 5, 3, 2] 아니면 [19, 17, 13, 11, 11, 13, 17, 19]
절반만 뒤집어서 나오니^^,,,,,,

힌트를 한 수백번 봐야 ... 뭔가 답이 나왔다 ㅠㅠ

for left in range(int(len(numbers)/2)):
    right = len(numbers)- left - 1  # 인덱스 left와 대칭인 인덱스 right 계산
    numbers[right], numbers[left] = numbers[left], numbers[right] 
    
print("뒤집어진 리스트: " + str(numbers))

sort함수 쓰려고 했는데... for를 쓰라고 하니....
시간이 좀 오래 걸렸다... 😭

profile
ฅ˘◡˘ฅ

0개의 댓글