QAQC 부트캠프 퀘스트

[2024/12/26]Python 개인 과제

essay2892 2024. 12. 26. 17:04

🔩 Level. 1 : 필수! Python 문법 단답형 문제

  • 1단계 과제는 Python 문법의 기초와 사용법을 점검하기 위한 문제입니다.
  • 각 코드의 ___ 빈 칸에 적절한 단어를 채워 넣으세요.
  • 빈 칸을 채운 후, 코드가 정상적으로 작동하는지 확인해 보세요!
더보기

문제 1-1 : 변수와 자료형

# 다음 코드는 변수를 선언하고 값을 저장하는 문제입니다.
# 빈칸에 들어갈 코드를 완성하세요!

___ = "Hello, Python"  # 변수 greeting에 문자열 저장
___ = 42  # 변수 age에 정수 저장

print(greeting)
print(age)
 
greeting = "Hello, Python"
age = 42 

print(greeting)
print(age)
#
Hello, Python
42

문제 1-2 : 리스트

# 다음 코드는 리스트에서 특정 요소를 가져오는 문제입니다.
# 빈칸에 들어갈 코드를 완성하세요!

fruits = ["apple", "banana", "cherry"]
print(fruits[___])  # 리스트에서 "banana" 출력

 

fruits = ["apple", "banana", "cherry"]
print(fruits[1])
# banana

문제 1-3 : 딕셔너리

# 다음 코드는 딕셔너리에서 값을 가져오는 예제입니다.
# 빈칸에 들어갈 코드를 완성하세요.

student = {"name": "Alice", "age": 20}
print(student[___])  # "Alice" 출력

 

student = {"name": "Alice", "age": 20}
print(student["name"])
# Alice

문제 1-4 : 조건문

# 다음 코드는 조건에 따라 다른 메시지를 출력하는 문제입니다.
# 빈칸에 들어갈 코드를 완성하세요!

x = 10
if x > 5:
    print("x is greater than 5")
else:
    print("x is ___")

 

x = 10
if x > 5:
    print("x is greater than 5")
else:
    print("x is less than or equal to 5")

# x is greater than 5

문제 1-5 : 반복문

# 다음 코드는 반복문을 사용해 리스트의 요소를 출력하는 문제입니다.
# 빈칸에 들어갈 코드를 완성하세요!

colors = ["red", "green", "blue"]
for ___ in colors:
    print(___)

 

colors = ["red", "green", "blue"]
for color in colors:
    print(color)

#

red

green

blue

문제 1-6 : 함수

# 다음 코드는 간단한 함수를 정의하고 호출하는 문제입니다.
# 빈칸에 들어갈 코드를 완성하세요!

def greet(___):
    print("Hello, " + ___)

greet("World")

 

def greet(a):
    print("Hello, " + a)

greet("World")

# Hello, World

문제 1-7 : 혼합 문제

# 다음 코드는 리스트와 조건문을 결합하여 짝수만 출력하는 문제입니다.
# 빈칸에 들어갈 코드를 완성하세요!

numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num ___ 2 == 0:
        print(___)

 

numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num % 2 == 0:
        print(num)

#

2

4

🔩 Level. 2 : 필수! Python 문법 서술형 문제

  • 2단계 과제는 Python 문법을 활용하여 실제 데이터를 다루는 간단한 응용 문제입니다.
  • 1단계보다 조금 더 창의적이고 논리적인 사고가 필요합니다.
  • #여기에 코드를 작성하세요. 해당 부분에 여러분의 코드를 입력하세요.
  • 코드의 길이는 정해져 있지 않으니, 자유롭게 작성한 후 코드를 실행해 결과를 확인하세요!
더보기

문제 2-1 : 숫자 리스트의 평균을 계산하는 방법

배경

당신은 제조 공정에서 품질 관리를 담당하는 Quality Control Engineer입니다. 공장에서 생산된 제품은 출고 전에 다양한 품질 검사를 받으며, 제품 무게 측정은 중요한 품질 관리 항목 중 하나입니다.

지정된 기간 동안 생산된 제품의 평균 무게를 계산하여, 생산 공정이 안정적으로 이루어지고 있는지 평가해야 합니다.

목표

주어진 숫자 리스트의 평균을 계산하는 함수를 작성하세요.

데이터

  • numbers: 숫자가 담긴 리스트
# 예시 데이터
numbers = [10, 20, 30, 40, 50]

def calculate_avg(numbers):
    # 여기에 코드를 작성하세요
    # 여기에 코드를 작성하세요
    return total_avg

total_avg = calculate_avg(numbers)
print("숫자들의 평균:", total_avg)

 

numbers = [10, 20, 30, 40, 50]

def calculate_avg(numbers):
    total_avg = sum(numbers) / len(numbers)
    return total_avg

total_avg = calculate_avg(numbers)
print("숫자들의 평균:", total_avg)

# 숫자들의 평균: 30.0

 

문제 2-2 : 최고 온도와 최저 온도 간 온도차를 구하는 함수 작성

배경

우리 공장에는 최고 온도와 최저 온도 간의 차이가 큰 경우 열 팽창으로 고장 위험이 있는 장비가 있습니다. 이를 예방하기 위해, 장비의 최고 온도와 최저 온도의 온도 차이를 계산하여 관리하고자 합니다.

목표

장비의 온도 목록을 활용하여, 최고 온도와 최저 온도의 차이를 구하는 함수를 작성하세요.

데이터

  • numbers: 하루 동안 기록된 특정 장비의 온도(숫자)의 리스트
# 예시 데이터
numbers = [10, 20, 30, 40, 50]

def calculate_diff_temperature(numbers):
    # 여기에 코드를 작성하세요
    # 여기에 코드를 작성하세요

    return diff_temp

diff_temp= calculate_diff_temperature(numbers)
print("온도차:", diff_temp)

 

numbers = [10, 20, 30, 40, 50]

def calculate_diff_temperature(numbers):
    diff_temp = max(numbers) - min(numbers)
    return diff_temp

diff_temp= calculate_diff_temperature(numbers)
print("온도차:", diff_temp)

# 온도차: 40

문제 2-3 : 특정 개수 이상의 데이터의 합 구하기

배경

우리 공장에서는 매일 일정 수량의 부품을 생산하지만, 품질 문제로 인해 생산량이 줄어드는 경우도 발생합니다. 특정 기준(예: 하루 100개 이상)을 초과하여 생산된 날들의 생산량 합계를 계산하여 공장의 생산 효율성을 분석하고자 합니다.

목표

일일 생산 수량이 기록된 리스트를 활용하여, 특정 기준 이상 생산된 날의 생산 수량 합계를 계산하는 함수를 작성하세요.

데이터

  • production_counts : 일 별 생산량 리스트
def calculate_range_total(production_counts, min_value):
    # 여기에 코드를 작성하세요
    # 여기에 코드를 작성하세요

    return range_total

# 예시 데이터
production_counts = [100, 150, 120, 130, 110, 180, 140]

range_total = calculate_range_total(production_counts, 110)
print("특정 수량 이상 생산한 날의 생산 수량 합:", range_total)

# 실행 결과
# 특정 수량 이상 생산한 날의 생산 수량 합: 830

 

def calculate_range_total(production_counts, min_value):
    range_data = []
    for range in production_counts :
      if range >= min_value :
        range_data.append(range)
        range_total = sum(range_data)
    return range_total
 
production_counts = [100, 150, 120, 130, 110, 180, 140]

range_total = calculate_range_total(production_counts, 110)
print("특정 수량 이상 생산한 날의 생산 수량 합:", range_total)

# 특정 수량 이상 생산한 날의 생산 수량 합: 830

문제 2-4 : 가장 많이 판매된 제품의 이름과 수량을 반환하는 함수 작성

배경

우리 공장에서는 다양한 제품을 생산하고 판매하며, 매월 각 제품의 판매 수량이 기록됩니다. 공장의 생산 계획과 마케팅 전략을 수립하기 위해, 이 데이터를 분석하여 가장 많이 판매된 제품을 파악해야 합니다.

목표

제품 이름과 판매 수량이 기록된 데이터를 활용하여, 가장 많이 판매된 제품의 이름을 반환하는 함수를 작성하세요.

데이터

  • 입력 데이터는 딕셔너리(dict) 형식으로 제공됩니다.
  • 제품 이름을 key로, 판매 수량을 value으로 가집니다.
def find_top_seller(sales_data):
    # 여기에 코드를 작성하세요
    # 여기에 코드를 작성하세요
    return top_product, max_sales

# 예시 데이터
sales_data = {
    "Motherboard": 50,
    "SSD": 2,
    "Graphics Card": 30
}

print("가장 많이 판매된 제품과 수량 :", find_top_seller(sales_data))

# 실행 결과
# 가장 많이 판매된 제품과 수량 : ('Motherboard', 50)

 

def find_top_seller(sales_data):
    for key, value in sales_data.items() :
      if value == max(sales_data.values()) :
       top_product = key    
       max_sales = value
    return top_product, max_sales
 
sales_data = {
    "Motherboard": 50,
    "SSD": 2,
    "Graphics Card": 30
}

print("가장 많이 판매된 제품과 수량 :", find_top_seller(sales_data))

# 가장 많이 판매된 제품과 수량 : ('Motherboard', 50)

🔩 Level. 3 : 도전! Python 완전 정복

  • 3단계 문제는 Python의 문법과 논리적 사고를 활용하여 데이터 처리를 다루는 도전 과제입니다.
  • 1,2단계보다 조금 더 깊이 생각하고 요구사항과 주어진 코드를 분석하며 논리적으로 접근해야 합니다.
  • 이 문제를 해결하면 데이터 분석에 필요한 Python 문법과 문제 해결 능력을 완벽히 갖추게 됩니다! 🎉
더보기

문제 3-1 : 이메일 주소가 올바른 형식을 갖추고 있는지 판단하는 코드 작성

배경

당신은 공장의 이메일 주소 데이터베이스(DB)를 관리하는 데이터 관리자로, 효과적인 인력 관리를 위해 데이터 정합성을 보장해야 합니다. DB에 저장된 이메일 주소들이 유효한 형식을 따르고 있는지 검증하는 작업이 필요합니다.

목표

이메일 주소 리스트을 분석하여, 각 이메일 주소가 올바른 형식을 갖추고 있는지 판단하는 코드를 작성하세요.

요구사항

  • 이메일 주소 리스트를 순차적으로 확인합니다.
  • if 조건문을 사용하여 @ 기호의 포함 여부를 판단합니다
    • @가 포함된 경우 : "유효한 이메일 주소입니다." 를 출력합니다.
    • @가 포함되지 않은 경우: "유효하지 않은 이메일 주소입니다." 를 출력합니다.

데이터

  • 이메일 주소는 문자열 리스트로 제공됩니다.
def validate_emails(email_list):
    # 여기에 코드를 작성하세요
    # 여기에 코드를 작성하세요
    # 여기에 코드를 작성하세요

# 이메일 목록
email_list = [
    "example@example.com",
    "wrongemail.com",
    "test@domain",
    "noatsign"
]

# 이메일 유효성 검사 실행
validate_emails(email_list)

 

def validate_emails(email_list):
  for email in email_list :
    if "@" in email :
      print("유효한 이메일 주소입니다.")
    else :
      print("유효하지 않은 이메일 주소입니다.")
 
email_list = [
    "example@example.com",
    "wrongemail.com",
    "test@domain",
    "noatsign"
]
 
validate_emails(email_list)
#
유효한 이메일 주소입니다.
유효하지 않은 이메일 주소입니다.
유효한 이메일 주소입니다.
유효하지 않은 이메일 주소입니다.
 

문제 3-2 : 공장 환경에서 이동 데이터를 활용해 장비의 효율성 평가

배경

당신은 공정 데이터를 분석하는 데이터 분석가입니다. 공장의 자동화 장비는 작업 중 이동 데이터를 기록하며, 이 데이터를 기반으로 장비의 이동 패턴을 분석하는 것은 작업 효율성을 평가하고 최적화하는 데 필수적입니다.

장비가 작업 중 이동한 총 누적 거리 를 계산하여 작업 효율성을 평가하는 프로그램을 작성해야 합니다.

목표

주어진 공장 장비의 이동 데이터를 분석하여, 각 장비가 작업 중 이동한 총 누적 거리를 계산하는 코드를 작성하세요.

요구사항

  1. 이동 거리 계산:
    • 각 장비가 이동한 두 위치 간의 거리는 유클리드 거리 공식을 사용하여 계산합니다.

 

  1. 누적 거리 계산:
    • 장비가 이동한 모든 거리를 합산하여 총 이동 거리를 계산합니다.
  2. 결과 출력:
    • 각 장비의 이름과 함께 이동한 총 거리를 출력합니다.

데이터

  • 입력 데이터는 장비 이름과 해당 장비의 위치 좌표가 포함된 리스트로 제공됩니다.
  • 각 좌표는 (x, y) 형태의 튜플로 표현됩니다.
  • 장비는 작업 중 한 번만 이동합니다.
import math
# 장비별 이동 거리 계산 함수

def calculate_single_distance(machine_positions):
    for machine, positions in machine_positions.items():
        # 위치는 항상 두 개의 좌표만 제공됨
        x1, y1 = # 여기에 코드를 작성하세요
        x2, y2 = # 여기에 코드를 작성하세요
        distance = # 여기에 코드를 작성하세요
        print(f"{machine}의 이동 거리: {distance:.2f} 미터")

 # 장비별 위치 데이터
machine_positions = {
    "Machine A": [(0, 0), (5, 5)],
    "Machine B": [(2, 2), (6, 8)],
    "Machine C": [(0, 0), (3, 4)]
}

# 이동 거리 계산 실행
calculate_single_distance(machine_positions)

 

import math

def calculate_single_distance(machine_positions):
    for machine, positions in machine_positions.items():
        x1, y1 = positions[0][0], positions[0][1]
        x2, y2 = positions[1][0], positions[1][1]
        distance = ((x2 - x1)**2 + (y2-y1)**2)**(1/2)
        print(f"{machine}의 이동 거리: {distance:.2f} 미터")

machine_positions = {
    "Machine A": [(0, 0), (5, 5)],
    "Machine B": [(2, 2), (6, 8)],
    "Machine C": [(0, 0), (3, 4)]
}

calculate_single_distance(machine_positions)

#

Machine A의 이동 거리: 7.07 미터

Machine B의 이동 거리: 7.21 미터

Machine C의 이동 거리: 5.00 미터

 

문제 3-3 : 혼합된 설비 코드를 전처리하는 프로그램 구현

배경

당신은 제조 공장에서 설비 데이터를 관리하고 분석하는 데이터 분석가입니다. 최근 설비 유지보수 시스템에 저장된 설비 코드 데이터가 한글 숫자와 아라비아 숫자가 혼합된 형식으로 입력되어 있어, 이를 정리하고 분석할 필요가 있습니다.

설비 데이터를 모두 아라비아 숫자로 변환해야 정확한 데이터 분석과 유지보수 일정 수립이 가능합니다.

목표

한글 숫자와 아라비아 숫자가 혼합된 설비 코드 문자열이 주어졌을 때, 모든 숫자를 아라비아 숫자로 변환하는 코드를 작성하세요. (예시 : "삼5이사" → "3524")

참고사항

  • 한글 숫자의 범위는 아래와 같습니다:
    • 한글 숫자: 영, 일, 이, 삼, 사, 오, 육, 칠, 팔, 구
  • 변환 대상은 한글 숫자이며, 아라비아 숫자는 그대로 유지합니다.
def equipment_code_decoder(code_list):
    # 여기에 코드를 작성하세요
    # 여기에 코드를 작성하세요
    # 여기에 코드를 작성하세요
    print(f"[{code}]에 대한 설비 코드는 [{converted_code}]입니다.")

# 설비 코드 목록
code_list = [
    "삼5이사",
    "0오6칠",
    "48삼구",
    "이74팔",
    "9일이삼"
]

# 코드 변환 함수 실행
equipment_code_decoder(code_list)

 

def equipment_code_decoder(code_list):
  for code in code_list:
    converted_code = code.replace("삼","3").replace("영","0").replace("일","1").replace("이","2").replace("사","4").replace("오","5").replace("육","6").replace("칠","7").replace("팔","8").replace("구","9")
    print(f"[{code}]에 대한 설비 코드는 [{converted_code}]입니다.")
 
code_list = [
    "삼5이사",
    "0오6칠",
    "48삼구",
    "이74팔",
    "9일이삼"
]
 
equipment_code_decoder(code_list)

#

[삼5이사]에 대한 설비 코드는 [3524]입니다.
[0오6칠]에 대한 설비 코드는 [0567]입니다.
[48삼구]에 대한 설비 코드는 [4839]입니다.
[이74팔]에 대한 설비 코드는 [2748]입니다.
[9일이삼]에 대한 설비 코드는 [9123]입니다.
 
 
 
 
다시 풀어봄
def equipment_code_decoder(code_list):
  convert = {"영":0, "일":1, "이":2, "삼":3, "사":4, "오":5, "육":6, "칠":7, "팔":8, "구":9}
  for code in code_list :
    converted_code = code
    for i in convert.keys() :
      converted_code = converted_code.replace(i,str(convert[i]))
    print(f"[{code}]에 대한 설비 코드는 [{converted_code}]입니다.")

# 설비 코드 목록
code_list = [
    "삼5이사",
    "0오6칠",
    "48삼구",
    "이74팔",
    "9일이삼"
]

# 코드 변환 함수 실행
equipment_code_decoder(code_list)