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

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

문제1. 국영수 편차 그래프

korAvg = 85; engAvg = 82; matAvg = 89; sciAvg = 75; hisAvg = 94;
totalAvg = korAvg+engAvg+matAvg+sciAvg+hisAvg
avgAvg = int(totalAvg / 5)

korScore = int(input('국어 점수 : '))
engScore = int(input('영어 점수 : '))
matScore = int(input('수학 점수 : '))
sciScore = int(input('과학 점수 : '))
hisScore = int(input('국사 점수 : '))

totalScore = korScore +engScore+ matScore+sciScore+ hisScore
avgScore = int(totalScore / 5)

korGap = korScore - korAvg
engGap = engScore - engAvg
matGap = matScore - matAvg
sciGap = sciScore - sciAvg
hisGap = hisScore - hisAvg


print('-'*70)
print('총점 : {}({}), 평균 : {}({})'.format(totalScore,totalScore-totalAvg, avgScore,avgScore-avgAvg))
print('국어 : {}({}), 영어 : {}({}), 수학 : {}({}), 과학 : {}({}), 국사 : {}({}) '.format(korScore,korGap,engScore,engGap\
                                                                                ,matScore,matGap,sciScore,sciGap,
                                                                                hisScore,hisGap))
print('-'*70)
str = '+' if korGap > 0 else '-'
print('국어 편차: {}({})'.format(str*abs(korGap),korGap))
str = '+' if engGap > 0 else '-'
print('영어 편차: {}({})'.format(str*abs(engGap),engGap))
str = '+' if matGap > 0 else '-'
print('수학 편차: {}({})'.format(str*abs(matGap),matGap))
str = '+' if sciGap > 0 else '-'
print('과학 편차: {}({})'.format(str*abs(sciGap),sciGap))
str = '+' if hisGap > 0 else '-'
print('국사 편차: {}({})'.format(str*abs(hisGap),hisGap))
print('-'*70)
국어 점수 : 90
영어 점수 : 80
수학 점수 : 70
과학 점수 : 60
국사 점수 : 50
----------------------------------------------------------------------
총점 : 350(-75), 평균 : 70(-15)
국어 : 90(5), 영어 : 80(-2), 수학 : 70(-19), 과학 : 60(-15), 국사 : 50(-44) 
----------------------------------------------------------------------
국어 편차: +++++(5)
영어 편차: --(-2)
수학 편차: -------------------(-19)
과학 편차: ---------------(-15)
국사 편차: --------------------------------------------(-44)
----------------------------------------------------------------------

abs() : 절대값으로 변환해주는 함수


문제2. 상수도 요금표 만들기

jobType = int(input('업종 선택(1.가정용 \t2.대중탕용 \t3.공업용) :'))
waterUse = int(input('사용량 입력:'))

result =''
if jobType == 1:
    result = waterUse * 540
elif jobType == 2:
    if waterUse <= 50:
        result = waterUse * 820
    elif waterUse > 50 and waterUse <= 300:
        result = waterUse*1920
    elif waterUse > 300:
        result = waterUse *2400
elif jobType == 3:
    if waterUse <= 500:
        result = waterUse * 240
    else:
        result = waterUse *470
else:
    print('잘못 입력 했습니다.')

print("="*30)
print('상수도 요금 표')
print('-'*30)
print(f'사용량 \t:\t요금')
print('{} \t:\t{}원'.format(waterUse,format(result,',')))
print("="*30)
업종 선택(1.가정용 	2.대중탕용 	3.공업용) :2
사용량 입력:270
==============================
상수도 요금 표
------------------------------
사용량 	:	요금
270 	:	518,400원
==============================

문제3. 난수 발생시켜 맞추는 게임

import random

rNum = random.randint(1,1000)
userSelectCnt = 0
flag = True

while flag:
    userSelectCnt += 1
    userSelectNum = int(input('1에서 1000까지의 정수 입력: '))

    if rNum == userSelectNum:
        print('빙고!')
        flag = False
    else:
        if rNum > userSelectNum:
            print('난수가 크다')
        else:
            print('난수가 작다')

print('난수 : {}, 시도 횟수 : {}'.format(rNum,userSelectCnt))
1에서 1000까지의 정수 입력: 500
난수가 크다
1에서 1000까지의 정수 입력: 750
난수가 작다
1에서 1000까지의 정수 입력: 650
난수가 크다
1에서 1000까지의 정수 입력: 700
난수가 크다
1에서 1000까지의 정수 입력: 725
난수가 작다
1에서 1000까지의 정수 입력: 715
난수가 크다
1에서 1000까지의 정수 입력: 720
난수가 크다
1에서 1000까지의 정수 입력: 723
난수가 크다
1에서 1000까지의 정수 입력: 724
빙고!
난수 : 724, 시도 횟수 : 9

문제4. '*'로 모양 만들기

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

for i1 in range(1,6):
    for i2 in range(5-i1):
        print(' ',end='')
    for i3 in range(i1):
        print('*',end='')
    print()
    *
   **
  ***
 ****
*****

for i in range(5,0,-1):
    for j in range(i):
        print('*',end='')
    print()
*****
****
***
**
*

for i in range(5,0,-1):
    for j in range(5-i):
        print(' ',end='')
    for k in range(i):
        print('*',end='')
    print()
*****
 ****
  ***
   **
    *

for i in range(1,10):
    if i<5 :
        for j in range(i):
            print('*', end='')
    else:
        for j in range(10 -i):
            print('*', end='')
    print()
*
**
***
****
*****
****
***
**
*

for i in range(1,6):
    for j in range(1,6):
        if i == j:
            print('*',end='')
        else:
            print(' ',end='')
    print()
*    
 *   
  *  
   * 
    *

for i in range(5,0, -1):
    for j in range(1,6):
        if j == i:
            print('*', end='')
        else:
            print(' ', end='')
    print()
    *
   * 
  *  
 *   
*

for i1 in range(1, 6):
    for i2 in range(5 - i1):
        print(' ', end='')

    for n3 in range(i1 * 2 - 1):
        print('*', end='')
    print()

for i1 in range(1, 6):
    for i2 in range(i1 - 1):
        print(' ', end='')

    for n3 in range(11 - (i1 * 2)):
        print('*', end='')
    print()
    *
   ***
  *****
 *******
*********
*********
 *******
  *****
   ***
    *

문제5. 버스 운행 정보

busA = 15
busB = 13
busC = 8

totalMin = 60*17

for i in range(totalMin+1):
    if i<20 or i > totalMin - 60:
        if i % busA == 0 and i % busB ==0:
            print('busA와 busB 동시 정차!!', end='')
            hour = 6 + i //60
            min = i % 60
            print('{}:{}'.format(hour,min))
    else:
        if i % busA == 0 and i % busB == 0:
            print('busA와 busB 동시 정차!!', end='')
            hour = 6 + i // 60
            min = i % 60
            print('{}:{}'.format(hour, min))
        elif i % busA == 0 and i % busC ==0:
            print('busA와 busC 동시 정차!!', end='')
            hour = 6 + i // 60
            min = i % 60
            print('{}:{}'.format(hour, min))
        elif i % busB == 0 and i % busC ==0:
            print('busB와 busC 동시 정차!!', end='')
            hour = 6 + i // 60
            min = i % 60
            print('{}:{}'.format(hour, min))
busA와 busB 동시 정차!!6:0
busB와 busC 동시 정차!!7:44
busA와 busC 동시 정차!!8:0
busA와 busB 동시 정차!!9:15
busB와 busC 동시 정차!!9:28
busA와 busC 동시 정차!!10:0
busB와 busC 동시 정차!!11:12
busA와 busC 동시 정차!!12:0
busA와 busB 동시 정차!!12:30
busB와 busC 동시 정차!!12:56
busA와 busC 동시 정차!!14:0
busB와 busC 동시 정차!!14:40
busA와 busB 동시 정차!!15:45
busA와 busC 동시 정차!!16:0
busB와 busC 동시 정차!!16:24
busA와 busC 동시 정차!!18:0
busB와 busC 동시 정차!!18:8
busA와 busB 동시 정차!!19:0
busB와 busC 동시 정차!!19:52
busA와 busC 동시 정차!!20:0
busB와 busC 동시 정차!!21:36
busA와 busC 동시 정차!!22:0
busA와 busB 동시 정차!!22:15

문제6. 톱니바퀴

gearACnt = int(input('GearA 톱니수 입력 :'))
gearBCnt = int(input('GearB 톱니수 입력 :'))

gearA = 0
gearB = 0
leastNum = 0
flag = True

while flag:
    if gearA != 0:
        if gearA != leastNum:
            gearA += gearACnt
        else:
            flag = False
    else:
        gearA += gearACnt

    if gearB != 0 and gearB % gearACnt == 0:
        leastNum = gearB
    else:
        gearB += gearBCnt
print('최초 만나는 톱니 수 (최소공배수):{}톱니'.format(leastNum))
print('GearA 회전수: {}, gearB 회전수: {}'.format(gearA//gearACnt, gearB//gearBCnt))
GearA 톱니수 입력 :7
GearB 톱니수 입력 :12
최초 만나는 톱니 수 (최소공배수):84톱니
GearA 회전수: 12 
gearB 회전수: 7

1. 함수

  1. 내장 함수 : 파이썬에서 기본으로 제공하는 함수
  2. 사용자 지정 함수 : 사용자가 직접 선언하는 함수
  • 함수 사용 이유: 특정 기능을 효율적으로 재사용 하기 위해(변수 사용 이유와 유사)

1) 함수 선언

2) 함수 호출

  • 함수명과 '()'를 이용해서 함수를 호출한다.

예제1. 정수 두개를 입력하면 곱셈과 나눗셈 결과를 출력하는 함수 만들고 호출

#함수선언
def culMulDiv():
    n1 = int(input('n1 입력: '))
    n2 = int(input('n2 입력: '))

    print(f'n1 * n2 = {n1*n2}')
    print(f'n1 / n2 = {round(n1/n2,2)}')	#round(n1/n2,2)는 n1/n2를 소수점 2째자리까지 출력

#함수호출
culMulDiv()
n1 입력: 10
n2 입력: 3
n1 * n2 = 30
n1 / n2 = 3.33

3)함수 내에서 또 다른 함수 호출 가능

def fun1():
    print('fun1 호출')
    fun2()

def fun2():
    print('fun2')
    fun3()
def fun3():
    print('fun3')

fun1()
fun1 호출
fun2
fun3

4) ⭐인수와 매개변수⭐

  • 인수 : 함수 호출부에서 던지는 데이터
  • 매개변수 : 인수를 어떠한 변수로 받는 것(변수의 일종으로 해당 함수 안에서만 사용하는 지역변수)
  • 인수와 매개변수의 개수는 일치해야 한다.
  • 매개변수 개수가 정해지지 않았을 때는 '*'를 사용한다.
  • [매개변수 개수] 를 [입력한 인수의 개수]와 [맞춰준다] 라고 생각(내생각)

5) 데이터 반환 : return 키워드

  • 함수 실행 결과를 호출부로 반환 할 수 있다.
  • 함수 자체를 변수처럼 이용할 때 return을 사용하는 듯. 매번 그렇진 않다.
  • 함수가 return을 만나면 실행을 종료한다.

예제1. 1부터 100까지의 정수 중에서 홀수인 난수를 반환하는 함수 선언

import random
def rNumOdd():
    while True:
        rNum = random.randint(1,100)
        if rNum % 2 !=0:
            break
    return rNum

returnValue = rNumOdd()
print(f'returnValue : {returnValue}')
returnValue : 55

6) 전역변수

  • 함수 밖에 선언된 변수로 어디에서나 사용은 가능하지만 함수 안에서 수정은 불가하다.

7) 지역변수

  • 함수 안에 선언된 변수로 함수 안에서만 사용 가능하다.

global 키워드

  • global키워드를 사용하면 함수 안에서도 전역변수를 수정 할 수 있다.

예제1.

#전역변수 선언
num_out = 10

#함수 선언
def printNimbers():
    global num_out
    
    #전역변수 변경	
    num_out = 20
    print(f'num_out : {num_out}')

printNimbers()
print(f'num_out : {num_out}')
num_out : 20
num_out : 20

문제1. 방문객 수를 카운트 하는 함수를 만들어 보자

totalVisit = 0
def countTotalVisit():
    global totalVisit
    totalVisit +=1
    print(f'누적방문객 : {totalVisit}')
    return totalVisit


countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()
countTotalVisit()
누적방문객 : 1
누적방문객 : 2
누적방문객 : 3
누적방문객 : 4
누적방문객 : 5

8)중첩함수

  • 함수 안에 또 다른 함수가 있는 형태
  • 내부 함수를 함수 밖에서 호출 할 수 없다.

문제1. 사칙연산 계산기 만들기

def calculator(n1,n2,operator):

    def addCal():
        print(f'덧셈 연산 : {n1+n2}')
    def subCal():
        print(f'뺄셈 연산 : {n1 - n2}')
    def mulCal():
        print(f'곱셈 연산 : {n1 * n2}')
    def divCal():
        print(f'나눗셈 연산 : {n1 / n2}')

    if operator == 1:
        addCal()
    elif operator ==2:
        subCal()
    elif operator ==3:
        mulCal()
    elif operator ==4:
        divCal()

while True:
  num1 =  float(input('실수(n1) 입력:'))
  num2 =  float(input('실수(n2) 입력:'))
  operatorNum = int(input('1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.종료'))

  if operatorNum ==5:
      print('Bye~')
      break

  calculator(num1,num2,operatorNum)
실수(n1) 입력:4
실수(n2) 입력:3
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.종료1
덧셈 연산 : 7.0
실수(n1) 입력:5
실수(n2) 입력:6
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.종료2
뺄셈 연산 : -1.0
실수(n1) 입력:6
실수(n2) 입력:5
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.종료5
Bye~

9)lambda 키워드

  • 함수 선언을 보다 간단하게 할 수 있다.
  • 간단한 계산식 함수 선언으로 좋다.
calculator = lambda n1,n2:n1+n2    #간단한 함수는 이런식으로 선언및 호출 가능
returnVAl = calculator(10, 20)
print(f'returnVal = {returnVAl}')
returnVal = 30

2. 모듈

  • 이미 만들어진 훌륭한 기능으로 사용자가 쉽게 사용 가능
  • 내부모듈: 파이썬에 기본적으로 사용할 수 있는 모듈
  • 외부모듈 : 별도 설치 후 사용할 수 있는 모듈 --> 판다스, 넘파이 ...
  • 사용자 모듈 : 사용자가 직접 만든 모듈

1) 모듈 제작

  • 모듈은 특정 기능을 가지고 있는 파이썬 파일(xxx.py)을 말한다.

문제1. 로또 번호 생성하는 모듈을 만들어 보자

# <ranNum.py> --> 따로 생성한 .py파일
#모듈 제작
import random
def lotNumMaker():
    result = random.sample(range(1,46),6)
    return result
    
<lottoNumberMaker.py> --> 메인 패이지
#제작한 모듈 선언
import ranNum

#모듈 사용법 : 모듈명.모듈 내부 함수
returnNum = ranNum.lotNumMaker()

print(f'로또번호 : {returnNum}')
profile
취업공부

0개의 댓글