2주차 파이썬 미션 늦은 제출 ㅠㅡㅠ

연습문제 1

사용자로부터 입력받은 숫자의 합을 계산하는 프로그램

replit 사용, ChatGPT 3.5 사용


질문1

답변1

코드를 살펴보겠습니다.

  • 프로그램의 메인 로직을 캡슐화하기 위해 main() 함수를 정의합니다.

  • main() 함수 내에서 사용자가 입력한 숫자를 저장하기 위해 빈 목록 숫자를 초기화합니다.

  • for 루프를 사용하여 5번 반복하고 사용자에게 매번 숫자를 입력하라는 메시지를 표시합니다.

  • 루프 내부에서는 'while' 루프를 사용하여 유효한 정수만 입력으로 허용되도록 합니다. 입력이 유효한 정수가 아닌 경우 유효한 입력이 제공될 때까지 사용자에게 다시 묻는 메시지가 표시됩니다.

  • int() 함수를 사용하여 사용자 입력을 정수로 변환하고 이를 numbers 목록에 추가합니다.

  • 5개의 숫자를 모두 얻은 후 sum() 함수를 사용하여 숫자의 합을 계산합니다.

  • 마지막으로 숫자의 합을 출력합니다.

이 프로그램은 5개의 유효한 정수를 수집할 때까지 사용자에게 숫자를 입력하도록 반복적으로 요청한 다음 그 합계를 계산하고 인쇄합니다.


설명도 잘 알려줍니다!

시도해 보았더니 오류가 났네요!

질문2


답변2 - 수정된 코드를 짜줍니다.

오류가 처리되고, 정수만 입력받는 값이 되어서 정답을 확인해보니 너무 간결해서. 아래처럼 물어봤습니다.

질문3

답변3

답변을 보니 앞으로는 간결하게 짜달라고 요청해보려고 합니다!

늦었지만 차근차근 따라가 보겠습니다~ 아래 연습 문제 2는 집에서 추가하겠습니다!


연습문제 2

안녕. 다시 돌아온 파이썬 초보야. 어제 파이썬을 깔아서 같이 파이썬 코드를 짜 보았잖아? (그만큼 내가 초보라는 말이야) 오늘은 예제 2번을 진행할거야. 외부 API를 사용하여 데이터를 가져오고, JSON 형식으로 처리하는 프로그램을 작성합니다. 이를 통해 네트워크 요청, JSON 데이터 파싱 및 데이터 처리 기술을 연습할 수 있습니다. 상세 요구 사항: 1. 무료 날씨 API (예: OpenWeatherMap)를 사용하여 특정 도시의 현재 날씨 정보를 가져옵니다. 2. API에서 반환된 JSON 데이터를 파싱하여 필요한 정보(예: 온도, 습도, 날씨 상태 등)를 추출합니다. 3. 추출된 정보를 사용자에게 친숙한 형태로 출력합니다. 도와줘.

ChatGPT

ChatGPT

안녕! 파이썬으로 외부 API를 활용하여 데이터를 가져오고 JSON 형식으로 처리하는 건 정말 좋은 연습이야. 어떤 API를 사용할지 정했어? OpenWeatherMap을 사용해볼까? 그리고 어떤 도시의 날씨 정보를 가져올 건지도 알려줄래? 함께 시작해보자!

You

좋아 . OpenWeatherMap을 사용해보자, 나는 미국 뉴욕에 있는 날씨를 알고싶어 .

ChatGPT

ChatGPT

좋아, 그럼 뉴욕의 날씨 정보를 가져오기 위해 OpenWeatherMap API를 사용해볼게. 먼저 API 요청을 보내기 위해 requests 라이브러리를 사용할 거야. 그리고 가져온 JSON 데이터를 파싱하기 위해 json 라이브러리도 사용할 거야. 시작해보자.

pythonCopy codeimport requests
import json

def get_weather(city):
    api_key = "YOUR_API_KEY"  # 여기에 OpenWeatherMap API 키를 입력해야 해요.
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
    
    response = requests.get(url)
    data = response.json()
    
    return data

def main():
    city = "New York"
    weather_data = get_weather(city)
    
    # 가져온 데이터 확인
    print("날씨 정보:")
    print(json.dumps(weather_data, indent=4))  # 전체 데이터 출력
    
    # 필요한 정보 추출 및 출력
    print("\n현재 뉴욕의 날씨:")
    print(f"온도: {weather_data['main']['temp']}°C")
    print(f"습도: {weather_data['main']['humidity']}%")
    print(f"날씨 상태: {weather_data['weather'][0]['description']}")

if __name__ == "__main__":
    main()

위 코드에서 "YOUR_API_KEY" 부분에는 자신의 OpenWeatherMap API 키를 입력해야 해요. 그리고 코드를 실행하면 뉴욕의 현재 날씨 정보가 출력될 거에요. 진행할 때 어려움이 있으면 언제든 물어봐줘!

이렇게 코드를 짜주길래 조금 더 간단히 해달라고 말해봤어요!

근데 이거 깔끔하게 코드 짠거 맞아? 초보라서 조금 정규화된 코드를 공부하고 싶거든


ChatGPT

네, 좋은 질문이에요! 코드를 더 정돈해서 깔끔하게 만들어보자면 함수를 좀 더 작은 단위로 분리하고, 예외 처리를 추가하는 것이 좋을 것 같아요. 또한 API 응답을 검증하고 데이터를 추출하는 부분을 함수로 분리해서 코드를 더 가독성 있게 만들 수 있어요. 여기에 좀 더 정돈된 버전의 코드를 보여줄게요:

pythonCopy codeimport requests

def get_weather(city, api_key):
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
    response = requests.get(url)
    response.raise_for_status()  # 요청이 실패했을 때 예외 발생
    return response.json()

def parse_weather_data(weather_data):
    weather_info = {
        "temperature": weather_data["main"]["temp"],
        "humidity": weather_data["main"]["humidity"],
        "description": weather_data["weather"][0]["description"]
    }
    return weather_info

def print_weather_info(city, weather_info):
    print(f"현재 {city}의 날씨:")
    print(f"온도: {weather_info['temperature']}°C")
    print(f"습도: {weather_info['humidity']}%")
    print(f"날씨 상태: {weather_info['description']}")

def main():
    city = "New York"
    api_key = "YOUR_API_KEY"  # 여기에 OpenWeatherMap API 키를 입력해야 해요.

    try:
        weather_data = get_weather(city, api_key)
        weather_info = parse_weather_data(weather_data)
        print_weather_info(city, weather_info)
    except requests.exceptions.RequestException as e:
        print("날씨 정보를 가져오는 데 실패했습니다.")
        print(f"에러 메시지: {e}")

if __name__ == "__main__":
    main()

이렇게 수정된 코드는 각 함수가 하나의 일을 처리하도록 만들었어요. get_weather 함수는 API로부터 날씨 정보를 가져오고, parse_weather_data 함수는 JSON 데이터를 파싱해서 필요한 정보를 추출하며, print_weather_info 함수는 사용자에게 정보를 출력해줘요. 또한 예외 처리를 통해 요청이 실패했을 때 에러 메시지를 출력하도록 했어요. 이렇게 작은 단위로 함수를 나누면 코드를 이해하기 쉬워질 뿐만 아니라 유지보수도 편리해질 거에요.

이렇게 코드가 나왔습니다!! api key를 넣었더니 되네용! 그런데 한글로 사용하고 싶어서 아래 내용을 추가해 달라고 했습니다.


한글로 입력한 도시의 이름을 영문으로 바꿔서 api가 호출하게 바꿔줘. 이건 한국사람을 위한 서비스야.

ChatGPT

ChatGPT

알겠어요! 사용자가 한글로 입력한 도시 이름을 영문으로 변환하여 API에 전달하는 방법을 구현할게요. 이를 위해서는 한글 도시명을 영문으로 변환하는 기능이 필요합니다. 이를 위해 외부 라이브러리를 사용할 수도 있지만, 간단한 예제에서는 간단한 딕셔너리를 사용하여 직접 매핑하는 방법을 사용할 수 있습니다. 코드를 수정하여 보여드릴게요.

pythonCopy codeimport requests

# 한글 도시명을 영문으로 변환하는 딕셔너리
city_mapping = {
    "서울": "Seoul",
    "부산": "Busan",
    "대구": "Daegu",
    "인천": "Incheon",
    "광주": "Gwangju",
    "대전": "Daejeon",
    "울산": "Ulsan",
    "세종": "Sejong",
    "경기": "Gyeonggi",
    # 추가적인 도시를 필요에 따라 매핑해주세요
}

def get_weather(city):
    api_key = "YOUR_API_KEY"  # 여기에 OpenWeatherMap API 키를 입력하세요.
    english_city = city_mapping.get(city, city)  # 딕셔너리에서 도시명을 영문으로 변환하거나 그대로 사용
    url = f"http://api.openweathermap.org/data/2.5/weather?q={english_city}&appid={api_key}&units=metric"
    response = requests.get(url)
    response.raise_for_status()
    return response.json()

def parse_weather_data(weather_data):
    weather_info = {
        "temperature": weather_data["main"]["temp"],
        "humidity": weather_data["main"]["humidity"],
        "description": weather_data["weather"][0]["description"]
    }
    return weather_info

def print_weather_info(city, weather_info):
    print(f"현재 {city}의 날씨:")
    print(f"온도: {weather_info['temperature']}°C")
    print(f"습도: {weather_info['humidity']}%")
    print(f"날씨 상태: {weather_info['description']}")

def main():
    city = input("날씨를 확인할 도시(한글)를 입력하세요: ")

    try:
        weather_data = get_weather(city)
        weather_info = parse_weather_data(weather_data)
        print_weather_info(city, weather_info)
    except requests.exceptions.RequestException as e:
        print("날씨 정보를 가져오는 데 실패했습니다.")
        print(f"에러 메시지: {e}")

if __name__ == "__main__":
    main()

이제 사용자가 한글로 도시명을 입력하면 해당 도시명이 영문으로 변환되어 API에 전달됩니다. 코드를 실행하여 테스트해보시고, 추가로 필요한 도시가 있으면 딕셔너리에 추가하시면 됩니다. 문제가 있거나 추가로 도움이 필요하면 언제든지 말씀해주세요!

You

딕셔너리에 세계 주요 도시를 추가해줘. 한 100곳정도

ChatGPT

ChatGPT

알겠어요! 세계 주요 도시를 딕셔너리에 추가해볼게요. 이를 위해 세계 주요 도시의 한글명과 영문명을 매핑한 정보를 수집해야 합니다. 아래에는 몇 가지 세계 주요 도시를 예시로 추가해보겠습니다.

pythonCopy codecity_mapping = {
    # 한글명: 영문명
    "서울": "Seoul",
    "부산": "Busan",
    "대구": "Daegu",
    "인천": "Incheon",
    "광주": "Gwangju",
    "대전": "Daejeon",
    "울산": "Ulsan",
    "세종": "Sejong",
    "경기": "Gyeonggi",
    # 추가적인 도시를 필요에 따라 매핑해주세요
    "도쿄": "Tokyo",
    "상하이": "Shanghai",
    "베이징": "Beijing",
    "파리": "Paris",
    "런던": "London",
    "뉴욕": "New York",
    "로스앤젤레스": "Los Angeles",
    "시드니": "Sydney",
    "베를린": "Berlin",
    "모스크바": "Moscow",
    # 추가적인 도시를 필요에 따라 계속해서 추가해주세요
}

이렇게 추가하면 사용자가 입력한 한글 도시명에 대해 대응되는 영문 도시명을 사용하여 API에 요청할 수 있습니다. 필요한 도시를 계속해서 추가하실 수 있습니다. 문제가 있거나 추가로 도움이 필요하시면 언제든지 말씀해주세요!


더더더더 요청해서 완료!


그리고 더 쉽게 보기위해 날씨에 따라 이모지를 추가했습니다.


추가해야하는 부분만 알려줘.

ChatGPT

ChatGPT

네, 이모지를 추가하는 부분만 알려드릴게요. 이미지에 따라 이모지를 변경하는 코드를 print_weather_info 함수에 추가하겠습니다.

pythonCopy codedef print_weather_info(city, weather_info):
    emoji = "☀️"  # 날씨에 따라 이모지 변경 가능
    if "비" in weather_info['description']:
        emoji = "🌧️"
    elif "눈" in weather_info['description']:
        emoji = "❄️"

    print(f"현재 {city}의 날씨: {emoji}")
    print(f"온도: {weather_info['temperature']}°C")
    print(f"습도: {weather_info['humidity']}%")
    print(f"날씨 상태: {weather_info['description']}")

이렇게 하면 날씨에 따라 이모지가 출력되게 됩니다. 코드를 수정하고 테스트해보세요! 만약 추가적인 도움이 필요하다면 언제든지 말씀해주세요.

You

근데 좀 이상해 broken clouds 인데 해모양 이모지가 나오잖아.! 날씨에 따라서 이모지가 같아야해

ChatGPT

ChatGPT

네, 그렇군요. 날씨 상태에 따라 올바른 이모지가 출력되도록 수정해보겠습니다. 날씨 상태를 확인하고 이모지를 선택하는 부분을 수정하겠습니다.

pythonCopy codedef print_weather_info(city, weather_info):
    weather_condition = weather_info['description'].lower()  # 날씨 상태를 소문자로 변환하여 일관성 있게 비교

    if "clear" in weather_condition:  # 맑은 날씨
        emoji = "☀️"
    elif "clouds" in weather_condition:  # 흐린 날씨
        emoji = "☁️"
    elif "rain" in weather_condition or "drizzle" in weather_condition:  # 비가 오는 날씨
        emoji = "🌧️"
    elif "thunderstorm" in weather_condition:  # 천둥번개가 치는 날씨
        emoji = "⛈️"
    elif "snow" in weather_condition:  # 눈이 오는 날씨
        emoji = "❄️"
    else:
        emoji = ""  # 기타 경우에는 이모지 없음

    print(f"현재 {city}의 날씨: {emoji}")
    print(f"온도: {weather_info['temperature']}°C")
    print(f"습도: {weather_info['humidity']}%")
    print(f"날씨 상태: {weather_info['description']}")

이제 날씨 상태에 따라 올바른 이모지가 출력될 것입니다. 코드를 수정하고 다시 테스트해보세요! 만약 추가로 도움이 필요하시다면 언제든지 말씀해주세요.


이렇게 날씨에 한글로 입력한 도시에 따라 날씨 이모지와 온도, 습도, 날씨가 나오는 예제 완료했습니다!



#10기문과생도AI

1
1개의 답글
지피터스 뉴스레터

이번 주 AI, 딱 쓸 것만

매주 월요일 아침,
읽고 바로 써먹을 AI 소식만