ABOUT ME

Today
Yesterday
Total
  • [python]조건과 반복, 리스트와 튜플 기반의 미니 프로젝트/종합 소득과세 계산/디지털 형태의 정수 출력/ 실생활 게임 코딩구현/로또/가위바위보
    Languages/python 2021. 5. 6. 16:33
    반응형

     

     

     

     

     

     

     

     

     

    종합소득 과세와 누진 공제액 계산

     

     

     

     

    mini project 1

     

    종합 소득 과세 표준 표의 이해와 누진 공제액 계산 기본

     

    종합 소득세 과세 방법을 이해하고 소득 금액에 따른 세금 계산

     

    income = 12_000000 // 0의 입력 편의를 위해 중간에 _를 사용할 수 있다.
    rate = 6/100
    print(income * rate)
    720000.0
    
    
    income = 20_000000
    rate1 = 6
    rate2 = 15
    tax = 12_000000 * rate1/100 + (income - 12_000000) * rate2/100
    print(MAX)
    1920000.0

     

     

     

     

     

    mini project2

     

    누진 공제액의 이해

     

    누진 공제액 108만원은 무엇일까?

     

    세금 계산의 편의를 위해 과세 표준 금액에 해당하는 최고 세율만 곱한 후, 과세 구간에 따라 빼야 할 금액

     

     

    1200만원 초과 ~ 4600만원 이하 구간에서의 누진 공제 금액

     

    1200만원이 넘는 소득에 대한 세율 15%를 모든 소득 금액에 적용하면,

    1200만원 이하의 구간에서는 15% - 6%인 9%에 대해 더 많은 세금이 계산

    이 차감해야 할 금액(1200만원 * (15%-6%)인 1백8만원)

     

    smoney = 12_000000
    rate1 = 6
    rate2 = 15
    deduction = smoney * (rate2 - rate1)/100
    print('누진 공제액:{:,}'.format(deduction)) // 수에 천단위마다 콤마가 표시된다
    누진 공제액:108,000,000

     

     

    mini prject 3

     

    종합 소득 과세 표준 표 계산 출력

     

    종합 소득 과세 표준 구간에 따른 기준 종합 소득

     

    base = (0, 12_000000, 46_000000, 88_000000, 150_000000, 300_000000, 500_000000)

     

    종합 소득 과세 표준 구간에 따른 세율

     

    rate = [6,15,24,35,38,40,42]

     

    구간에 따른 기준 소득 금액

     

    base = (0, 12_000000, 46_000000, 88_000000, 150_000000, 300_000000, 500_000000)

     

    구간에 따른 세율

     

    rate = [6,15,24,35,38,40,42]

     

    누진 공제 금액 계산

     

    deduction = [] // 빈 누진 공세 금액
    for i in range(len(base)-1):
    	dmoney = 0
        brate = rate[i+1]
        각 구간에서의 누진 공제액을 계산해 합
        for j in range(i+1):
        	dmoney += (base[j+1] - base[j] * (brate - rate[j])/100)
        deduction.append(dmoney) // 누진 공제 리스트에 추가

     

     

    mini project 4

     

    종합 소득 세금 출력

     

    taxrate = [(6,0),(15,1_080_000),(24,5_220_000), (35, 14_900_000),
               (38, 19_400_000), (40,25_400_000), (42,35_400_000)]
    base = (0, 12_000000, 46_000000, 88_000000, 150_000000, 300_000000, 500_000000)
    
    def getsection(income):
        if base[6] < income:
            section  = 6
        elif base[5] < income:
            section = 5
        elif base[4] < income:
            section = 4
        elif base[3] < income:
            section = 3
        elif base[2] < income:
            section = 2
        elif base[1] < income:
            section = 1
        else:
            section = 0
        return section
    
    income = int(input('종합 소득 금액 입력 >>>'))
    section = getsection(income)
    tax = income * taxrate[section][0]/100 - taxrate[section][1]
    
    print('종합 소득: {:,.0f}'.format(income))
    print('세율:{}%'.format(taxrate[section][0]))
    print('세금:{:,.0f}'.format(tax))
    
    
    ============ RESTART: C:/Users/study/파이썬 연습과제/iokp.py ===========
    종합 소득 금액 입력 >>>40000000
    종합 소득: 40,000,000
    세율:15%
    세금:4,920,000
    >>> 

     

     

     

     

     

     

     

    디지털 형태의 정수 출력

     

     

     

     

    mini project 6

     

    0에서 5까지의 자릿수로 구성되는 정수를 디지털 정수 모양으로 출력

     

     

    LCD = [[ "lllll",
             "l   l",
             "l   l",
             "l   l",
             "lllll"],
    
           [ "   l ",
             "  ll ",
             "   l ",
             "   l ",
             " llll"],
    
           [ "lllll",
             "    l",
             "lllll",
             "l    ",
             "lllll"],
    
           [ "lllll",
             "    l",
             "lllll",
             "    l",
             "lllll"],
    
           [ "l   l",
             "l   l",
             "lllll",
             "    l",
             "    l"],
    
           [ "lllll",
             "l    ",
             "lllll",
             "    l",
             "lllll"]]
    
    ROW = 5
    
    def printLCD(digit):
        for row in range(ROW):
            for i in range(len(digit)):
                num = int(digit[i])
                print(LCD[num][row], end = ' ')
            print()
    
    def checkdgt(s):
        tag = True
        for c in s:
            if c not in '012345':
                tag = False
                break
            return tag
        
    snum = '7'
    while not checkdgt(snum):
        snum = input("0 - 5 자릿수로만 정수형태 1개 입력 >>")
    
        printLCD(snum)
    
    
    
    ============ RESTART: C:/Users/study/파이썬 연습과제/iokp.py ===========
    0 - 5 자릿수로만 정수형태 1개 입력 >>2014
    lllll lllll    l  l   l 
        l l   l   ll  l   l 
    lllll l   l    l  lllll 
    l     l   l    l      l 
    lllll lllll  llll     l 
    >>> 

     

     

     

     

    실생활 게임을 코딩으로 구현

     

     

    mini project 7

     

    가위바위보게임

     

    항목 앞의 키에는 승자, 값에는 패자의 손 모양을 기술

     

     

     

     

    from random import choice
    
    madewin = {'가위' : '보',
               '바위' : '가위',
               '보' : '바위'}
    
    game = ['가위# 바위# 보 게임','가위','바위','보']
    msg = ['비겼습니다', '축하합니다! 당신이 winner*^^*']
    msg.append('아쉽지만, 컴퓨터가 이겼습니다')
    
    print((game[0] + '시작').center(55,'='))
    
    while True:
        try:
            s = '0(종료), 1(가위), 2(바위), 3(보[자기]) 중 하나 선택 >>'
            num = int(input(s))
        except:
            num = 1
    
        if num == 0:
            break;
    
        if not( 0 <= num <=3):
            print('\t 입력이 잘못됐습니다. 다시하세용 ~~')
            continue;
    
        player = game[num]
        com = choice(game[1:])
        if player == com:
            winner = 0
        elif madewin[player] == com:
            winner = 1
        else:
            winner = 2
    
        print('당신: ', player, 'vs', '컴퓨터', com)
        print(msg[winner] + '\n')
        
    print('\n','종료합니다'.center(55,'='))
    
    
    ============ RESTART: C:/Users/study/파이썬 연습과제/iokp.py ===========
    =====================가위# 바위# 보 게임시작====================
    0(종료), 1(가위), 2(바위), 3(보[자기]) 중 하나 선택 >>1
    당신:  가위 vs 컴퓨터 가위
    비겼습니다
    
    0(종료), 1(가위), 2(바위), 3(보[자기]) 중 하나 선택 >>3
    당신:  보 vs 컴퓨터 가위
    아쉽지만, 컴퓨터가 이겼습니다
    
    0(종료), 1(가위), 2(바위), 3(보[자기]) 중 하나 선택 >>0
    
     =========================종료합니다=========================
    >>> 
    

     

     

     

    mini project 8

     

    로또 번호 모의 실험

     

    from random import sample
    from random import randint
    
    rank = {6 : ('1등', 1000000000),
            5 : {1:('2등', 50000000),
                 0:('3등', 10000000)},
            4 : ('4등', 50000),
            3 : ('5등', 5000)
            }
    
    def makenum(same):
        nums = winnum.copy()
        for i in range(6-same):
            nums.pop()
    
        while len(nums) != 6:
            n = randint(1,45)
            if  n not in winnum:
                nums.add(n)
        return nums
    
    def getwinner(lotto):
        global bonus
        for i, item in enumerate(lotto):
            print('%c' % (ord('A') + i), end= ' ')
            win = winnum.intersection(item)
            if win:
                wincnt = len(win)
                print('당첨 번호 개수 %d, ' % wincnt, end='')
                printnums(win)
                if 3 <= wincnt:
                    grade = rank[wincnt]
                    if 5 == wincnt:
                        if bonus in item:
                            print('\t 보너스 번호 %d도 맞춤 !!! ' % bonus)
                            grade = rank[wincnt][1]
                        else:
                            grade = rank[wintcnt][0]
                    print('\t%s %s원' % (grade[0],grade[1]))
                else:
                    print('\t 2개 이하 맞춰, 꽝!')
            else:
                print('모두 꽝!!!!')
    
    
    def printlotto(lotto):
        for i, item in enumerate(lotto):
            print('%c 자동' % (ord('A') + i), end = ' ')
            printnums(item)
        print()
    
    def printnums(nums):
        for num in sorted(nums):
            print('%02d' % num, end=' ')
        print()
    winnum = set(sample(list(range(1,46)), 7))
    bonus = winnum.pop()
    
    print('당첨 번호:', end='' )
    print(winnum)
    print('보너스 번호:',bonus)
    print()
    
    lottos = []
    rank2num = winnum.copy()
    rank2num.pop(); rank2num.add(bonus)
    lottos.append(rank2num)
    
    rank3num = winnum.copy()
    rank3num.pop()
    
    while True:
        num = randint(1,45)
        if num != bonus and num not in rank3num:
            rank3num.add(num)
            break
        lottos.append(rank3num)
    
    for i in range(5):
        lottos.append(makenum(4 - i))
    
    
    printlotto(lottos)
    getwinner(lottos)
    
    
    
    
    ============ RESTART: C:/Users/study/파이썬 연습과제/iokp.py ===========
    당첨 번호:{38, 44, 12, 15, 28, 29}
    보너스 번호: 4
    
    A 자동 04 12 15 29 38 44 
    B 자동 11 12 15 38 41 44 
    C 자동 12 15 21 24 27 44 
    D 자동 02 03 12 15 35 37 
    E 자동 01 04 07 15 34 39 
    F 자동 04 08 13 20 22 31 
    
    A 당첨 번호 개수 5, 12 15 29 38 44 
    	 보너스 번호 4도 맞춤 !!! 
    	250000000원
    B 당첨 번호 개수 4, 12 15 38 44 
    	450000원
    C 당첨 번호 개수 3, 12 15 44 
    	55000원
    D 당첨 번호 개수 2, 12 15 
    	 2개 이하 맞춰, 꽝!
    E 당첨 번호 개수 1, 15 
    	 2개 이하 맞춰, 꽝!
    F 모두 꽝!!!!
    >>> 
    
    
    반응형

    댓글

Designed by Tistory.