log.Sehee

[데이터 취업 스쿨 스터디 노트] 파이썬 기초문풀 4 - 5 본문

카테고리 없음

[데이터 취업 스쿨 스터디 노트] 파이썬 기초문풀 4 - 5

Sehe_e 2024. 7. 6. 21:07

 


조건문 3

import random

com_num = random.randint(1, 2)
user_select = int(input('홀/짝 선택: 1.홀 \t 2.짝 '))

if com_num == 1:
    if user_select == com_num:
        print('빙고!! 홀수!!!')
    else:
        print('실패!! 홀수!!!')
else:
    if user_select == com_num:
        print('빙고!! 짝수!!!')
    else:
        print('실패!! 짝수!!!')

import random

com_num = random.randint(1, 3)
user_select = int(input('가위, 바위, 보 선택: 1.가위 \t 2.바위 \t 3.보 '))

if (com_num == 3 and user_select == 1) or com_num < user_select:
    print('컴퓨터: 패, 유저: 승')
elif com_num == user_select:
    print('무승부')
else:
    print('컴퓨터: 승, 유저: 패')

print(f'컴퓨터: {com_num}, 유저: {user_select}')

 

조건문 4

sectors = input('업종 선택(1.가정용 \t 2.대중탕용 \t 3.공업용): ')
used = int(input('사용량 입력: '))

if sectors == '1':
    cost = 540
elif sectors == '2':
    if used <= 50:
        cost = 820
    elif 50 < used <= 300:
        cost = 1920
    else:
        cost = 2400
else:
    if used <= 500:
        cost = 240
    else:
        cost = 470

print('='*30)
print('상수도 요금표')
print('-'*30)
print('사용량 \t : \t 요금')
print(f'{used} \t : \t {used * cost:,}원')
print('='*30)

 

조건문 5

import datetime

dust_level = int(input('미세먼지 수치 입력: '))
car_type = int(input('차량 종류 선택. 1.승용차 \t 2.영업용차 ') )
car_number = int(input('차량 번호 입력: '))

today = datetime.datetime.today()
day = today.day

print('-'*30)
print(today)
print('-'*30)
if dust_level > 150 and car_type == 1:
    if day % 2 == car_number % 2:
        print('차량 2부제 적용')
        print('차량 2부제로 금일 운행제한 대상 차량입니다!!')
    else:
        print('금일 운행 가능합니다!!')
else:
    if day % 5 == car_number % 5:
        print('차량 5부제 적용')
        print('차량 5부제로 금일 운행제한 대상 차량입니다!!')
    else:
        print('금일 운행 가능합니다!!')
print('-'*30)

 

조건문 6

import random

pc_num = random.randint(1, 1000)
count = 1

while True:
    user_num = int(input('1에서 1000까지의 정수 입력: '))
    if pc_num < user_num:
        print('난수가 크다!')
    elif pc_num > user_num:
        print('난수가 작다!')
    else:
        break
    count += 1

print('빙고!')
print(f'난수: {pc_num}, 시도 횟수: {count}')

temp = int(input('실내온도 입력: '))

if temp <= 18:
    print('에어컨: OFF!!')
elif 18 < temp <= 22:
    print('에어컨: 매우 약!!')
elif 22 < temp <= 24:
    print('에어컨 약!!')
elif 24 < temp <= 26:
    print('에어컨 중!!')
elif 26 < temp <= 28:
    print('에어컨 강!!')
else:
    print('에어컨 매우 강!!')

 

반복문 1

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

        print(f'[{i}] 십의자리: {num10}, 일의자리: {num1}')

 

반복문 2

num = int(input('정수 입력: '))
total, odd, even= 0, 0, 0
factorial = 1

for i in range(1, num+1):
    total += i
    factorial *= i
    if i % 2 == 0:
        even += i
    else:
        odd += i

print('합 결과 :', total)
print('홀수 결과 :', odd)
print('짝수 결과 :', even)
print(f'팩토리얼 결과 : {factorial:,}')

 

반복문 3

print('NO.1')
for i in range(1, 6):
    print('*' * i)
print()

print('NO.2')
c = 0
for i in range(1, 6 + 1):
    print((" " * (6 - i)) + ("*" * i) + ("*" * c))
    c += 1
    
c = 6 - 2
for i in range(6 - 1, 0, -1):
    print((" " * (6 - i)) + ("*" * i) + ("*" * c))
    c -= 1

 

반복문 4

처음으로 방법을 헤맨 문제

더보기
출처 : Zerobase 데이터 취업 스쿨 [연습문제] 반복문(04)
bus = [0, 0, 20]
bus_name = {0: 'busA',
            1: 'busB',
            2: 'busC'}

while bus[0] <= 23 * 60 and bus[2] <= 22 * 60:
       for i in range(2):
              for j in range(3):
                     if j > i:
                            if bus[i] == bus[j]:
                                   hour = bus[i] // 60 + 6
                                   min = bus[i] % 60
                                   print(f'{bus_name[i]}와 {bus_name[j]} 동시 정차!! \t {hour}:{min}')
       bus[0] += 15
       bus[1] += 13
       bus[2] += 8

처음에는 해답 코드를 위와 같이 적었는데, 터미널에서 실행해보니

이런.. 실행 결과가 나와 어떤 점이 문제였는지 생각해보았다.

 

문제에서는 버스 3대가 한 정류장을 두고 각각 15분, 13분, 8분 간격으로 다시 돌아오는, 원을 그리는 형태였는데 내가 쓴 코드는 한 정류장에서 출발하여 버스가 각각 운행종료 시간을 향해 달려가는.. 일직선 상의 형태를 그려놨던 것이였다.

 

처음에 다시 생각한 방법은 15, 13, 8의 공배수를 전부 찾아 그 중에서 겹치는 숫자를 토대로 동시정차 문구를 출력하는 방법이였으나 다시 생각해보니 시(hour)를 고려할 것이 아니라 분(minutes)을 고려하여 찾아야한다는 것을 깨달았다.

 

최선의 방법이 운행 종료 시간인 23시를 maximum으로 두고 매 시간마다 각각의 버스의 배차 간격으로 나눈 분이 0이 되면 체크하는 것이였다.

 

하여, 아래와 같이 정리해보았다.

busA, busB, busC = 15, 13, 8
max_time = 60 * 17

for i in range(max_time + 1):
    hour = i // 60 + 6
    minutes = i % 60
    
    if i < 20 or i > 16 * 60:
        if i % busA == 0 and i % busB == 0:
            print(f'busA와 busB 동시 정차!! \t {hour}:{minutes}')
            
    else:
        if i % busA == 0:
            if i % busB == 0:
                print(f'busA와 busB 동시 정차!! \t {hour}:{minutes}')
            elif i % busC == 0:
                print(f'busA와 busC 동시 정차!! \t {hour}:{minutes}')
                
        elif i % busB == 0 and i % busC == 0:
            print(f'busB와 busC 동시 정차!! \t {hour}:{minutes}')

 

 


예전부터 시간 관련 문제에 약한 것을 알고 있었는데 이번에도 시간 문제에 걸렸다 ㅠㅠ.. 더 연습하기

 

내일의 학습 목표

파이썬 기초문풀 5

 

 

Comments