x = [2, 3, 5, 7, 9]
y = x
y[2] = 11
x[4] = 13
print(y)
y의 값은 [2, 3, 11, 7, 9]가 아닌 [2, 3, 11, 7, 13]이였다. x값 여태껏 파이썬의 aliasing이라는 것을 모르고 있었던것에 정신충격이 좀 있었다. aliasing으로 인한 혼선을 피하려면 리스트를 지정할때 y = x가 아닌 y = list(x)라고 해야 y의 특정 인덱스 위치의 값이 바뀌어도 변수 x에 영향이 없다. x가 아닌 x값에 있는 값들을 따로 다시 지정한다고 보면 된다.
# 1. 단어장 만들기
vocab = {
# 코드를 입력하세요.
"sanitizer": "살균제",
"ambition": "야망",
"conscience": "양심",
"civilization": "문명"
}
print(vocab)
# 2. 새로운 단어들 추가
# 코드를 입력하세요.
vocab.update({"privilege": "특권", "principle": "원칙"})
print(vocab)
# 언어 사전의 단어와 뜻을 서로 바꿔주는 함수
def reverse_dict(dict):
new_dict = {} # 새로운 사전
# dict의 key와 value를 뒤집어서 new_dict에 저장
# 코드를 입력하세요.
for key in dict:
new_dict[dict[key]] = key
return new_dict # 변환한 새로운 사전 리턴
# 영-한 단어장
vocab = {
'sanitizer': '살균제',
'ambition': '야망',
'conscience': '양심',
'civilization': '문명',
'privilege': '특권',
'principles': '원칙'
}
# 기존 단어장 출력
print("영-한 단어장\n{}\n".format(vocab))
# 변환된 단어장 출력
reversed_vocab = reverse_dict(vocab)
print("한-영 단어장\n{}".format(reversed_vocab))
# 투표 결과 리스트
votes = ['김영자', '강승기', '최만수', '김영자', '강승기', '강승기', '최만수', '김영자', \
'최만수', '김영자', '최만수', '김영자', '김영자', '최만수', '최만수', '최만수', '강승기', \
'강승기', '김영자', '김영자', '최만수', '김영자', '김영자', '강승기', '김영자']
# 후보별 득표수 사전
vote_counter = {}
# 리스트 votes를 이용해서 사전 vote_counter를 정리하기
for name in votes:
# 코드를 작성하세요.
if name not in vote_counter:
vote_counter[name] = 1
else:
vote_counter[name] += 1
# 후보별 득표수 출력
print(vote_counter)
# 자리수 합 리턴
def sum_digit(num):
# 코드를 입력하세요.
sum = 0
while num >= 10:
sum += num % 10
num //= 10
return sum + num
# sum_digit(1)부터 sum_digit(1000)까지의 합 구하기
# 코드를 입력하세요.
sum = 0
for i in range(1,1001):
sum += sum_digit(i)
print(sum)
📌숫자를 문자열로 바꾼후 1의 자리 10의 자리 100의 자리 등등.. 각위치에 있는 문자를 숫자로 변환후 더해준다.
def sum_digit(num):
# 코드를 입력하세요.
sum = 0
str_num = str(num) 📌
for i in range(len(str_num)):
sum += int(str_num[i])
return sum
# sum_digit(1)부터 sum_digit(1000)까지의 합 구하기
# 코드를 입력하세요.
total_sum = 0
for num in range(1,1001):
total_sum += sum_digit(num)
print(total_sum)
def mask_security_number(security_number):
# 코드를 입력하세요.
if '-' in security_number:
return security_number[:10] +"****"
else:
return security_number[:9] + "****"
# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))
숫자
보다는 -숫자
로 접근을 하면 주민번호숫자사이에 있는 -
의 여부에 영향 받지 않고 더 간결한 코드가 가능.def mask_security_number(security_number):
# 코드를 입력하세요.
sec_num_list = []
for i in range(len(security_number)):
sec_num_list.append(security_number[i])
for b in range(1,5):
sec_num_list[-b] = "*"
new_word = ""
for r in range(len(security_number)):
new_word += sec_num_list[r]
return new_word
# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))
📌 리스트에 있는 값들을 for
루프를 사용하지 않고 내장함수join
으로 한줄로 완성!
for 루프에서
for r in range(len(security_number)):
new_word += sec_num_list[r]
join 함수
new_word = "".join(sec_num_list)
로 변경
def mask_security_number(security_number):
# 코드를 입력하세요.
sec_num_list = []
for i in range(len(security_number)):
sec_num_list.append(security_number[i])
for b in range(1,5):
sec_num_list[-b] = "*"
new_word = "".join(sec_num_list)📌
return new_word
# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))
-숫자
를 사용해 문자열 뒤에서 부터 4자리를 제외한 문자열과 제외한 문자열 숫자만큼 *
4개를 더한 값을 return
한다.
-숫자
도 마찬가지로 문자열[x:-숫자]
콜론뒤에있는 위치는 범위에 포함되지 않는다. 문자열[:-1]
이라면 문자열에 있는 마지막 위치에 있는 부분인 문자열[-1]
을 제외한 값을 의미한다.
def mask_security_number(security_number):
# 코드를 입력하세요.
return security_number[:-4] + "****"
# 테스트
print(mask_security_number("880720-1234567"))
print(mask_security_number("8807201234567"))
print(mask_security_number("930124-7654321"))
print(mask_security_number("9301247654321"))
print(mask_security_number("761214-2357111"))
print(mask_security_number("7612142357111"))
def is_palindrome(word):
# 코드를 입력하세요.
for i in range(len(word) // 2):
if word[i] != word[-1-i]:
return False
return True
# 테스트
print(is_palindrome("racecar"))
print(is_palindrome("stars"))
print(is_palindrome("토마토"))
print(is_palindrome("kayak"))
print(is_palindrome("hello"))
left
right
의 변수로 지정하면 코드 가독성이 높아짐📌의미를 알기 힘든 i
와 [-1-i]
대신에 left
와 right
변수로 변경
def is_palindrome(word):
# 코드를 입력하세요.
for left in range(len(word) // 2): 📌
right = - 1 - left
if word[left] != word[right]:
return False
return True
# 테스트
print(is_palindrome("racecar"))
print(is_palindrome("stars"))
print(is_palindrome("토마토"))
print(is_palindrome("kayak"))
print(is_palindrome("hello"))