AI학습 6

이유진·2024년 6월 27일

-- 9.제어문(반복문).ipynb --

1.반복문

1-1.대입 연산자 (복합 대입 연산자)

  • +=, -=, *=, /=, %=
  • 왼쪽에 저장된 값과 오른족에 값을 연산한 뒤 다시 왼쪽에 대입
  • ex) a = a - 10 == a -= 10

wallet = 10000

wallet -= 1000 # wallet = wallet - 1000
print(wallet)

wallet -= 1000
print(wallet)

wallet -= 5000
print(wallet)

1-2.while문

while 조건식 :
    조건식이  True인동안 반복할 문장
    ...

무한 루프(반복)

while문을 사용할 때 무한반복이 일어난다면

while문의 반복을 멈출 장치가 있는지 없는지 체크를 해야한다.

while True:

print('명언')

while 문의 반복 횟수를 설정.

i = 1

while i <= 5 :
print(i)
i += 1

print(i)

1, i = 1이 실행된다.

2. while문의 조건식을 검사한다.

3. 조건식이 True라면 whlie문 영역의 코드를 전부 실행한다.

4. 전부 실행했다면 다시 올라가서 while문의 조건식을 검사한다.

......

5. while문의 조건식이 False라면 while문의 코드를 실행하지 않고 탈출한다.

6. while문 영역 밖에있는 코드를 실행한다

1~10까지의 합

변하는 i를 이용해서 1~10까지의 합을 구함.

i = 1
sum = 0

while i<11:
sum += i
i += 1

print(f'1부터 10까지의 합 : {sum}')
print(i)

문제

  • 1부터 입력한 숫자까지의 합을 출력
예시) 숫자를 입력하세요 : 10
  출력 ㅣ 1부터 10까지의 합은 55 입니다.

a = int(input('숫자를 입력하세요 : '))
i = 1
sum = 0

while i <= a:
sum += i
i += 1

print(f'1부터 {a}까지의 합은 {sum} 입니다.')

홀수의 합

a = int(input('숫자를 입력하세요 :'))
i = 1
sum = 0

while i <= a:
if i%2 != 0:
sum += i
i += 1
print(f'1부터 {a}까지 홀수의 합은 {sum}입니다.')

1-3.for문

for 변수 in range(범위)[반복가능객체:
  반복할 문장
  • range() : 범위를 생성하는 함수
    • range(시작인덱스,종료 인덱스(직전),증감값)

range는 범위를 생성해주는 함수

데이터를 생성해주는 것과는 다른 개념이다.

nums = range(0,10,1)
print(nums)

for i in nums :
print(i, end= ' ')

nums는 0~10이 되기 직전까지 1씩 증가하는 범위를 가진다.

이 친구는 한 번 반복돌 때마다 증감값에 적어준 크기만큼 + 해준다.

계속 + 해주다가 범위를 넘어가게 된다면 반복을 종료한다.

반복돌 때마다 nums에서 나오는 숫자를 담아주는 변수가 i이다

우리는 i를 사용해서 여러가지 작업을 할 수 있다.

for i in range(10,0,-1):
print(i, end = ' ')

시작 인덱스 : 설정하지 않으면 0부터

종료 인덱스 : 무조건 설정

증감값 : 설정하지 않으면 1

temp = range(10)
print(temp)

문제

  • 위 for문을 이용하여 1~100까지 짝수의 총합을 구하는 프로그램 작성

range(), 증감값 1일 때는 생략 가능.

for i in range(100):

if (i+1) % 2 == 0: # 덧셈 뺄셈보다 나머지 연산자가 우선순위가 더 높다.

# print('들어옴')

sum += i+1

for i in range(100):
temp = i+1
if temp % 2 == 0:
sum += temp

print(sum)

sum = 0
for i in range(1,101):
if i%2 != 0:
continue
sum += i

print(sum)

기타제어문

continue : 즉시(아래 코드를 실행하지 않고) 다음 반복 실행

break : 반복 종료

위에 코드는 강사님 코드

반복 100번 돌려서

sum = 0
for i in range(1,101,1):
if i%2 == 0:
sum += i

print(sum)

반복 100번 돌려서

sum = 0
for i in range(1,101):
if i%2 != 0:
continue
sum += i

print(sum)

반복 50번 돌려서

sum = 0
for i in range(1,101,2) :
sum += i
print(sum)

반복 50번 돌려서

sum = 0
for i in range(1,51,1) :
i *= 2
sum += i

print(sum)

2. list를 for문과 함께 사용하기

fruits = ['apple','mandarin','plum','wetermelon']

for i in fruits:
print(i, end = ' ')

fruits = ('apple','mandarin','plum','wetermelon')

for i in fruits:
print(i, end = ' ')

fruits = {'apple','mandarin','plum','wetermelon'}

for i in fruits:
print(i, end = ' ')

문제

  • score 리스트에 저장된 점수가 60점 이상인 학생이 몇 명인지 알아보는 프로그램을 작성해보자!

    • score = [90,35,55,47,66,80,100,25,36,48,60,77]
  • 출력 예시

    • 60점 이상인 학생의 수는 6명 입니다.

score = [90,35,55,47,66,80,100,25,36,48,60,77]
count = 0

for i in score :
if i >= 60 :
count += 1
print(count)

score = list(input('성적을 입력해보자.(띄어쓰기 포함)').split(' '))
count = 0

for i in score :
if int(i) >= 60 :
count += 1
print(count)

문제

  • 정수를 입력 받아, 그 정수 만큼 점수(0~100)를 입력받아라
  • 그 정수를 하나씩 리스트에 저장해라.
  • 해당 리스트에서 70점 이상인 학생들의 수를 구하고
  • 학생들의 점수도 눈으로 볼 수 있도로 구현하라
예시)
정수 입력 >> 5
1번째 정수입력 >> 77
2번째 정수입력 >> 88
3번째 정수입력 >> 55
4번째 정수입력 >> 33
5번째 정수입력 >> 11
점수를 입력하세요 >> 70

출력 예시)
70점 이상인 학생들의 숫자는 2명이고
해당 학생들의 점수는 [77,88] 입니다.

a = int(input('정수 입력 >> ')) # 몇명의 점수를 입력하시겠습니까?
score = []
pass1 = []
count = 0
for i in range(a) :
b = int(input(f'{i+1}번째 점수 입력 >> ')) # 점수를 직접 입력
score.append(b)

c = int(input('점수를 입력하세요 >> '))

for i in score:
if i >= c:
pass1.append(i)
count +=1

print(f'{c}점 이상인 학생들의 숫자는 {count}명 이고 ')
print(f'{c}점 이상인 학생들의 숫자는 {len(pass1)}명 이고 ') # count변수를 사용하지 않고 len을 이용하여 추출할 수 있다.
print(f'해당 학생들의 점수는 {pass1} 입니다.')

3.다중 반복문

for i in range(1,4):
print('현재 i', i)
for j in range(1,4):
print('(ง •_•)ง j',j)

for i in range(1, 10):
for j in range(1, 10):
print('{0:2d} X {1:2d} = {2:2d}'.format(j, i, i * j), end=' ')
print('\n')

i,j =1,1

while i<= 9 :
while j<=9 :
print(f'{j} {i} = {ij:2d}', end = ' ')
j+=1
print()
j = 1
i += 1

4.List Comprehension

  • Comprehension이란 iteravle(흐르고있다)한 오브젝트를 생성하기 위한 방법중 하나로 파이썬에서 사용할 수 있는 유일한 기능
  • List Comprehension은 리스트를 쉽게 생성하기 위한 방법

li = list(range(10))

print(li)

li2 = []

for i in range(10):
li2.append(i)

print(li2)

리스트 컴프리핸션

[i+1 for i in range(10)] # 미리보기, print 된거와 같다.

                     # 리스트 자체가 만들어졌기 때문에 append 등 리스트 함수 사용 가능.

n = 10

range의 범위만큼 리스트를 만드는데

요소는 전부 0으로.

result = [0 for i in range(n)]
print(result)

arr = [1,2,3,4,5,6,7,8,9,10]

arr의 각 요소들의 제곱을 요소로 가지는 리스트를 만들어보자.

result = [i**2 for i in arr]
print(result)

datas = ['beautiful','wonderful', 'awesome', 'amazing']

각 요소들의 길이를 요소로 가지는 리스트를 만들고싶다!

함수도 사용이 가능하다.

단, 반환이 있는 함수만 사용가능!

result = [len(data) for data in datas]

result = [print(data) for data in datas] # print함수는 반환이 없기때문에 for문에 의해 출력은 되지만

                                          # 리스트 요소의 값은 NONE값

print(result)

0~9 중에서 짝수만 가진 리스트를 생성

result = [n for n in range(10) if n % 2 == 0 and n != 0]
print(result)

양수는 그대로 , 음수는 0으로 바꾼 리스트 만들기

datas = [-1, 0 ,-4, 24, 5, -10, 2]
result = [num if num > 0 else 0 for num in datas] # if가 뒤에 간다면 요소의 갯수가 달라짐

                                                # 갯수를 그냥 두고싶다면 앞에 if문!

print(result)

다중 for문

temp = []

for i in range(1,4):
for j in range(1,3):
temp.append(i*j)

print(temp)

result = [i*j for i in range(1,4) for j in range(1,3)] # 리스트 컴프리핸션 특징
print(result)

중첩 컴프리핸션

리스트 컴프리핸션의 결과를 하나의 타입의 값으로 볼 줄 알아야 한다.

result = [[0 for i in range(2)] for j in range(3)]
print(result)

enumerate()함수

  • 인덱스와 원소로 이루어진 튜플을 리턴

datas = ['beautiful','wonderful', 'awesome', 'amazing']

enumerate() 함수는 반복문이랑 같이 사용!

for e in enumerate(datas):
print(e)

for i, e in enumerate(datas):
print(i,e)

enumerate() 함수는 반복문이랑 같이 사용!

for e in enumerate(datas, start = 1): # 시작 인덱스도 설정 가능하다!

print(e)

zip() 함수

  • 객체가 담고 있는 원소를 엮어서 튜플의 형태로 리턴
  • 매개변수의 길이가 다를 때는 짧은 매개변수 기준으로 데이터가 엮이고 나머지는 버려짐

nums = [100,200,300,400,500]
datas = ['beautiful','wonderful', 'awesome', 'amazing']

for e in zip(nums,datas):
print(e)

nums = [100,200,300,400,500]
datas = ['beautiful','wonderful', 'awesome', 'amazing']
alphabet = ['a', 'b', 'c']

매개변수가 작은 친구만큼만 엮여서 나오고, 나머지는 버려진다.

for e in zip(nums,datas,alphabet):
print(e)

for i in '이유진': # 문자열도 반복 가능 객체
print(i)

profile
독해지자

0개의 댓글