[제로베이스 데이터 취업스쿨] 23.06.07 스터디 노트

김준호·2023년 6월 7일
0
post-thumbnail

반복문

1. for문

  • i는 range()에 있는 수를 받는 변수(지역변수)
  • range()괄호 안의 숫자는 반복문의 반복 횟수

문제1

입력하는 숫자에 맞는 구구단을 출력하는 코드 작성

userSelect = int(input('구구단 단수 입력 :'))

for i in range(9):
     result = userSelect * (i+1)
     print('{} * {} = {}'.format(userSelect,i+1,result))
구구단 단수 입력 :2
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18

range() 함수

  • 1부터 10까지 1씩 증가하면서 반복
  • 시작이 0이면 생략가능
  • 단계가 1이면 생략가능

while문

조건에 만족하면 반복 실행하고 만족하지 못하면 반복을 중단한다.

  • 조건식이 항상 True이면 무한루프가 발생한다.
  • 무한루프를 피하기 위해 False가 나올 상황을 실행문에 넣어줘야 한다.

문제1

1부터 100까지의 정수 중 2의 배수와 3의 배수를 구분해서 출력

n = 1

while n < 101:
    if n % 2 == 0:
        print('2의 배수 : {}'.format(n))
    elif n % 3 == 0:
        print('3의 배수 : {}'.format(n))
    n += 1
2의 배수 : 2
3의 배수 : 3
2의 배수 : 4
.
.
.
2의 배수 : 98
3의 배수 : 99
2의 배수 : 100

for문, while문 적합한 경우

for문 : 횟수에 의한 반복일 때
ex) 1~10까지의 합 --> 1에서 10까지 10번 반복

while문 : 조건에 의한 반복일 때 (정확한 반복의 횟수를 모를 때)
ex) 7의 배수 합이 50이상인 최초의 정수 --> 정확한 반복 횟수 명시x

무한 루프

반복문을 빠져 나올 수 없는 경우

  • 보통 while문에서 결과가 항상 True인 경우 발생

문제1

하루 독감으로 내방하는 환자 수가 50~100명 사이일 때 누적 독감 환자 수가 최초 10,000명을 넘을 때는 몇일이 걸리는지 구하기

import random

flag = True
data = 1
sum = 0

while flag:
        patientCount = random.randint(50,100)
        data += 1
        sum += patientCount

        if sum >= 10000:
            flag = False

print('날짜 : {}\t오늘 환자 : {} \t누적 환자 : {}'.format(data,patientCount,sum))
날짜 : 134	오늘 환자 : 54 	누적 환자 : 10005

반복문 제어 (continue, break)

  • continue : 반복 실행 중 continue를 만나면 실행을 생략하고 다시 반복문의 처음으로 돌아간다.
  • break : 반복 실행 중 break를 만나면 반복문을 빠져나온다.

continue 예제

0~99중 7의 배수만 출력

for i in range(100):
    if i % 7 != 0:
        continue		#i가 7이 아니면 반복문 처음으로 돌아가서 다음 반복문 실행
    print('7의 배수 : {}'.format(i))
7의 배수 : 0
7의 배수 : 7
7의 배수 : 14
.
.
7의 배수 : 91
7의 배수 : 98

break 예제

10의 팩토리얼(10!)을 계산하는 과정에서 결과값이 50을 넘을 때의 숫자를 구하자.

result = 1
num = 0

for i in range(1,11):
    result *= i

    if result > 50:
        num = i
        break				#result가 50이 넘었을 때 반복문을 나가라

print('num : {}, result : {}'.format(i,result))
num : 5, result : 120

중첩 반복문

반복문 안의 반복문

  • 보통 3개 이상 중첩하지 않음

직각삼각형 만들기

for i in range(1,11):
    for j in range(i):
        print('*', end='')
    print()
*
**
***
****
*****
******
*******
********
*********
**********

파이썬 기초 문제

문제1 : len()

사용자가 입력한 데이터의 길이를 출력하는 프로그램
(len() 함수 : 문자열의 길이를 알려줌)

userWrite = input('메시지 입력 : ')
print('메시지 문자열 길이 : {}'.format(len(userWrite)))
메시지 입력 : 안녕하세요
메시지 문자열 길이 : 5

문제2 : find()

다음 문장에 '객체지향'문자열을 찾아보자
(find()함수 : 찾고자 하는 문자열의 위치를 알려줌)

article = '파이썬[3](영어: Python)은 1991년[4] 네덜란드계 소프트웨어 엔지니어인 귀도 반 로섬[5]이 발표한 고급 프로그래밍 언어로, 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다. 파이썬이라는 이름은 귀도가 좋아하는 코미디인〈Monty Python\'s Flying Circus〉에서 따온 것이다. 이름에서 고대신화에 나오는 커다란 뱀을 연상하는 경우도 있겠지만 이와는 무관하다. 다만 로고에는 뱀 두마리가 형상화되어 있다.'
strIdx = article.find('객체지향')
print('\'객체지향\' 문자열 위치 : {}'.format(strIdx))
'객체지향' 문자열 위치 : 96

문제3 : str[0]

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

userName = input('이름 입력 : ')
mail = input('메일 입력 : ')
idenTity = input('아이디 입력 : ')
passWord = input('비밀번호 입력 : ')
frontId = input('주민 앞 입력 : ')
backId = input('주민 뒷 입력 : ')
address = input('주소 입력 : ')

print('-'*30)
print('이름 : {}'.format(userName))
print('메일 : {}'.format(mail))
print('아이디 : {}'.format(idenTity))

pws = '*'* len(passWord)
print(f'비밀번호 : {pws}')

backIDtran = backId[0] + '*'*6
print(f'주민번호 : {frontId} - {backIDtran}')

print('주소 : {}'.format(address))
print('-'*30)
이름 입력 : 홍길동
메일 입력 : hong@gmail.com
아이디 입력 : hongID
비밀번호 입력 : 12345678
주민 앞 입력 : 840921
주민 뒷 입력 : 2018543
주소 입력 : seoul
------------------------------
이름 : 홍길동
메일 : hong@gmail.com
아이디 : hongID
비밀번호 : ********
주민번호 : 840921 - 2******
주소 : seoul
------------------------------

문제4 : isdigit()

체중(g)과 신장(cm)을 입력하면 BMI지수가 출력되는 프로그램

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

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

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

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

bmi = weight / height**2
print('BMI : %.2f'%bmi)
체중 입력(g) : 8850
신장 입력(cm) : 187
체중 : 88.5kg
체중 : 1.87m
BMI : 25.31

문제5

상품 가격과 지불 금액을 입력하면 거스름 돈을 계산하는 프로그램
단, 거스름 돈은 지폐와 동전의 개수를 최소로 하고, 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

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

if payPrice > productPrice:
    changeMoney = payPrice - productPrice
    changeMoney = (changeMoney // 10) *10	#1원 절사
    print('거스름 돈 : {}(원단위 절사)'.format(changeMoney))
if changeMoney > money50000:
    money50000Cnt = changeMoney // money50000
    changeMoney = changeMoney % money50000  #changeMoney %= money50000

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

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

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

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

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

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


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))
상품 가격 입력 : 35432
지불 금액 : 100000
거스름 돈 : 64560(원단위 절사)
50,000 1장
10,000 1장
5,000 0장
1,000 4장
500 1개
100 0개
10 6개

문제6

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

totalScore = korScore + engScore + matScore
avgScore = totalScore / 3

maxScore = korScore     #최고 점수가 국어라고 가정
maxSubject = '국어'
if engScore > maxScore:
    maxScore = engScore
    maxSubject ='영어'

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

minScore = korScore		#최저 점수가 국어라고 가정
minSubject = '국어'
if engScore < minScore:
    minScore = engScore
    minSubject ='영어'

if matScore < minScore:
    minScore = matScore
    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)
국어 점수 입력: 90
영어 점수 입력: 85
수학 점수 입력: 55
총점 : 230
평균 : 76.67
------------------------------
최고 점수 과목(점수): 국어(90)
최고 점수 과목(점수): 수학(55)
최고 최저 점수 차이: 35
------------------------------

문제7

orgPrice = int(input('금액 입력 :'))
incPrice = float(input('이율 입력 :'))
date = int(input('기간 입력 :'))

targetMoney = orgPrice

for i in range(date):
    			#(targetMoney  * incPrice *0.01) 는 이자 
    targetMoney += targetMoney * incPrice * 0.01

print('-'*30)
print('이율 : %.1f'%incPrice+'%')
print('원금 : {}원'.format(format(orgPrice,',')))
print('{}년 후 금액 : {}원'.format(date,format(int(targetMoney), ',')))
print('-'*30)
금액 입력 :1500000
이율 입력 :4.3
기간 입력 :5
------------------------------
이율 : 4.3%
원금 : 1,500,000원
5년 후 금액 : 1,851,453원
------------------------------
profile
취업공부

0개의 댓글