오식랜드
[python] 반복문 for문 본문
문법
for 변수 in 반복대상:
실행 명령문1
실행 명령문2
반복대상에는 리스트나 세트를 넣어줍니다.
num_list = [0, 1, 2, 3, 4]
num_set = {0, 1, 2, 3, 4}
for n in num_list:
print("LIST : {0}".format(n)) # {0} 위치에는 n의 값이 들어가요
for n in num_list:
print("SET : {0}".format(n)) # {0} 위치에는 n의 값이 들어가요
만약 대기번호를 배부하는 프로그램에서 리스트 또는 세트에 1~ 100까지 다 적어놓고 돌릴 수는 없다.
그럴 땐 우리가 초반에 배운 range를 사용해서 for문을 실행시키면 된다
for n in range(1, 101): # 1부터 101직전까지 (1~100)
print("대기번호 : {0}".format(n))
continue
continue 는 더 이상 명령들을 실행하지 않고 다음 반복대상으로 넘어갈 때 사용한다
예를 들어서, 고등학교에서 선생님이 학생들에게 책을 읽힌다고 가정하겠습니다.
출석번호 1번부터 10번까지 총 10명의 학생들이 있고 순서대로 한 문단씩 책을 읽는데 2번과 5번 학생들이 결석을 했다고 합니다.
결석한 학생은 교실에 없으니 책을 읽지 못하겠죠?
그럴 때 for문 안에 if문을 사용하게 됩니다.
그리고 if문의 조건으로는 for문이 돌며 닿은 출석번호가 결석자 리스트 안에 포함되어있는지 판별하게 합니다.
absent = [2, 5] # 결석한 학생 출석번호
for student in range(1, 11): # 출석번호 1~10번
if student in absent: # 결석했으면 책을 읽지 않고 다음 학생으로 넘어가기
continue
print("{0}, 책을 읽어봐".format(student))
결석자 포함이면 print를 하지 않고 다음 번호로 넘어가게 됩니다.
break
위의 예시에서 더 추가해보도록 하겠습니다.
2명의 결석 학생들을 제외한 학생들이 순서대로 열심히 책을 읽습니다.
그런데 저런, 7번 학생은 깜빡하고 책을 가져오지 않았다고 하네요.
하필이면 이 선생님은 다른 모든 것은 용서해도 학생이 책을 가져오지 않을 때에는 호랑이처럼 돌변하는 아주 무시무시한 분이라고 합니다.
얼마나 무섭냐면, 수업시간이 아직 끝나지도 않았는데 바로 수업을 끝내고 학생을 교무실로 데려간다네요.
absent = [2, 5] # 결석한 학생 출석번호
no_book = [7] # 책을 가져오지 않은 학생 출석번호
for student in range(1, 11): # 출석번호 1~10번
if student in absent: # 결석했으면 책을 읽지 않고 다음 학생으로 넘어가기
continue
elif student in no_book: # 책을 가져오지 않았으면 바로 수업 종료 (반복문 탈출)
print("오늘 수업 여기까지. {0}는 교무실로 따라와".format(student))
break
print("{0}, 책을 읽어봐".format(student))
이렇게 하면 책이 없는 7번에 도달했을 때, break문을 통해서 for문이 정지됩니다.
한줄 for문
반복 대상 항목을 하나씩 순회하면서 변수에 저장하고 그 변수를 사용자가 원하는 동작을 수행하는 방식이며 생김새는 이렇습니다.
[변수로 어떤 동작 for 변수 in 반복대상]
예를 들어서 학교에서는 출석번호가 1, 2, 3, 4, 5, ... 이렇게 되어 있었는데 새학기부터는 각 번호에 100을 더한 형태로, 즉, 101, 102, 103, 104, 105, ... 이렇게 바뀐다고 합니다.
우선 리스트에 5개의 출석번호 [1, 2, 3, 4, 5] 를 저장한 상태에서 한 줄 for 를 이용하여 변형을 해보겠습니다.
students = [1, 2, 3, 4, 5]
print(students) # [1, 2, 3, 4, 5]
# 한 줄 for 를 이용하여 각 항목에 100 을 더함
students = [i + 100 for i in students]
print(students) # [101, 102, 103, 104, 105]
조금 더 풀어서 적어보면 다음 문장과 같은 동작을 합니다.
students = [students[0] + 100, students[1] + 100, students[2] + 100, students[3] + 100, students[4] + 100]
다른 예제를 들어보겠습니다.
이번에는 이름이 저장된 리스트가 있는데 한 줄 for 를 이용하여 각 이름의 길이 정보를 가지는 리스트로 변형해보겠습니다.
students = ["Iron man", "Thor", "I am groot"]
print(students) # ["Iron man", "Thor", "I am groot"]
# 한 줄 for 를 이용하여 각 이름의 길이 정보로 변환
students = [len(i) for i in students]
print(students) # [8, 4, 10]
띄어쓰기를 포함한 각 이름의 길이는 "Iron man" 은 8, "Thor" 는 4, "I am groot" 는 10이며 이 값들이 새로운 리스트로 만들어졌습니다
위 코드를 풀어서 적어보면 이렇게 되겠네요.
students = [len(students[0]), len(students[1]), len(students[2])]
예제를 하나만 더 들어보겠습니다.
이름 정보를 가지는 동일한 리스트를 사용하되, 각 이름을 모두 대문자로 바꿔보겠습니다.
students = ["Iron man", "Thor", "I am groot"]
print(students) # ["Iron man", "Thor", "I am groot"]
# 한 줄 for 를 이용하여 각 이름을 대문자로 변경
students = [i.upper() for i in students]
print(students) # ['IRON MAN', 'THOR', 'I AM GROOT']
'dev-log > python' 카테고리의 다른 글
[python] 함수 (0) | 2023.01.09 |
---|---|
[python] 반복문 while문 (0) | 2023.01.04 |
[python] 조건문 (0) | 2023.01.04 |
[python] list와 set 데이터타입 변경 (0) | 2023.01.04 |
[python] 집합 set (0) | 2023.01.04 |