본문 바로가기

카테고리 없음

python for 문, range()에 대하여.

for 문에서 변수는 작업되는 배열의 item을 가리킨다.

string, list, tuple 같은 배열의 요소를 '순차적으로' 가리킨다.

(string은 배열은 아니고 '열'이기 때문에 ['s','t','r','i','n','g']같으로 될 수 있다.)

 

간단한 응용의 예시를 들어보겠다.

list = ['1','2','3','4']
for k in list:
  print(k)
 # 1
   2 
   3
   4

 

먼저 ['1','2','3','4']의 첫 번째 요소인 '1'이 k 변수에  대입된 후 print(k)를 수행한다.

그다음 두 벉째 요소인 '2'가 k 변수에 대입된 후 print(k)를 수행한다.

아렇게 list 의 마지막 요소까지 이과정을 반복한다.

 

for문으로 학생들의 성적의 합격여부를 확인하는 응용.

#result는 각 학생의 성적리스트.
result = [61,90,31,51]
number = 0

for stu in result:
  number = number + 1
  if stu >= 60:
    print(f"{number}번 학생은 합격입니다")
  else:
    print(f"{number}번 학생은 불합격입니다")

 

만약 합격한 학생한테만 축하메시지를 보내고 싶다면 continue를 사용하면 된다.

result = [61,90,31,51]
number = 0

for stu in result:
    number = number + 1
    if stu < 60:
        continue
    print(f'{number}번 학생 축하드려요, 합격입니다.')
#1번 학생 축하드려요, 합격입니다.
#2번 학생 축하드려요, 합격입니다.

그리고 range함수도 for문과 함께 자주 사용한다.

ao = range(5)
for ct in ao:
    print(ct)
#
0
1
2
3
4

ti = range(2,5)
for je in ti:
    print(je)
#
2
3
4

range(5)는 0 부터 5 미만의 숫자를 포함하는 range객체를 만들어준다.

시작과 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하면 된다. 이때 끝 숫자는 포함되지 않는다.

 

for와 range함수를 이용하면 1부터 15까지 더하는 것을 쉽게 구할 수 있다.

v = 0
for add in range(1,16):
	v = v + add
print(v)
# 150

range(1,16)은 숫자1부터 15까지(1이상 16미만)의 숫자를 가진 객체이다.

따라서 위의 예에서 변수 v에 1부터 15까지 하나씩 차례로 대입되면서 v = v + add 를 반복적으로 수행하고 v는 최종적으로

숫자1부터 15까지의 합인 150으로 된다.



for와 range를 이용해서 우에서 작성한 '60점 이상인 학생들에게 축하메시지 보내기.'예제도 다르게 작성할 수 있다.

result = [90,71,37,53,65]
for number in range(len(result)):
  	if result[number] < 60:
		continue
	print(f'{number+1}번 학생, 축하드립니다.')

for 와 range 함수를 이용하여 구구단도 출력할 수 있다.

for i in range(1,10):
    for j in range(1,10):
        print(i*j, end = ' ')
    print(' ')
#   
    1 2 3 4 5 6 7 8 9  
    2 4 6 8 10 12 14 16 18  
    3 6 9 12 15 18 21 24 27  
    4 8 12 16 20 24 28 32 36  
    5 10 15 20 25 30 35 40 45  
    6 12 18 24 30 36 42 48 54  
    7 14 21 28 35 42 49 56 63  
    8 16 24 32 40 48 56 64 72  
    9 18 27 36 45 54 63 72 81

1)첫번째 for 문에서 1부터 9까지의 숫자(range(1,10))가 차례대로 i에 대입된다.

2)i가 첫번째 순서, 즉 숫자 1일때 두번째 for문을 만나게된다.

3)2번 for 문에서 1분터 10까지의 숫자(range(1,10))가 j에 대입되고 그다음 문장 print(i*j)를 수행한다.

+여기서 print(i*j, end = ' ' )와 같이 매개변수 end를 추가한 이유는 해당 결괏값을 출력할 때 다음줄로 넘기지 않고 그 줄에 계속 출력하기 위함이다.

+그다음에 이어지는 print(' ' )는 2번 for문이 끝나면 결괏값을 다음 줄부터 출력하게 해주기 위함이다.

 

리스트 내포 사용하기.

리스트 안에 for문을 포함하는 리스트 내포(List comprehension)을 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.

list = [7,'lck',57,'15']
sec_list = []
for num in list:
    sec_list.append(num)
print(sec_list)
# [7,'lck',57,'15']

리스트 내포를 사용하면 우의 예제를 이렇게 간단하고 직좐적으로 만들 수 있다.

list = [7,'lck',57,'15']
sec_list = [num for num in list]
print(sec_list)
# [7,'lck',57,'15']

 이렇게 if문도 추가할 수 있다.

list = [7,'lck',57,'15']
sec_list = [num for num in list if type(num) ==int ]
print(sec_list)
# [7,57]

for문, while의 차이점은 뭘까, 다음에 적어보자.