python basic - (13) 기초문제풀이3

jun hyeon·2023년 8월 6일

python

목록 보기
13/21
post-thumbnail

문제 출처 - 제로베이스 데이터 스쿨

▶Ex11 조건문을 이용해서 프로그램의 실행을 분기

cNum = random.randint(1,3)
pNum = int(input('선택 - 1.가위 \t 2.바위 \t 3.보'))

if (cNum ==1 and pNum ==2) or (cNum==2 and pNum==3) or (cNum ==3 and pNum ==1):
    print('com defeat, player win')
elif cNum == pNum:
    print('draw')
else:
    print('com win, player defeat')

print('com : {}, player : {}'.format(cNum,pNum))
#출력
선택 - 1.가위 	 2.바위 	 3.보2
com defeat, player win
com : 1, player : 2

💡포인트는 첫 if문이 었던 것 같다. 그 외에는 어렵지 않았다.


▶Ex12 조건문을 이용해서 프로그램의 실행을 분기

import datetime

dust = int(input('enter dust : '))
type = int(input('enter car type 1.comfort \t 2.business'))
cNum = int(input('enter car number : '))
curDate = datetime.datetime.now()
day = datetime.datetime.now().day

print('-' * 30)
print(curDate)
print('-' * 30)
if dust > 150 and type == 1:
    if day % 2 == cNum % 2:
        print('2부제')
        print('운행제한')
    else:
        print('운행가능')

if dust > 150 and type == 2:
    if day % 5 == cNum % 5:
        print('5부제')
        print('운행제한')
    else:
        print('운행가능')

if dust <= 150 :
    if day % 5 == cNum % 5:
        print('5부제')
        print('운행제한')
    else:
        print('운행가능')

print('-' * 30)
#출력
enter dust : 155
enter car type 1.comfort 	 2.business1
enter car number : 7456
------------------------------
2023-06-14 00:43:35.849013
------------------------------
2부제
운행제한
------------------------------

💡에러가 나서 헤맸다. 못찾아서 구글링 해보니 'IndentationError : 들여쓰기 에러' 라는 것을 알게되었다. datetime 모듈의 이용법도 조금 더 알게 되었다.


▶Ex13 조건문을 이용해서 프로그램의 실행을 분기

import random

rNum = random.randint(1,1000)
tryCount = 0
gameFlag = True

while gameFlag:
    tryCount += 1
    pNum = int(input('enter 1~1000 Number : '))

    if rNum == pNum:
        print('correct!')
        gameFlag = False #
    else:
        if rNum > pNum:
            print('Num is bigger')
        else:
            print('Num is smaller')

print('randomNumber : {}, tryCount : {}'.format(rNum, tryCount))
#출력
enter 1~1000 Number : 500
Num is smaller
enter 1~1000 Number : 250
Num is smaller
enter 1~1000 Number : 125
Num is bigger
enter 1~1000 Number : 187
Num is bigger
enter 1~1000 Number : 219
Num is smaller
enter 1~1000 Number : 203
Num is bigger
enter 1~1000 Number : 211
Num is bigger
enter 1~1000 Number : 215
Num is bigger
enter 1~1000 Number : 217
Num is smaller
enter 1~1000 Number : 216
correct!
randomNumber : 216, tryCount : 10

💡'tryCount'를 어디쯤에서 연산-할당 해야할 지를 고민했던 것 같다. 알고나니 이해가 쉬웠는데, 막상 고민할 때는 어려웠다.


▶Ex14 반복문을 이용해서 프로그램의 실행을 반복

for i in range(1,101):
    if i < 10:
        if i % 2 == 0:
            print('[{}] : 짝수!'.format(i))
        else:
            print('[{}] : 홀수!'.format(i))

    else:
        num10 = i // 10
        num1 = i % 10

        result10 = ''
        if num10 % 2 ==0:
            result10 = '짝수!'
        else :
            result10 = '홀수!'

        result1 = ''
        if num1 != 0 and num1 % 2 == 0:
            result1 = '짝수!'
        elif num1 == 0:
            result1 = '0'
        else:
            result1 = '홀수!'

        print('[{}] 십의자리 : {},  일의자리 : {}'.format(i, result10, result1))
#출력
[1] : 홀수!
[2] : 짝수!
[3] : 홀수!
[4] : 짝수!
[5] : 홀수!
[6] : 짝수!
[7] : 홀수!
[8] : 짝수!
[9] : 홀수!
[10] 십의자리 : 홀수!,  일의자리 : 0
[11] 십의자리 : 홀수!,  일의자리 : 홀수!
[12] 십의자리 : 홀수!,  일의자리 : 짝수!
[13] 십의자리 : 홀수!,  일의자리 : 홀수!
[14] 십의자리 : 홀수!,  일의자리 : 짝수!
[15] 십의자리 : 홀수!,  일의자리 : 홀수!
[16] 십의자리 : 홀수!,  일의자리 : 짝수!
[17] 십의자리 : 홀수!,  일의자리 : 홀수!
[18] 십의자리 : 홀수!,  일의자리 : 짝수!
[19] 십의자리 : 홀수!,  일의자리 : 홀수!
[20] 십의자리 : 짝수!,  일의자리 : 0
[21] 십의자리 : 짝수!,  일의자리 : 홀수!
[22] 십의자리 : 짝수!,  일의자리 : 짝수!
[23] 십의자리 : 짝수!,  일의자리 : 홀수!
[24] 십의자리 : 짝수!,  일의자리 : 짝수!
[25] 십의자리 : 짝수!,  일의자리 : 홀수!
[26] 십의자리 : 짝수!,  일의자리 : 짝수!
[27] 십의자리 : 짝수!,  일의자리 : 홀수!
[28] 십의자리 : 짝수!,  일의자리 : 짝수!
[29] 십의자리 : 짝수!,  일의자리 : 홀수!
[30] 십의자리 : 홀수!,  일의자리 : 0
[31] 십의자리 : 홀수!,  일의자리 : 홀수!
[32] 십의자리 : 홀수!,  일의자리 : 짝수!
[33] 십의자리 : 홀수!,  일의자리 : 홀수!
[34] 십의자리 : 홀수!,  일의자리 : 짝수!
[35] 십의자리 : 홀수!,  일의자리 : 홀수!
[36] 십의자리 : 홀수!,  일의자리 : 짝수!
[37] 십의자리 : 홀수!,  일의자리 : 홀수!
[38] 십의자리 : 홀수!,  일의자리 : 짝수!
[39] 십의자리 : 홀수!,  일의자리 : 홀수!
[40] 십의자리 : 짝수!,  일의자리 : 0
[41] 십의자리 : 짝수!,  일의자리 : 홀수!
[42] 십의자리 : 짝수!,  일의자리 : 짝수!
[43] 십의자리 : 짝수!,  일의자리 : 홀수!
[44] 십의자리 : 짝수!,  일의자리 : 짝수!
[45] 십의자리 : 짝수!,  일의자리 : 홀수!
[46] 십의자리 : 짝수!,  일의자리 : 짝수!
[47] 십의자리 : 짝수!,  일의자리 : 홀수!
[48] 십의자리 : 짝수!,  일의자리 : 짝수!
[49] 십의자리 : 짝수!,  일의자리 : 홀수!
[50] 십의자리 : 홀수!,  일의자리 : 0
[51] 십의자리 : 홀수!,  일의자리 : 홀수!
[52] 십의자리 : 홀수!,  일의자리 : 짝수!
[53] 십의자리 : 홀수!,  일의자리 : 홀수!
[54] 십의자리 : 홀수!,  일의자리 : 짝수!
[55] 십의자리 : 홀수!,  일의자리 : 홀수!
[56] 십의자리 : 홀수!,  일의자리 : 짝수!
[57] 십의자리 : 홀수!,  일의자리 : 홀수!
[58] 십의자리 : 홀수!,  일의자리 : 짝수!
[59] 십의자리 : 홀수!,  일의자리 : 홀수!
[60] 십의자리 : 짝수!,  일의자리 : 0
[61] 십의자리 : 짝수!,  일의자리 : 홀수!
[62] 십의자리 : 짝수!,  일의자리 : 짝수!
[63] 십의자리 : 짝수!,  일의자리 : 홀수!
[64] 십의자리 : 짝수!,  일의자리 : 짝수!
[65] 십의자리 : 짝수!,  일의자리 : 홀수!
[66] 십의자리 : 짝수!,  일의자리 : 짝수!
[67] 십의자리 : 짝수!,  일의자리 : 홀수!
[68] 십의자리 : 짝수!,  일의자리 : 짝수!
[69] 십의자리 : 짝수!,  일의자리 : 홀수!
[70] 십의자리 : 홀수!,  일의자리 : 0
[71] 십의자리 : 홀수!,  일의자리 : 홀수!
[72] 십의자리 : 홀수!,  일의자리 : 짝수!
[73] 십의자리 : 홀수!,  일의자리 : 홀수!
[74] 십의자리 : 홀수!,  일의자리 : 짝수!
[75] 십의자리 : 홀수!,  일의자리 : 홀수!
[76] 십의자리 : 홀수!,  일의자리 : 짝수!
[77] 십의자리 : 홀수!,  일의자리 : 홀수!
[78] 십의자리 : 홀수!,  일의자리 : 짝수!
[79] 십의자리 : 홀수!,  일의자리 : 홀수!
[80] 십의자리 : 짝수!,  일의자리 : 0
[81] 십의자리 : 짝수!,  일의자리 : 홀수!
[82] 십의자리 : 짝수!,  일의자리 : 짝수!
[83] 십의자리 : 짝수!,  일의자리 : 홀수!
[84] 십의자리 : 짝수!,  일의자리 : 짝수!
[85] 십의자리 : 짝수!,  일의자리 : 홀수!
[86] 십의자리 : 짝수!,  일의자리 : 짝수!
[87] 십의자리 : 짝수!,  일의자리 : 홀수!
[88] 십의자리 : 짝수!,  일의자리 : 짝수!
[89] 십의자리 : 짝수!,  일의자리 : 홀수!
[90] 십의자리 : 홀수!,  일의자리 : 0
[91] 십의자리 : 홀수!,  일의자리 : 홀수!
[92] 십의자리 : 홀수!,  일의자리 : 짝수!
[93] 십의자리 : 홀수!,  일의자리 : 홀수!
[94] 십의자리 : 홀수!,  일의자리 : 짝수!
[95] 십의자리 : 홀수!,  일의자리 : 홀수!
[96] 십의자리 : 홀수!,  일의자리 : 짝수!
[97] 십의자리 : 홀수!,  일의자리 : 홀수!
[98] 십의자리 : 홀수!,  일의자리 : 짝수!
[99] 십의자리 : 홀수!,  일의자리 : 홀수!
[100] 십의자리 : 짝수!,  일의자리 : 0

💡
1. 반복시 조건을 한자리 수와 두자리 수를 나누어서 조건을 걸어주는 것.
2. 'result10' , 'result1' 변수를 만들어서 각각 출력해주는 것.
3. 0은 짝수가 아닌 '0'으로 간주할 때 수정을 주는 것.
세가지 포안트가 어려웠고 고민하였다.


▶Ex15 반복문을 이용해서 프로그램의 실행을 반복

fNum = int(input('press int : '))

addSum = 0
for i in range(1, (fNum+1)):
    addSum += i

addSumFormated = format(addSum, ',')
print('Sum : {}'.format(addSumFormated))

oddSum = 0
for i in range(1, (fNum+1)):
    if i % 2 != 0:
        oddSum += i

oddSumFormated = format(oddSum, ',')
print('Odd Sum : {}'.format(oddSumFormated))

evenSum = 0
for i in range(1, (fNum+1)):
    if i % 2 == 0:
        evenSum += i

evenSumFormated = format(evenSum, ',')
print('even Sum : {}'.format(evenSumFormated))

factorialResult = 1
for i in range(1, (fNum+1)):
    factorialResult *= i

factorialResultFormated = format(factorialResult, ',')
print('Factorial Result : {}'.format(factorialResultFormated))
#출력
press int : 10
Sum : 55
Odd Sum : 25
even Sum : 30
Factorial Result : 3,628,800

💡합을 구하는 것은 쉬웠는데, 이상하게 팩토리얼은 어렵게 느껴졌다. 오히려 더 쉬웠어야 했는데.. 문제를 풀기 전에 미리 겁을 먹는 것이 있는 것 같다.


▶Ex16 반복문을 이용해서 프로그램의 실행을 반복

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

#1+5
for i in range(1,6):
    for j in range(6-i,1,-1):
        print('*', end='')
    print()
print('-'*10)

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

#3
for i in range(1,6):
    for j in range(7-i,1,-1):
        print('*', end='')
    print()
print('-'*10)

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

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

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

#4
for i in range(1,6):
    for j in range(0,i-1):
        print(' ', end='')
    print('*' * (6-i))
print('-'*10)

#8
for i in range(1,6):
    print(' ' * (5-i) + '*' * (1+(2*(i-1))))
#출력
*
**
***
****
*****
****
***
**
*

----------
*
**
***
****
*****
****
***
**
*
----------
*****
****
***
**
*
----------
    *
   **
  ***
 ****
*****
----------
 *
  *
   *
    *
     *
----------
    *
   *
  *
 *
*
----------
*****
 ****
  ***
   **
    *
----------
    *
   ***
  *****
 *******
*********

💡몇개는 할만했고, 몇개는 출력해보며 어찌저찌 끼워맞췄고, 마지막 8번은 도저히 모르겠어서 찬스를 좀 썼다. 답을 알고보니 내가 접근자체를 잘못했던 것 같다.. 한 두문제에서 개행하는 print() 함수를 어디쯤 넣어야 할지도 고민을 했다.


▶Ex17 반복문을 이용해서 프로그램의 실행을 반복

busA = 15
busB = 13
busC = 8

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

Process finished with exit code 0

💡C버스의 시간구간을 어떻게 조건을 줘서 분기해야하나 싶었는데, 운행시간 자체를 분으로 전부 환산해서 조건을 주는 방법이었다. 어려웠다.


▶Ex18 반복문을 이용해서 프로그램의 실행을 반복

gearACnt = int(input('enter gearA num : '))
gearBCnt = int(input('enter gearB num : '))

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
#출력
enter gearA num : 7
enter gearB num : 12
최초 만나는 톱니수(최소공배수) : 84
gearA 회전 수 : 12
gearB 회전 수 : 7

💡최소공배수를 이용해야하기 때문에 'leastNum' 변수 설정만 하면 할만했던 것 같다. 근데 leastNum 변수를 만들 생각자체를 떠올리는 것이 어려웠다^^


▶Ex19 반복문을 이용해서 프로그램의 실행을 반복

year = int(input('enter year : '))

# if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0):
#     print('{} : Yoon'.format(year))
# else:
#     print('{} : Common'.format(year))

for year in range(2021, (2021+101)):
    if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0):
        print('{} : Yoon'.format(year))
    else:
        print('{} : Common'.format(year))
#출력
enter year : 2021
2021 : Common
2022 : Common
2023 : Common
2024 : Yoon
2025 : Common
2026 : Common
2027 : Common
2028 : Yoon
.
.
.
2114 : Common
2115 : Common
2116 : Yoon
2117 : Common
2118 : Common
2119 : Common
2120 : Yoon
2121 : Common

💡이 문제는 나중에 다시 봐야겠다. 풀어놓고 논리적으로 이해가 가지 않는다.


0개의 댓글