지난 시간에는 while 루프 안에서 input() 함수를 이용해, 원하는 만큼 연속적으로 입력 값을 받는 방법을 배웠습니다. 이번 시간에는 루프 안에서 리스트와 딕셔너리를 사용해, 값을 채우고 제어하는 방법을 배워 보도록 하겠습니다.
리스트의 반복 작업에는 주로 for 루프를 사용하지만, 루프 안에서 값을 변경하거나 제어할 때는 while 루프가 더 효가적일 수 있습니다. 만약 어떤 웹사이트의 가입 순서대로 되어 있는 회원 리스트가 있다고 하면, 그 회원 리스트의 순서를 새로 가입한 회원이 앞에 오도록 수정하고 싶다면 어떻게 해야 될까요?
user_list = ['한군1', '경호2', '제니3', '리사4', '수지5']
user_list_new = []
print("\n고인물 회원님 순서로 정렬")
for user in user_list:
print(user)
while user_list:
new_user = user_list.pop()
user_list_new.append(new_user)
print("\n신입 회원님 순서로 정렬")
for user in user_list_new:
print(user)
먼저 user_list의 데이터가 더 이상 없을 때까지 while 루프를 돌려줍니다. 다음에 pop() 메서드를 이용하여 가장 뒤에 있는 데이터부터 새로운 리스트에 추가해주면 끝입니다. 쉽죠? 처음 코딩을 배우다 보면 리스트의 순서를 반대로(reverse) 바꾸는 작업이 생각보다 어려울 수 있지만, 한번 정도는 직접 알고리즘을 이용해 만들어 보는 것이 도움이 됩니다.
다음은 위에 있는 코드를 재활용하여, 만약 회원 중에 진상을 부리는 사람을 빼야 한다면 어떻게 할까요?
user_list = ['한군', '경호', '제니', '리사', '수지', '경호']
bad_user = '경호'
print("\n현재 회원님 리스트")
for user in user_list:
print(user)
while bad_user in user_list:
user_list.remove(bad_user)
print("\n진상 회원 뺀 리스트")
for user in user_list:
print(user)
생각보다 간단합니다. 바로 in 키워드를 이용하는 방법인데요, for 루프에서 사용하는 in 키워드와는 다르게 while 루프의 조건문에서 사용하는 in 키워드는 만약 리스트안에 bad_user 데이터가 있다면 계속 반복해서 처리를 할 수 있습니다. 그럼 오늘의 하이라이트인 while 루프안에서 input() 함수를 이용해 딕셔너리 데이터를 채워보겠습니다.
data = {}
while True:
name = input("\n당신의 누구? ")
love = input("사랑은 누구? ")
data[name] = love
repeat = input("커플 천국, 솔로 지옥? (예/아니오) ")
if(repeat == "아니오"):
break
print("\n--- 커플 지옥, 김밥 천국 ---")
for name, love in data.items():
print(name + "님은 " + love + "님과 야스~야스~ 한다고 합니다!")
여기 비어있는 data 딕셔너리가 있습니다. 지난 시간에 배웠던 것 처럼 input() 함수를 이용해 질문을 받고 특정 단어가 나오면 while 루프를 종료합니다. 하지만 여기서 결정적으로 다르면서 가장 중요한 부분이 있습니다. 만약 이 코드 부분을 이해하고 설명이 가능하다면, 여러분은 정말 정말 데이터에 이름을 넣은 사랑하는 사람이 생길지도 모릅니다!
저 미친 사람 아닙니다...
댓글