리스트를 조합해 하나의 딕셔너리로 만들기
key_list = ["name", "hp", "mp", "level"]
value_list = ["기사", 200, 30, 5]
character = {}
print(character)
| 실행결과 |
|---|
| {'name': '기사', 'hp': 200, 'mp': 30, 'level': 5} |
📝 정답
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)
보기로 준 두 리스트의 길이가 같기 때문에 길이로 범위를 정해서 반복문을 돌리면 된다. character[key_list[i]] 는 딕셔너리 character 안에 키를 넣는 부분이고, value_list[i]는 키 값을 넣는다고 생각하면 된다.
1부터 숫자를 하나씩 증가시키면서 더하는 경우, 몇을 더할 때 1000을 넘는지와 그때의 값을 출력하기
ex) 1, 1 + 2 = 3, 1 + 2 + 3 = 6, ...
# 10000이 넘는 경우를 구한 예시
limit = 10000
i = 1
print("{}를 더할 때 {}을 넘으며 그때의 값은 {}입니다.".format(i-1, limit, sum_value))
| 실행결과 |
|---|
| 141를 더할 때 10000을 넘으며 그때의 값은 10011입니다. |
📝 정답
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입니다. |
몇 번을 반복하면 되는지 알고 있는 경우엔 for문, 지금 문제처럼 얼마나 반복해야 할 지 모를 땐 while문 사용.
sum_value가 limit보다 작을 때까지 반복하는 거라 limit보다 커지는 순간 반복종료 후, 출력.
1~100의 숫자를 다음과 같이 계산한다고 했을 때, 값이 최대가 되는 경우의 숫자를 구하기
ex) 1 x 99, 2 x 98, 3 x 97, 4 x 96 ... 98 x 2, 99 x 1
max_value = 0
a = 0
b = 0
print("최대가 되는 경우: {} * {} = {}".format(a, b, max_value))
| 실행결과 |
|---|
| 최대가 되는 경우: 50 * 50 = 2500 |
📝 정답
max_value = 0
a = 0
b = 0
for i in range(1, 99+1):
j = 100 - i
#최댓값 구하기
if max_value < i * j:
max_value = i * j
a = i
b = j
print("최대가 되는 경우: {} * {} = {}".format(a, b, max_value))
i가 1부터 99까지 범위의 수로 차례대로 실행되며 조건문에서 max_value의 값이 계속 변경되다가 최댓값에서 더 큰 수가 없기 때문에 변경되지 않고 종료된다.
풀어서 쓰면,
i가 1일 때,
max_value < 1 x 99 → 여기서 max_value값이 아직 0이기 때문에
max_value = 1 x 99 → max_value값이 99로 변경된다.
i가 2일 때,
99(max_value) < 2 x 98 → 여기서 max_value값이 더 적기 때문에
99(max_value) = 2 x 98 → max_value값이 196으로 변경된다.
i가 3일 때,
196 < 3 x 97
196 = 3 x 97
.
.
.
이런 식으로 진행된다고 보면 된다. 그리고 더 변경될 수 없을 때(더 큰 수가 나올 수 없을 때) 반복이 종료 되며 a와 b의 값에 최댓값이 나온 수가 들어가게 된다.
1~100 사이의 숫자 중 2진수로 변환했을 때 0이 하나만 포함된 숫자와 그 숫자들의 합을 구하기
output =
for i in ? :
print("{} : {}".format(i, "{:b}".format(i)))
print("합계 :", sum(output))
| 실행결과 |
|---|
| 2 : 10 |
| 5 : 101 |
| 6 : 110 |
| 11 : 1011 |
| 13 : 1101 |
| 14 : 1110 |
| 23 : 10111 |
| 27 : 11011 |
| 29 : 11101 |
| 30 : 11110 |
| 47 : 101111 |
| 55 : 110111 |
| 59 : 111011 |
| 61 : 111101 |
| 62 : 111110 |
| 95 : 1011111 |
| 합계 : 539 |
📝 정답
output = [number for number in range(1, 100+1) if "{:b}".format(number).count("0") == 1]
for i in output:
print("{} : {}".format(i, "{:b}".format(i)))
print("합계 :", sum(output))
'count()'는 매개변수에 있는 문자열이 주어진 전체 문자열에 몇 개가 있는지 세어주는 함수이다.
리스트 컴프리헨션을 사용해서 쓰게 되면 output에 반복문과 조건문을 한 줄의 코드로 쓸 수 있다.
List Comprehensions : 반복문과 조건문을 대괄호'[ ]' 안에 넣는 형태를 사용해서 리스트를 생성하는 파이썬의 특수한 구문이다.
리스트 컴프리헨션을 풀어서 코드를 재작성 하면,
output = 0 #합계를 내기 위한 변수
for number in range(1, 100+1):
#1부터 100까지의 수(= number)를 반복
if "{:b}".format(number).count("0") == 1:
#2진수로 변경 되었을 때 0이 한 개인 10진수(= number)를 구하는 조건
print("{} : {:b}".format(number, number))
output += number
#0인 output에 위의 조건에 해당하는 number를 반복되면서 더함
print("합계 : {}".format(output))
이러한 내용이 된다. output은 합계를 내기 위한 변수로 두고, number가 1~100까지의 수로 반복이 되면서 if 조건을 충족 후, 출력. 출력 후에는 아까 변수로 둔 output에 number가 추가로 더해지며 최종 반복이 끝났을 때 합계로 출력되게 된다.
🌼 2진수, 8진수, 16진수로 변환하는 코드
# 10진수를 2진수로 변경
>>> "{:b}".format(10)
'1010' # --> 변환 했을 때 따옴표로 둘러싸여 있다면 문자열 자료형
# 2진수를 10진수로 변경
>>> int("1010", 2)
10
# 10진수를 8진수로 변경
>>> "{:o}".format(10)
'12'
# 8진수를 10진수로 변경
>>> int("12", 8)
10
# 10진수를 16진수로 변경
>>> "{:x}".format(10)
'a'
# 16진수를 10진수로 변경
>>> int("10", 16)
16