내일배움캠프

데이터 분석 트랙 36일차 (25.04.02.) TIL

jjaio8986 2025. 4. 2. 23:19
  • basic 과제 코드 제작

1. 표준 입출력 실습 문제

 1.1. 자기소개 카드 만들기

# 설명 : 사용자의 "이름", "나이", "취미"를 입력받아 정해진 형식의 자기소개 카드를 출력하는 프로그램 제작
name = input("이름을 입력하세요:")
age = input("나이를 입력하세요:")
hobby = input("취미를 입력하세요:")
print("┌─────────────────────────┐\n│      자기소개 카드        │")
print(f"이름 : {name:>10}\n나이 : {age:<3}\n취미 : {hobby}")
print("└─────────────────────────┘")

 

 1.2. 시간 변환기

# 설명 : 사용자로부터 초를 입력받아 "시", "분", "초"로 변환하는 프로그램 제작
time = int(input("초를 입력하세요:"))
hours = time//3600
minutes = (time%3600)//60
seconds = (time%3600)%60
print(f"{time}초는 {hours}:{minutes}:{seconds} (시:분:초) 입니다.")

 

 1.3. BMI 계산기

# 설명 : 사용자로부터 "키(cm)","몸무게(kg)"를 입력받아 BMI(체질량지수)를 계산하는 프로그램 제작
height1 = float(input("키를 입력하세요(cm)"))
height2 = height1*0.01
weight = float(input("몸무게를 입력하세요(kg)"))
bmi = weight/(height2**2)
print("========== BMI 결과 ==========")
print(f"키: {height1} cm ({height2} M)\n몸무게: {weight} kg\n당신의 BMI: {bmi:.2f}")

 

1.4. 온도 변환기

# 설명 : 사용자로부터 "섭씨 온도"를 입력받아 "화씨 온도"로 변환하는 프로그램 제작
fahrenheit = float(input("섭씨 온도를 입력하세요:"))
Celsius = fahrenheit*9/5+32
print("┌────────────────────────┐\n│     온도 변환 결과       │\n├────────────────────────┤")
print(f" 섭씨:{fahrenheit:>8.1f} °C\n 화씨:{Celsius:>8.1f} °F")
print("└────────────────────────┘")

 

1.5. 두 점 사이 거리 계산기

# 설명 : 사용자로부터 "두 점의 좌표"를 입력받아 "두 점 사이 거리"를 계산하는 프로그램 제작
x1 = round(float(input("첫 번째 점의 x좌표를 입력하세요:")), 1)
y1 = round(float(input("첫 번째 점의 y좌표를 입력하세요:")), 1)
x2 = round(float(input("두 번째 점의 x좌표를 입력하세요:")), 1)
y2 = round(float(input("두 번째 점의 y좌표를 입력하세요:")), 1)
distance = ((x2-x1)**2+(y2-y1)**2)**0.5
print("==== 두 점 사이의 거리 계산 결과 ====")
print(f"점1 좌표: ({x1}, {y1})\n점2 좌표: ({x2}, {y2})\n두 점 사이의 거리: {distance:.3f}")

 

※ 인사이트 : f-포맷팅에서

f"{변수:02}"   # 나타낼 변수의 자리수는 2자리, 부족한 자리엔 0을 채운다!

f"{변수:12.2f}"    # 실수형 자료형을 담은 변수의 경우에 사용 소수점 2자리 까지 출력한다.

 

2. 조건문과 반복문 실습 문제

 2.1. Up & Down 게임

# 설명 : 컴퓨터가 1~100사이의 임의의 숫자를 선택 후 사용자가 숫자를 입력해 맞춘다.
import random
answer = random.randint(1, 100)
cnt = 0
while True :
    user_num = int(input("1~100 사이의 숫자를 입력해 주세요."))
    cnt += 1
    if user_num == answer :
        print(f'정답입니다! {answer}을 맞추셨습니다.')
        print(f'총 시대 횟수: {cnt}')
        break
    elif user_num > answer :
        print("Down! 더 작은 숫자를 입력하세요.")
    else :
        print("Up! 더 큰 숫자를 입력하세요.")

 

 2.2. 가위, 바위, 보 게임   

# 기나긴 코드를 줄이지 못해 아쉬웠고, "가위" 한 번 입력해서 바로 승리해 정상작동 의심되어 다시 작성하는, 여러모로 쉽지 않은 코드 

# 설명
"""사용자로부터 "가위, 바위, 보"중 하나를 입력받는다.
그 후 컴퓨터가 무작위로 "가위, 바위, 보"중 하나를 선택,
승패 결과를 출력하고, 사용자가 이길 대까지 게임을 계속한다.
게임이 끝날 시 총 게임횟수, "승/패/무" 기록을 출력
"""
import random
cnt_game1 = 0
win = 0
lose = 0
draw = 0
while True :
    game1_user = input("가위, 바위, 보 중 하나를 입력하세요:")
    options = ["가위", "바위", "보"]
    computer_choice = random.choice(options)
    cnt_game1 += 1
    if game1_user == "가위":
        if computer_choice == "보":
            win += 1
            print(f"컴퓨터: {computer_choice}")
            print("사용자가 이겼습니다!")
            print(f"총 게임 수: {cnt_game1}\n승: {win}, 패: {lose}, 무: {draw}")
            break
        elif computer_choice == "바위":
            lose += 1
            print(f"컴퓨터: {computer_choice}")
            print("컴퓨터가 이겼습니다!")
        else:
            print(f"컴퓨터: {computer_choice}")
            draw += 1
    elif game1_user == "바위":
        if computer_choice == "가위":
            win += 1
            print(f"컴퓨터: {computer_choice}")
            print("사용자가 이겼습니다!")
            print(f"총 게임 수: {cnt_game1}\n승: {win}, 패: {lose}, 무: {draw}")
            break
        elif computer_choice == "보":
            lose += 1
            print(f"컴퓨터: {computer_choice}")
            print("컴퓨터가 이겼습니다!")
        else:
            print(f"컴퓨터: {computer_choice}")
            draw += 1
    else:
        if computer_choice == "바위":
            win += 1
            print(f"컴퓨터: {computer_choice}")
            print("사용자가 이겼습니다!")
            print(f"총 게임 수: {cnt_game1}\n승: {win}, 패: {lose}, 무: {draw}")
            break
        elif computer_choice == "가위":
            lose += 1
            print(f"컴퓨터: {computer_choice}")
            print("컴퓨터가 이겼습니다!")
        else:
            print(f"컴퓨터: {computer_choice}")
            draw += 1

 

 2.3. 다양한 패턴 출력

# 설명
"""사용자로부터 "패턴 크기(n)"를 입력받는다
각 예시와 같은 여러 패턴을 출력한다.
"""
n = int(input("도형의 크기를 입력하세요:"))
# 패턴1: 직각삼각형
print("직각삼각형")
for X in range(1, n+1):
    print('*'*X)

# 패턴2: 역직각삼각형
print("역직각삼각형")
for X in range(n, 0, -1):
    print('*'*X)

# 패턴3: 피라미드
print("피라미드")
for X in range(1, n+1):
    print(' '*((n+1)-X)+'*'*(2*X-1))

# 패턴4: 마름모
print("마름모")
for X in range(1, n+1):
    print(' '*((n+1)-X)+'*'*(2*X-1))
for Y in range(n-1, 0, -1):
    print(' '*((n-Y)+1)+'*'*(2*Y-1))

# 패턴5: 중첩사각형
print("중첩사각형")
for X in range(1, n+1):
    if X == 1:
        print('*'*n)
    else:
        if X == n:
            print('*'*n)
        else:
            print('*'+' '*(n-2)+'*')

 

2.4. 숫자 패턴 출력 문제

# 2번째 패턴에서 리스트 안 쓰고 해결해보고자 했으나 홀수 index부분 역수 출력 시 같은 값이 계속 반복되어 결국 리스트를 쓰고 만 문제

# 설명
""" 다양한 패턴으로 숫자를 출력하기"""

# 패턴1 숫자 사각형
""" 사용자로부터 행(row)과 열(col)을 입력받는다.
숫자는 1부터 시작해 왼쪽에서 오른쪽, 위에서 아래로 증가
숫자는 두 자리로 표시, 한 자리 수 인 경우 앞에 0을 붙인다.
"""
row = int(input("행의 개수를 입력하세요:"))
col = int(input("열의 개수를 입력하세요:"))
num1 = 1
for A in range(row):
    for B in range(col):
        print(f"{num1:02}", end=" ")
        num1 += 1
    print()
   
# 패턴2 지그재그 숫자 사각형
"""홀수 행은 왼쪽에서 오른쪽으로 증가
짝수 행은 오른쪽에서 왼쪽으로 증가"""
num2 = 1
for i in range(row):
    if i % 2 == 0:  # 홀수 행(0부터 시작하므로 i가 짝수인 행은 실제로 홀수 행)
        # 왼쪽에서 오른쪽으로 증가
        for j in range(col):
            print(f"{num2:02}", end=" ")
            num2 += 1
    else:
        # 오른쪽에서 왼쪽으로 증가
        # 숫자들을 저장할 리스트
        even_col_list = []
        for j in range(col):
            even_col_list += [f"{num2:02}"]
            num2 += 1
        # 오른쪽에서 왼쪽으로 출력
        print(" ".join(even_col_list[::-1]), end=" ")

    print()  # 한 행이 끝난 후 줄바꿈