while
vsfor
둘 다 비슷하지만, 상황에 따라 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
장점 : 간편하고 깔끔하다(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)
: 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["아빠"])
결과 → 홍길동
🌫️ 키 값이 문자열이어도 상관없다! !@
✔ 사전의 값들을 알고 싶어~! 목록을 출력하고 싶을 때.
👉 사전명.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를 쓰라고 하니....
시간이 좀 오래 걸렸다... 😭