반응형

오늘은 파이썬의 for문에 대해 알아볼 것이다.
for문은 파이썬의 특징중 하나인 직관성을 잘 대변해 준다. for문을 잘 공부하고, 프로그래밍 하면 더 재밌을 것이다.

# for문
# for문의 기본 구조
# for문의 기본 구조는 다음과 같다.

# for 변수 in 리스트(또는 튜플, 문자열):
#     수행할 문장1
#     수행할 문장2
#     ...

# 리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 "수행할 문장1", "수행할 문장2" 등이 수행된다.

# 예제를 통해 for문 이해하기
# for문은 예제를 통해서 살펴보는 것이 가장 알기 쉽다. 다음 예제를 직접 입력해 보자.

# 1. 전형적인 for문
test_list = ['one', 'two', 'three']
for i in test_list:
    print(i)
# ['one', 'two', 'three']리스트의 첫 번째 요소인 'one'이 먼저 i변수에 대입된 후 print(i) 문장을 수행한다.
# 다음에 두 번쨰 요소 'two'가 i 변수에 대입된 후 print(i) 문장을 수행하고 리스트의 마지막 요소까지 이것을 반복한다.

# 2.다양한 for문의 사용
a= [(1, 2), (3, 4), (5, 6)]
for (first, last) in a:
    print( first + last)
# 위 예는 a 리스트의 요솟값이 튜플이기 때문에 각각의 요소가 자동으로 (first, last)변수에 대입된다.
# ※ 이 예는 02장에서 살펴본 튜플을 사용한 변수값 대입 방법과 매우 비슷한 경우이다.
# (first, last) = (1, 2)

# for문의 응용
# for문의 쓰임새를 알기 위해 다음을 가정해 보자.
# "총 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여주시오."

# 우선 학생 5명의 점수를 리스트로 표현해 보았다.
marks = [90, 25, 67, 45, 80]
# 1번학생은 90점이고, 2번학생은 25점, 5번 학생은 80점이다.
# 이런 점수를 차례로 검사해서 합격했는지 불합격했는지 통보해 주는 프로그램을 만들어 보자.
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
    number = number + 1
    if mark >= 60:
        print("%d번 학생은 합격입니다" %number)
    else:
        print("%d번 학생은 불합격입니다." % number)

# for문과 continue
# while문에서 살펴본 continue문을 for문에서도 사용할 수 있다.
# 즉 for문 안의 문장을 수행하는 도중에 continue문을 만나면 for문의 처음으로 돌아가게 된다.

# 앞의 for문 응용 예제를 그대로 사용해서 60점 이상힌 사람에게는 축하 메시지를 보내고 나머지 사람에게는 아무 메시지도 전하지 않는 프로그램을 작성해보자.
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
    number = number + 1
    if mark <  60:
        continue
    print("%d번 학생 축하합니다. 합격입니다" %number)
# for문과 함께 자주 사용하는 range 함수
# for문은 숫자 리스트를 자동으로 만들어 주는 range 함수와 함께 사용하는 경우가 많다. 다음은  range함수의 간단한 사용법이다.
a = range(10)
print(a)
# range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.
# 시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자)형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.
a = range(1, 11)
print(a)

# range 함수의 예시 살펴보기
# for와 range 함수를 사용하면 1부터 10까지 더하는 것을 다음과 같이 쉽게 구현할 수 있다.
add = 0
for i in range(1, 11):
    add = add + i
    print(add)
# rnage(1, 11)은 숫자 1부터 10까지(1이상 11미만)의 숫자를 데이터로 갖는 객체이다.
# 따라서 위 예에서 i변수에 리스트의 숫자가 1부터 10까지 하나씩 차례로 대입되면서 add = add + i 문장을 반복적으로 수행하고 add는 최종적으로 55가 된다.

# 또한 우리가 앞에서 살펴본 "60점 이상이면 합격" 이라는 문장을 출력하는 예제도 range 함수를 사용해서 바꿀 수 있다. 다음을 보자.
marks = [90, 25, 67, 45, 80]
for number in range(len(marks)):
    if marks[number] < 60:
        continue
    print("%d번 학생 축하합니다. 합격입니다." %(number + 1))
# len함수는 리스트 안의 요소 개수를 돌려주는 함수이다. 따라서 len(makrs)는 5가 될 것이고 range(len(marks))는 range(5)가 될 것이다.
# number 변수에는 차례로 0부터 4까지의 숫자가 대입될 것이고 marks[number]는 차례대로 90, 25, 67, 45, 80 값을 갖게 된다.

# for와 range를 이용한 구구단
# for와 range함수를 사용하면 소스 코드 단 4줄만으로 구구단을 출력할 수 있다. 들여쓰기에 주의하며 입력해 보자.
for i in range(2, 10):
    for j in range(1, 10):
        print(i * j, end = ' ')
    print('')
# 위 예를 보면 for문을 두 번 사용했다. 1번 for문에서 2부터 숫자9까지의 숫자(range(2, 10)가 차례로 i에 대입된다. i가 처음 2일 때 2번 for문을 만나게 된다.
# 2번 for문에서 1부터 9까지의 숫자(range(1, 10)가 j에 대입되고 그 다음 문장 print(i * j)를 수행한다.

# 따라서 i가 2일 때 2 * 1, 2* 2, 2 * 3 ... 2 * 9까지 차례로 수행되며 그 값을 출력하게 된다. 그다음으로 i가 3일 때 역시 2일 떄와 마찬가지로 수행될 것이고 i가 9일 때 까지 계속 반복된다.

# [매개변수 end를 넣어 준 이유는 무엇일까?]
# 앞의 예제에서 print(i * j, end = '')와 같이 매개변수 end를 넣어 준 이유는 해당 결괏값을 출력할 때 다음줄로 넘기지 않고 그 줄에 계속해서 출력하기 위해서이다.
# 그 다음에 이어지는 print('')는 2단, 3단 등을 구분하기 위해 두번째 for문이 끝나면 결과값을 다음 줄부터 출력하게 해주는 문장이다.

# 리스트 내포 사용하기
# 리스트 안에 for문을 포함하는 리스트 내포(List comprehension)를 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다. 다음 예제를 보자.
a = [1, 2, 3, 4]
result = []
for num in a:
    result.append(num*3)
print(result)
# 위 예제는 a 리스트의 각 항복에 3을 곱한 결과를 result리스트에 담는 예제이다.
# 이것을 리스트 내포를 사용하면 다음과 같이 간단히 해결할 수 있다.
a = [1, 2, 3, 4]
result = [num * 3 for num in a]
print(result)

# 만약 [1, 2, 3, 4]중에서 짝수에만 3을 곱하여 담고 싶다면 다음과 같이 리스트 내포 안에 "if"조건을 사용할 수 있다.
a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 ==0]
print(result)

# # 리스트 내포의 일반 문법은 다음과 같다. "if조건" 부분은 앞의 예제에서 볼 수 있듯이 생략할 수 있다.
# [표현식 for 항복1 in 반복가능객체1 if 조건문1
#        for 항목2 in 반복가능각체2 if 조건문2
#        ...
#        for 항복n in 반복가능객체n if 조건문n]

# 만약 구구단의 모든 결과를 리스트에 담고 싶다면 리스트 내포를 사용하여 다음과 같이 간단하게 구현할 수도 있다.
result = [x*y for x in range(2, 10)
              for y in range(1, 10)]
print(result)

# 지금껏 우리는 프로그램 흐름을 제어하는 if문, while문, for문에 대해 알아보았다. 아마도 여러분은 while문과 for문을 보면서 2가지가 아주 비슷하다는 느낌을 받았을 것이다.
# 실제로 for문을 사용한 부분을 while문으로 바꿀 수 있는 경우도 많고, while문을 바꾸어서 사용할 수 있는 경우도 많다.

# Review complete

for문 리뷰의 핵심

  • for문의 기본 구조
  • for문 이해하기
  • for 문과 continue
  • range함수
  • for와 range를 활용한 구구단
  • 리스트 내포 사용하기

for문을 리뷰하며 정리한 코드를 공유한다! 파이선 공부는 재밋다!
https://github.com/mgkim-developer/Python-Basic-Grammar/blob/main/(3-3)for.py

 

GitHub - mgkim-developer/Python-Basic-Grammar: Python Basic Grammar Study

Python Basic Grammar Study. Contribute to mgkim-developer/Python-Basic-Grammar development by creating an account on GitHub.

github.com

 

반응형