데이터 분석 학습일지🐣

14일차 - 반복문 (for, while), 디버깅

boiled egg 2023. 7. 11. 23:11

Date : 2023-07-07

Topic : 반복문 (for, while), 디버깅


Note

for 반복문

nStart=int(input("시작 숫자:"))
nEnd=int(input("끝 숫자: "))
nInterval=int(input("간격: "))

if (nStart>nEnd) and nInterval <0:
    nEnd=nEnd+1
    for i in range(nStart, nEnd, nInterval):
        print(i)
elif (nStart<nEnd) and nInterval >0:
    for i in range(nStart, nEnd, nInterval):
        print(i)
else:
    print("입력된 내용이 적절하지 않습니다.")
  • 리스트를 반복
a=[10,20,30,40,50]
for i in a:
    print(i)

'''output	#세로로 출력. (반복문이라?🧐) 
10
20
30
40
50
'''
  • 문자열을 반복
a='hello, python!'  #문자열도 시퀀스 객체
for i in a:
    print(i, end=" ")	# end=' ' 활용, 공백으로 줄바꿈 삭제
    			# print()에는 \n(줄바꿈 default)

'''output
h e l l o ,   p y t h o n ! 
'''

디버깅

  • pdb 모듈은 파이썬 프로그램을 위한 대화형 소스코드 디버거
  • breakpoint(중단점) 및 단계 실행(single stepping) 설정, 스택 프레임 검사, 소스 코드 목록, 그리고 모든 스택 프레임의 컨텍스트에서 임의의 파이썬 코드 평가를 지원.
#디버깅 해보기
import pdb
pdv.set_trace() #이곳에서 프로그램 중단
total=0
number=int(input("숫자 입력: "))
for i in range(nunmber+1):
    total=total+1
print(total)

# 복습하다보니 이해 안간다. 질문✅

< 실습 >

- ex1) 리스트 요소에 10을 곱하고 공백으로 구분하여 한 줄 출력

x=[49,-17,25,102,8,62,21]   #list, 시퀀스 자료형

for i in x:
    print(i*10, end=" ")    #공백으로 구분하여 한 줄 출력
    
# output: 490 -170 250 1020 80 620 210

-ex2) 구구단 만들기

int_num=int(input("입력: "))	# 

for i in range(1,10):
    print(int_num,"*",i,"=",int_num*i)  #'숫자*숫자=값' 형태로 출력

-ex3) 정수 입력, 0부터 입력값까지의 합을 구하기

total=0
num=int(input("입력: "))

for i in range(num+1):
    total=total+i   # 변수 i를 더해줘야 함
print(total)

-ex4) 학생 수를 입력하고, 점수를 입력 받아 평균 구하기

s=int(input("학생 수: "))
total=0 #누적합 변수 선언

for i in range(s):
    print(i+1,"번 학생 점수: ", end='') #s수만큼 반복(i+1)
    score=int(input())
    total+= score   # total=total+score (a+=1 -> a=a+1)

avg=total/s
print() #줄 띄어쓰기용 (</br>)
print('평균: ', avg,'점')  #계산한 평균을 출력

-ex5) 학생 수를 입력하고, 점수를 입력 받아 평균 구하기

nCnt=int(input('학생 수: '))
nTotal=0

for i in range(nCnt):	# 학생의 수가 반복 범위
    nScore=int(input(str(i+1)+'번 학생의 점수: '))	# 학생 수에 +1 (0~N-1 아니고, 1~N번 학생이란 뜻)
    nTotal += nScore		# nTotal=nTotal+nScore 누적합(총합=+순차적으로 입력한 학생의 점수)

fAvr=nTotal/nCnt		# 평균=점수 총합/학생 수
print()	# 띄어쓰기용
print('평균: ', fAvr, '점')	# 계산한 평균을 출력

while 반복문

  • 초기식부터 시작하여 조건식 판별
  •  조건식
    • True - 반복할 코드와 변화식을 함께 수행
    • False - 반복문 끝낸 뒤 다음 코드 실행
i = 0                     # 초기식
while i < 10:            # while 조건식
     print('Hello, world!')    # 반복할 코드
     i += 1                    # 변화식
  • 초기값 감소시키기 (위 코드와 비교해보기)
#Hello, world!를 10부터 1까지 감소하도록 cnt 출력
i = 10                    # 감소하므로 큰->작은 값
while i > 0:              # while 조건식
     print('Hello, world!', 1)  # 반복할 코드
     i -= 1                     # 증감식 (감소하므로 + 대신 - 입력)

- ex1) 입력값만큼 증감식 만들기 (증가/감소 각각 코드 짜기)

cnt=int(input('반복할 횟수를 입력: '))

i=0
while i < cnt:
    print('Hello, world!', i)
    i += 1  #증가식
cnt=int(input('반복할 횟수를 입력: '))

while cnt > 0:
    print('Hello, world!', cnt)
    cnt -= 1    #감소식

🧐코드 분석하고 비교해보기

 

- ex2) 1~10까지 순서대로 칸 바꾸지 않고 공백으로 구분하여 출력.

num=1
while num<=10:
    print(num, end=' ')
    num += 1

- ex3) -50~1까지 구하고 5번째 수마다 줄바꿈하기. (숫자 사이 간격은 tab1=\t)

i= -50
cnt=1
i=int(input())

while i <= 1:
    if cnt%5==0:
        print(i, end='\t')
        print()
    else:
        print(i, end="\t")
    i += 1
    cnt += 1

- ex4) 하나의 정수를 입력 받고 1부터 입력값까지 더하는 프로그램 (while, for문 각각 작성)

nData=int(input("총합을 구할 숫자: "))
nTotal=0

while nData>0:		# 입력한 값부터 -1씩 줄어서 1이 될 때까지 반복할 동안
    nTotal += nData	# 반복문에 의해 1부터 순서대로 값이 저장(+nTotal에 다시 값을 더해서 할당되게)
    nData -= 1

print('총합:', nTotal) 	# 10 입력 시 55 출력, 100 입력 시 5050 출력(검증해보기)
nData=int(input("총합을 구할 숫자: "))
nTotal=0

for i in range(1,nData+1):	# range(0<=i<N 이니까 각 항에 +1하면 1부터 입력값까지 구할 수 있음)
    nTotal += i			# i는 [1,2,3, ... ,nData] -> 누적합

print('총합:', nTotal)

- ex5) 60점을 커트라인으로 불합 여부 출력하기(리스트 순서는 학생의 번호)

marks=[90,25,67,45,80]

for i in range(len(marks)):
    if marks[i]>=60:				# i는 0부터
        print(i+1, "번 학생은 합격입니다.")	# i+1 -> 0+1=1(번), 1+1=2(번), ..., 4+1=5(번) 학생
    else:
        print(i+1, "번 학생은 불합격입니다.")

'''op:
1 번 학생은 합격입니다.
2 번 학생은 불합격입니다.
3 번 학생은 합격입니다.
4 번 학생은 불합격입니다.
5 번 학생은 합격입니다.
'''
marks=[90,25,67,45,80]
count=1

for i in marks: # marks 리스트의 길이는 요소의 개수이므로 그냥 marks 써도 OK
    if i >=60:
        print(count, "번 학생은 합격입니다.")
    else:
        print(count, "번 학생은 불합격입니다.")
    count += 1  # 리스트 요소는 5개, count가 1부터므로 5번의 반복 -> (1~5)

'''op:
1 번 학생은 합격입니다.
2 번 학생은 불합격입니다.
3 번 학생은 합격입니다.
4 번 학생은 불합격입니다.
5 번 학생은 합격입니다.
'''

반복 횟수가 정해지지 않은 경우

  • random 모듈
  • import random
  • module: 파이썬 코드를 논리적으로 묶어서 관리 (.py)
  • 모듈 안에는 함수, 클래스, 변수들이 정의될 수 있고 실행 코드를 포함
  • 파이썬은 많은 표준 라이브러리 모듈 제공
#random 모듈 찾기
import random
import inspect
print(inspect.getfile(random))
#0~100 총합 구하기
tot=0
i=0
while True:
    i+=1    	#순서1	(바뀌면 값 달라짐)
    tot += i	#주의2
    if i==100:
        break
print(tot)

이 날 수업이 제일 어려웠어서 개념 익히고 감 잡는데 오래 걸렸다... 아직도 많이 헷갈리지만🫢 그래서 제일 늦게 올리는 14일차 학습일지^_^ 거의 매 일지마다 쓰는 것 같지만 정말 꾸준히 풀어보는게 정답.. 이제 슬슬 문제 이해도 잘 되고 분석도 할만한데 여전히 직접 코드를 짜는 부분이 힘들다. for문은 그래도 좀 할만한데 while문이 왜이렇게 어려운지..! 간단한 문제는 금방 푸는데 조금만 머리 써야 하면 while문은 바로 막혀버린다. 그래도 계속 주석 표시하면서 문제 반복적으로 보기!