Python[1주차-3일] 반복문,기초문풀1~2

이동일·2023년 7월 6일

Python

목록 보기
3/10

1. 반복문

1-1 반복문

  • 특정 실행을 반복한다. 반복문을
    사용하면 프로그래밍이 간결하고 유지 보수 쉽다
  • 대량 매일, 구구단, 게임 반복실행 사용
  • 횟수 지정과 조건지정 방법이 있다.
#횟수 지정  for문 사용
for i in range(100):
	print('i -> {}'.format(i))
    
 ##########
 #조건 지정 while 사용
num = 0
while (num < 10):
	print('num -> {}.format(num))
	num +=1

1-2 반복 범위 설정 해주는 range함수

  • for i in range(1, 11, 1):
    1부터 10까지 1씩 증가 하면서 반복한다.
  • range()함수 변형
    for i in rage(1,11): -->단계가 1인
    경우 생략 가능하다. (1부터 10까지 1씩 증가한다.)
  • 시작 매개변수 생략이 가능하다
    for i in range(11): --> 시작이 0인 경우 생략 가능
range 함수로 1씩 증가 시켜보기
startNum = int(input('반복의 시작 입력 :'))
endNum = int(input('반복의 끝 입력 : '))

 for i in range(startNum,(endNum+ 1)):
         #5부터 15까지 출력할려면 endNum에다가 +1을 해주어야한다.
         #+1을 안해주면 5부터 14까지 출력만 된다.
     print(i)
     
     
#####
#2씩 증가 시키기

for i in range(startNum,(endNum+ 1) , 2):
#1씩 증가와 달리  증가수를 생략하면 안된다. 2 붙여주자

    print(i)

1-3 조건에 의한 반복(while문)

  • 조건에 만족하면 반복 실행한다. 그렇지 않으면 반복 중단
  • 조건에 의한 반복은 while문이 주로 사용된다.
#기본예시

 endNum = 10
 n = 0

 while n <= endNum:
    print(n)
    n += 1
    
    
#############################
# 1부터 100까지의 정수 중 2의 배수와 3의 배수를 구분해서 출력하자# n = 1
 while n < 101 :
     if n % 2 ==0:
         print('{}은 2의 배수이다.'.format(n))

     if n%3 ==0:
         print('{}은 3의 배수이다.'.format(n))

     n +=1
    
    

1-4 for문 while문 비교

  • 횟수에 의한 반복이면 for문이 while문 보다 적합하다
    ex) 1부터 10까지 합을 구하는 경우 while문이 간결 하다
#for문 while문 비교
sum  = 0
for i in range(1, 11) :
 sum += i
print('sum : {}'.format(sum))




#############################
#while문으로 작성
sum = 0
n = 1
while n < 11:
	sum+= n #sum에다가 n을더함
	n+=1 #n+1이 없으면 무한루프에 빠진다.
print('sum : {}'.format(sum))


1-5 무한루프

  • 반복문을 빠져나올 수 없는 경우를 무한 루프라고 한다.
  • while문에서 조건식의 결과가 항상 "True"인 경우
n = 1  
while n < 10:  #n=1이 그대로 실행됨으로 True가 되어서 무한 반복이된다.
	print('Hello')
    
#####################
#논리형 데이터로 반복 제어가 가능하다
flag = True
num = 0
sum = 0
while flag: #flag=True를 초기화 함으로써 무한 반복을 실행한다.
    num += 1
    sum += num #누적되서 숫자가 더해진다.
    print('{}까지의 합은 {}입니다.'.format(num, sum))

    if sum >= 1000:
        flag = False #1000이넘는순가 False가 되어 빠져나온다.

    
###############################################
#while문 예제 (random함수 사용)
# 하루에 독감으로 병원에 내방하는 환자 수가 50명에서 100명 사이일 떄,
# 누적 독감 환자 수가 최초 10000명을 넘는 날짜를 구해보자
import random

sum = 0
date = 0
flag = True

while flag: 
    patientCount = random.randint(50, 100)
    sum += patientCount
    date += 1
    print('날짜:{}, \t 오늘 환자수:{}, \t 누적 환자수: {}'.format(date, patientCount, sum))

    if sum >= 10000:
        flag = False



1-6 반복문 제어 continue

  • 반복 실행 중 continue를 만나면 실행 생략후 다음 반복 실행문으로 넘어간다.
 for i in range(100):
     if i % 7 != 0 :
         continue # 이하 반복 실행 생략
#                  #continue를 만나면 다시 위로가서 새로운 반복이 시작된다.
#                  #7의 배수가 아닌 정수는 빠져나오지 못하고 위로(for)가서 다시 무한반복이 된다.
#                  #즉 7의 배수만 빠져나와서 밑에 print()함수를 실행한다.
#
     print('{}는 7의 배수입니다.'.format(i))
     
     
     
###########################
#else 키워드를 사용한 반복문 종료
#7의배수와 7의 배수 갯수 출력하기

 cnt = 0
 for i in range(1,100) :
     if i % 7 !=0:
         continue

     print('{}는 7의 배수입니다.'.format(i))
     cnt += 1 #반복이 실행된 횟수(7의배수만 카운트한다)

 else: 
     print('99까지의 정수 중 7의 배수는 {}개 입니다.'.format(cnt))

1-7 반복문 제어 break

  • 반복 실행 중 break를 만나면 반복문을 빠져나온다.
num = 0
while True:
    print('Hello~')

    num +=1
    if(num >= 5):
        break #--> 반복문 종료  #헬로우 5번 출력후 종료






#########################
#break 사용 예제
#10의 팩토리얼을 계산하는 과정에서 결과값이 50을 넘었을때의 숫자를 구하자
result = 1
num = 0
for i in range(1, 11):
    result *= i #팩토리얼 이라서 *= 사용
                #팩토리얼은 1부터 특정 숫자까지 연손된 자연수를 곱하는 것이다.
                #4는   1x2x3x4를 말한다.

    if result > 50:
        num = i
        break

print('num: {}, result: {}'.format(num, result))
# #출력 하면  num은5 , result는 120이 나온다
# #1x2x3x4= 24
# #1x2x3x4x5 = 120  --> 즉  num 5는 50을 넘어서 답이   num 5, result 120이 나온다.
        

2. 기초 문제 풀이(데이터와 변수)

2-1 데이터와 변수(01)



name = '홍길동'
product = '야구글러브'
orderNo = 2568956
payMethod = '신용카드'
payPrice = 100000
payProduct = 110000
usePoint = 10000
payDate = '2021/08/03 21:50:12'
payDiv = 6
payDivCategory = '무'
phone = '02-1234-5678'

print(name, '고객님 안녕하세요')
print(name, '고객님의 주문이 완료되었습니다.')
print('다음은 주문건에 대한 상세 내역입니다.')
print('-' * 50)
print('상품명',product)
print('주문번호',orderNo)
print('결제방법',payMethod)
print('상품금액',payProduct)
print('결재금액',payPrice)
print('포인트',usePoint)
print('결제일시',payDate)
print('할부',payDiv)
print('할부유형',payDivCategory)
print('문의',phone)
print('-'*50)
print('저희 사이트를 이용해 주셔서 감사합니다.')

2-2 데이터와 변수 (02)

#1.사용자가 입력한 데이터의 길이를 출력하는 프로그램을 만들어보자
#- len() 함수를 사용한다 (len함수는 문자 길이를반환한다)

userMsg = input('메시지 입력: ')
print('메시지 문자열 길이 : {}'.format(len(userMsg)))



#################################

#2.다음 문장에서 객체지향 문자열을 찾아 보자
#- fint() 함수를 사용한다. (특정 문자열의 위치를 찾아 반환한다.)

article = '파이썬은 프러래머그 귀도반로섬 이 발표한 고급 프로그래밍 언어이다.'
strIdx = article.find('귀도반로섬') #11출력  참고로 0부터시작한다.
print('객체지향 문자열 위치: {}'.format(strIdx))





########################################################
#3.출력 결과와 같이 사용자가 입력한 데이터를 모두 실수로 변경한 후 사각,삼각 넓이를 출력해보자

weidth, height = map(float, input('가로, 세로 길이 입력').split())

a1 = weidth *height     #삼각형
a2 = (weidth*height)/2  #사각

print('------- Result --------')
print('삼각형 넓이 : {}'.format(a1))
print('사격형 넓이 : {}'.format(a2))
print('삼각형 넓이 : %.2f' %a1)
print('사각형 넓이 : %.2f' %a2)
print('------------------------')

2-3 데이터와 변수(03)

#1.원의 반지름을 입력하면 원의 넓이와 둘레 길이를 출력하되, 아래와 같은 형식으로 출력해보자

pi = 3.14
radius= float(input('반지름(cm) 입력'))

circleArea = pi * radius * radius #원넓이
circleLength = 2* pi * radius #원 둘레


print('원의 넓이\t: %d'%circleArea) #d는 정수
print('원의 넓이\t: %d'%circleLength)

print('원의 넓이\t: %.1f'%circleArea)
print('원의 넓이\t:%.1f'%circleLength)

print('원의 넓이\t: %.3f'%circleArea)
print('원의 넓이\t:%.3f'%circleLength)




#2.사용자로부터 입력받은 개인정보를 포맷문자욜을 이용해서 다음과 같이 출력해보자
#(단, 비밀번호와 주민번호 뒷자리는 별표로 처리하자)********



# 사용자 정보 입력 받기
name = input('이름 입력: ')
mail = input('메일 입력: ')
id = input('아이디 입력: ')
pw = input('비밀번호 입력: ')
privateNumber1 = input('주민번호 앞자리 입력: ')
privateNumber2 = input('주민번호 뒷자리 입력: ')
address = input('주소 입력: ')

print('-' * 50)
print(f'이름: {name}')
print(f'메일: {mail}')
print(f'아이디: {id}')
pwStar = '*' * len(pw)  # 입력비밀번호를 문자열길이로 출력하면 6이되고 6 * '*' = ****** 이되는것이가.
print(f'비밀번호: {pwStar}')
privateNumber = privateNumber2[0] + ('*' * 6) #2+****** =2******
print(f'주민번호: {privateNumber1}-{privateNumber}')
print(f'주소: {address}')
print('-' * 50)

2-4 데이터와 변수(04)



#1.체중(g)와 신장(cm)을 입력하면 BMI 지수가 출력되는 프로그램을 만들어 보자.
#isdigit함수

# BMI = 몸무게(kg) / 신장(m) * 신장(m))
#isdigit()함수

weight = input('체중입력:')
height = input('신장 입력(cm):')

if weight.isdigit():
    weight = int(weight) / 10

if height.isdigit():
    height = int(height) / 100


print('체중: {}kg'.format(weight))
print('신장: {}kg'.format(height))

bmi = weight / (height * height)
print('BMI : %.2f' % bmi)



####################################################




#2. 다음코드에서 num1과 num2의 값을 서로 바꾸고 각각 출력해보자
num1 = 10
num2 = 20
print('num1: {}, num2: {}'.format(num1, num2))

tempNum = num1
num1 = num2
num2 = tempNum

print('num1: {}, num2: {}'.format(num1, num2))








################################################
#3.중간,기말고사 점수를 입력하면 총점과 평균이 출력되는 프로그램을 만들어보자


#중간,기말 총점과 평균
#isdigit함수 사용

score1 = input('중간 고사 점수:')
score2 = input('기말 고사 점수:')



if score1.isdigit() and score2.isdigit(): #둘다 문자열로 접근해야한다.
    score1 = int(score1)
    score2 = int(score2)

    totalscore = score1 + score2
    avgscore = totalscore / 2
    print('총점:{}, 평균: {}'.format(totalscore, avgscore))


else:
    print('잘 못 입력했습니다.')


2-5 데이터와 변수(05)

#1.키오스크에서 사용하는 언어 선택 프로그램을 만들어보자

selectNumber = input('언어 선택(Choose your language): 1.한국어\t 2.English ')

if selectNumber == '1':
    menu = '1.샌드위치 \t 2.햄버거 \t 3.쥬스 \t 4.커피 \t 5. 아이스크림'
elif selectNumber == '2':
    menu = '1.Sandwich \t 2. Hamburger \t 3.Juice \t 4. Coffee \t 5. Ice cream'

print(menu)







#######################################################
#2.나의 나이가 100살 되는 해의 연도를 구하는 프로그램을 만들어보자.
import datetime

today = datetime.datetime.today()

myAge = input('나이 입력:')
if myAge.isdigit():

    afterAge = 100 - int(myAge)
    myHundred = today.year + afterAge

    print('{}년({}년후)에 100살!!'.format(myHundred, afterAge))

else:
    print('잘 못 입력했습니다.')





3. 연산자

3-1 연산자[01]

1.상품 가격과 지불 금액을 입력하면 거스름 돈을 계산하는 프로그램을 만들어 보자
단, 거스름 돈은 지폐와 동전의 개수를 최소로 하고, 1원단위 절사한다.



money50000 = 50000
money10000 = 10000
money5000 = 5000
money1000 = 1000
money500 = 500
money100 = 100
money10 = 10

money50000Cnt = 0; money10000Cnt = 0; money5000Cnt = 0; money1000Cnt = 0
money500Cnt = 0; money100Cnt = 0; money10Cnt = 0


product_price = int(input('상품 가격 입력:'))
pay_price = int(input('지불 금액:'))


if pay_price > product_price:
    changeMoney = pay_price - product_price
    print(changeMoney)
    # changeMoney = changeMoney //10 # 3451 출력된다 원단위가 잘라져서 손해가발생
    changeMoney = (changeMoney // 10) * 10# 손해를 피하기 위해 10을 다시 곱한다.
    print('거스름돈: {}(원단위 절사)'.format(changeMoney))

if changeMoney > money50000:
    money50000Cnt = changeMoney // money50000 # 5만원지폐의 몫이 나온다.  ex)6만원 거스름돈이면 5만원 1장
    changeMoney %= money50000# 위에서 남은 잔돈을 changeMoney에 담았따.


if changeMoney > money10000:
    money10000Cnt = changeMoney // money10000
    changeMoney %= money10000


if changeMoney > money5000:
    money5000Cnt = changeMoney // money5000
    changeMoney %= money5000

if changeMoney > money1000:
    money1000Cnt = changeMoney // money1000
    changeMoney %= money1000

if changeMoney > money500:
    money500Cnt = changeMoney // money500
    changeMoney %= money500



if changeMoney > money100:
    money100Cnt = changeMoney // money100
    changeMoney %= money100

if changeMoney > money10:
    money10Cnt = changeMoney // money10
    changeMoney %= money10


print('-'*30)
print('50,000: {}장'.format(money50000Cnt))
print('10,000: {}장'.format(money10000Cnt))
print('5,000: {}장'.format(money5000Cnt))
print('1,000: {}장'.format(money1000Cnt))
print('500: {}개'.format(money500Cnt))
print('100: {}개'.format(money100Cnt))
print('10: {}개'.format(money10Cnt))



print('-'*30)

3-2 연산자 [02]

#1. 국어, 영어, 수학 점수 입력 후 총점, 평균, 최고점수 과목, 최저점수 과목,
#그리고 최고 점수와 최저 점수의 차이를 각각 출력해보자


korScore = int(input('국어 점수 입력:'))
engScore = int(input('영어 점수 입력:'))
mathScore = int(input('수학 점수 입력:'))

totalScore = korScore+engScore+mathScore
avgScore = (korScore+engScore+mathScore)/3


#최고점수 과목 구하기
maxScore = korScore
maxSubject = '국어'
if engScore > maxScore:
    maxScore = engScore
    maxSubject = '영어'

if mathScore > maxScore:
    maxScore = mathScore
    maxSubject = '수학'



#최저 점수 과목 구하기
minScore = korScore
minSubject = '국어'
if engScore < minScore:
    minScore = engScore
    minSubject = '영어'
    
if mathScore < minScore:
    minScore = mathScore
    minSubject = '수학'


#최고와 최저의 점수차이 구하기

difScore = maxScore - minScore

print('총점:{}'.format(totalScore))
print('평균:%.2f'%avgScore)
print('-'*30)
print('최고 점수과목 (점수):{}({})'.format(maxSubject, maxScore))
print('최저 점수과목 (점수):{}({})'.format(minSubject, minScore))
print('최고, 최저 점수 차이:  {}'.format(difScore))
print('-'*30)

3-3 연산자[03]

#1.시,분,초를 입력하면 초로 환산하는 프로그램을 만들어보자
hou =int(input('시간 입력:'))
min =int(input('분 입력:'))
sec =int(input('초 입력:'))


# hou * 60 * 60 + min * 60 + sec
#     분    초         초
#60분은 3600초
print('{}초'.format(format(hou * 60 * 60 + min * 60 +sec, ',')))







#2.금액, 이율, 거치기간을 입력하면 복리계산하는 복리계산기 프로그램을 만들어보자

money = int(input('금액 입력:'))
rate = float(input('이율 입력:'))
term = int(input('기간 입력:'))

targetMoney = money #복리가 지나서 받을돈

for i in range(term) :
   targetMoney =  targetMoney + (targetMoney * rate * 0.01)
    #왼쪽 targetMoney <--원금    오른쪽은 이자 --> (targetMoney * rate * 0.01)
targetMoneyFormated = format(int(targetMoney),',')

print('-' * 30)
print('이율 : {}'.format(rate))
print('원금 : {}'.format(format(money, ',')))
print('{}년 후 금액: {}원'.format(term, targetMoneyFormated))
print('-' * 30)

오늘의 후기

파이썬 기본 문법이 끝났다. 기본 문법은 쉽지만
문제풀이는 정말 어려웠다. 문제를 주어지면 혼자서 풀어보고 나서 강사님의 해설 강의를 보면서 이해했다. 스스로 코드를 작성 할 때는 되게 어렵지만 강사님의 코드를 보면 "아 이렇게 되는구나! 쉬운 문제였구나" 생각이 들었다. 자꾸만 나쁜 생각이 들었던 하루였다. 대학교와 국비 학원에서의 실패경험 때문일까 자꾸 겁을 먹게 된다. 곧 있으면 주말인데 시간표에는 주말 일정은 없지만, 주말에는
파이썬 공부를 더 해야겠다.

0개의 댓글