Languages/python

[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도 맞춤 !!! 
	2등 50000000원
B 당첨 번호 개수 4, 12 15 38 44 
	4등 50000원
C 당첨 번호 개수 3, 12 15 44 
	5등 5000원
D 당첨 번호 개수 2, 12 15 
	 2개 이하 맞춰, 꽝!
E 당첨 번호 개수 1, 15 
	 2개 이하 맞춰, 꽝!
F 모두 꽝!!!!
>>> 

반응형