파이썬 복습2

김보혜·2022년 8월 13일
0

본격적으로 파이썬에서 많이 쓰고 연관성이 많은것들을 복습해보고자 한다.

1.함수
어떤 입력값을 넣었을때 어떤 결과물이 나오는것이다.
학창시절에 배웠던 함수를 생각하면
y= 2x+4라는 함수에 x=1이면 y=6,x=3이면 y=10에서 x=입력받은 값 이 되고 y=출력값이 된다.
함수의 형식은 아래와 같다

del 함수이름(매개변수):
	수행문장1
    수행문장1

어려웠던 코드를 복습해보도록 한다

1)등차수열 등비수열 구하기


def seqCal(n1,d,n): #초항,등차,n항
    valueN = 0 ; sumN = 0;  #N항의 값,N항까지의 합

    i = 1
    while i <= n:
        if i == 1:
            valueN = n1
            sumN += valueN
            print(f'{i}번째 항의값:{valueN}')
            print(f'{i}번째 항까지의 합:{sumN}')


            i+=1
            continue

        valueN += d
        sumN += valueN
        print(f'{i}번째 항의값:{valueN}')
        print(f'{i}번째 항까지의 합:{sumN}')

        i+=1

inputN1 = int(input('a1입력 :'))
inputD = int(input('공차입력 : '))
inputN = int(input('n입력 : '))

seqCal(inputN1,inputD,inputN)

일단 등차수열이란 어떤 수가 일정한 양으로 커지는 것을 나열한것이다. 이점으로 보아 반복문이 쓰일 것으로 예상되었다.

일단 위에서의 코드에선 수열과 그합을 구한다.
그래서 위의 함수에서 매개변수 n1,d,n(초항,등차,n항)를 정한다음 바로 valueN = 0 ; sumN = 0; (N항의 값,N항까지의 합)을 만들어 값을 담을수 있는 변수를 만들었다.

while안에 있는 첫번째if는 n이 1일때의 경우의 코드여서 등차수열이 초항만 있는 경우를 구한것이고, 두번째 if는 그외의 정수가 d일때의 경우를 구한것이다.

등비수열도 마찬가지로 이런 식으로 구했다



def seqCal(n1,r,n):
    valueN=0; sumN = 0;

    i=1 #무한루프에 안빠지기 위해서 i=1이라고 함
    while i <= n:
        if i==1:
            valueN = n1
            sumN = valueN
            print(f'{i}번째 항의 값: {valueN}' )
            print(f'{i}번째 항까지의 합: {sumN}' )

            i+= 1
            continue

        valueN *= r
        sumN += valueN
        print(f'{i}번째 항의 값 : {valueN}' )
        print(f'{i}번째 항까지의 합: {sumN}')
        i+= 1

inputN1 = int(input('a1입력 :'))
inputR = int(input('공비입력 : '))
inputN = int(input('n입력 : '))

seqCal(inputN1,inputR,inputN)

등비수열은 첫항에서 일정한 양을 곱하는 것으로 등차수열과 똑같지만 등비수열이므로 valueN이 *+가 된다

2.클래스
무언가를 계속해서 만들어내는 설계도면. 이 도면으로 만들어낸것이 객체

1)로또 구하기

import lotto as lt

lt.startLotto()

위의 식은 만든 클래스를 실행하는 코드이다.

import  random

userNums = []; randNums = []; collNums = []
randB = 0;

def setUserNum(ns):
    global userNums
    userNums = ns

def getUserNums():
    return  userNums

def setRandNums():
    global randNums
    randNums = random.sample(range(1,46),6)

def getRandNums():
    return  randNums

def setRandB():
    global randB

    while True:
        randB = random.randint(1,45)
        if randB not in randNums:
            break

def getRandB():
    return  randB

def lottoResult():
    global  userNums
    global  randNums
    global collNums

    collNums = []
    for un in userNums:
        if un in randNums:
            collNums.append(un)
    if len(collNums) == 6:
        print('1등당첨')
        print(f'번호 : {collNums}')
    elif(len(collNums)) == 5 and (randB in userNums):
        print('2등당첨')
        print(f'번호 : {collNums},보너스 번호 : {randB}')

    elif len(collNums) == 5:
        print('3등당첨')
        print(f'번호 : {collNums}')

    elif len(collNums) == 4:
        print('4등당첨')
        print(f'번호 : {collNums}')
    elif len(collNums) == 3:
        print('5등당첨')
        print(f'번호 : {collNums}')

    else:
        print('꽝')
        print(f'기계번호 : {randNums}')
        print(f'보너스번호 : {randB}')
        print(f'선택번호 : {userNums}')
        print(f'일치번호 : {collNums}')

def startLotto():
   n1= int(input('번호입력 (1~45) : '))
   n2= int(input('번호입력 (1~45) : '))
   n3= int(input('번호입력 (1~45) : '))
   n4= int(input('번호입력 (1~45) : '))
   n5= int(input('번호입력 (1~45) : '))
   n6= int(input('번호입력 (1~45) : '))
   selectNums = [n1,n2,n3,n4,n5,n6]

   setUserNum(selectNums)
   setRandNums()
   setRandB()

   lottoResult()


로또는 숫자가 나열된 수열이므로 수열을 먼저 만들어준다.
userNums은 사용자가 쓴 로또번호, randNums 생성된 로또번호,randB 보너스 번호이다.

randB 라는 보너스 번호는 randNums처럼 사용자에게서 입력받는 것도 아니고 랜덤생성에 randNums과 겹치면 안되니 randB를 생성하는 함수에 while True를 사용하여 겹치지 않게 랜덤으로 뽑으라고 하고있다.
그리고 변수 생성할때 glober을 붙여서 다른함수에서도 일일이 생성하지 않아도 인식되는 전역변수로 만들었다.
lottoResult라는 함수를 보면 collNums라는 변수와수열이 나타나는데 이는 userNums에 있는 randNums의 숫자를 나타내는 변수로 맞은 숫자를 보여준다.

3.모듈
함수,변수,클래스 모은 파일을 모아둔 것,누군가가 만들어 둔 것을 그대로 쓸수도 있다.

합/불합 판정해주는 프로그램 만들기 (평균 60 이상 합격, 과락 40)

import pOrf
if __name__ == '__main__':
    sub1 = int(input('과목1 점수 입력: '))
    sub2 = int(input('과목2 점수 입력: '))
    sub3 = int(input('과목3 점수 입력: '))
    sub4 = int(input('과목4 점수 입력: '))
    sub5 = int(input('과목5 점수 입력: '))

    pOrf.exampleResult(sub1,sub2,sub3,sub4,sub5)

위의 코드는 점수를 입력받고 프로그램의 결과를 보여주는 코드이다.

이 코드에서 가장 눈에 띄는 것을 보면 if name == 'main': 일 것이다.
일단 말 그대로 생각하자면 만약 name이 'main'이면 실행하라 이다.
일단 name 은 전역 변수이고 모듈이름이 저장되는데 그 이름은 'main'이 저장된다.
이것을 이용해 실행파일을 구분할 수 있다.

def exampleResult(s1,s2,s3,s4,s5):
    passAvgScore = 60; limitScore = 40

    def getTotal():
        totalScore = s1+s2+s3+s4+s5
        print(f'총점 : {totalScore}')
        return  totalScore

    def getAverage():
        avg = getTotal()/5
        print(f'평균 : {avg}')
        return avg

    def printPorF():
        print(f'{s1}:Pass') if s1 >= limitScore else print(f'{s1}:Fail')
        print(f'{s2}:Pass') if s2 >= limitScore else print(f'{s2}:Fail')
        print(f'{s3}:Pass') if s3 >= limitScore else print(f'{s3}:Fail')
        print(f'{s4}:Pass') if s4 >= limitScore else print(f'{s4}:Fail')
        print(f'{s5}:Pass') if s5 >= limitScore else print(f'{s5}:Fail')

    def printfinal():
        if getAverage() >= passAvgScore:
            if s1 >= limitScore and s2 >= limitScore and s3 >= limitScore and s4 >= limitScore and s5 >= limitScore:
                print('Final Pass')
            else:
                print('Final Fail')
        else:
            print('Final Fail')

    getAverage()
    printPorF()
    printfinal()

평균과, 과락이 존재하니 변수 passAvgScore = 60; limitScore = 40를 설정했고, 첫 함수로 과목 전체 점수의 합을 구하는 함수를 만들었다.
def printPorF():함수는 각 과목마다 if조건문을 써서 과락을 구분하는 함수이고
def printfinal():함수는 if문을 써서 평균점수 이상 인지에 대한 유무를 판결했고, 각 과목마다 과락을 넘겼는지에 대한 유무를 판결하게 해서 최종시험에 통과 했는지 못했는지에 대한 유무를 알려주고 있다.

profile
데이터 직무로 길 찾는중

0개의 댓글