Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

Nonamed Develog

[TIL] AI 웹 개발 7기 사전 캠프 2-2 본문

WHAT I LEARN/TIL

[TIL] AI 웹 개발 7기 사전 캠프 2-2

노네임드개발자 2024. 5. 28. 18:08

[Python 과제]Lv2. 스파르타 자판기: 두 번째 도전...

beverages = {
    "사이다": 1700,
    "콜라": 1900,
    "식혜": 2500,
    "솔의눈": 3000
}

for beverage, price in beverages.items():
    print(beverage, price)

user_choice = input("음료를 선택해주세요")

어제 여기까지 진행했지만

 

2. 사용자는 음료를 선택할 수 있습니다.

  • 사용자에게 어떤 음료를 살 것인지를 입력받습니다.
    • ex) 사이다
    • 목록에 없는 음료일 경우 실행이 종료됩니다.

이 문제가 어려워서 진행이 되지 않았다. 문제를 확인하는 중 input에 대한 입력값을 어디에 넣어야하는지 피드백을 어떻게 받는지를 몰랐다. 찾아보니 실행창에 입력해 볼 수 있었던 것. 그리고 \n 을 입력하면 개행으로 입력값을 보낼 수 있었다. 어제 코드를 짰는데 이게 맞는지 틀린지 확인이 되어야하는데 확인되지도 않고 오류는 오류대로 나다보니 멘붕이 왔던거 같다.

#

사이다 1700
콜라 1900
식혜 2500
솔의눈 3000
음료를 선택해주세요

라고 실행값이 나오는데 이 것을 어떻게 하는지 개념이 많이 덜 잡힌듯 하다.

beverages = {
    "사이다": 1700,
    "콜라": 1900,
    "식혜": 2500,
    "솔의눈": 3000
}

for beverage, price in beverages.items():
    print(beverage, price)

user_choice = input("음료를 선택해주세요\n")
if user_choice in beverages.keys():
    print(user_choice)

힌트를 통해 딕셔너리의 key 기능을 활용하면

#

사이다 1700
콜라 1900
식혜 2500
솔의눈 3000
음료를 선택해주세요

사이다
사이다

#

사이다 1700
콜라 1900
식혜 2500
솔의눈 3000
음료를 선택해주세요

 

잘된다... 어제 7시까지 고민했는데 조금 억울할지도

 

3. 사용자는 지불할 금액을 입력할 수 있습니다.

  • 사용자에게 얼마를 넣을지 입력받습니다.
    • ex) 2000
    • 지불하는 금액이 선택한 음료의 비용보다 작다면 “돈이 부족합니다.” 를 출력합니다
beverages = {
    "사이다": 1700,
    "콜라": 1900,
    "식혜": 2500,
    "솔의눈": 3000
}

for beverage, price in beverages.items():
    print(beverage, price)

user_choice = input("음료를 선택해주세요\n")
if user_choice in beverages.keys():
    print(user_choice)
else:
    exit()

money = input("금액을 입력해주세요\n")
print(money)

앞의 if 문에 else를 사용하지 않고 무시했더니 목록에 없는 것을 입력했는대도 금액을 입력하라는 실행 결과가 나와서 급하게 else를 추가하고 if 문에서 실행 종료 함수인 exit()를 사용했다.

beverages = {
    "사이다": 1700,
    "콜라": 1900,
    "식혜": 2500,
    "솔의눈": 3000
}

for beverage, price in beverages.items():
    print(beverage, price)

user_choice = input("음료를 선택해주세요\n")

if user_choice in beverages.keys():
    money = input("금액을 입력해주세요\n")
    if int(money) < price:
        print("돈이 부족합니다")
else:
    exit()

if문을 사용하여 목록에 있는 음료를 입력 시 금액을 입력하게 해봤다. 금액이 가격보다 작을 시 돈이 부족합니다 라고 실행값이 나오도록 설정했다. 여기서 money는 문자열(str)로 인식되기 때문에 error가 나와서 int를 붙여 숫자열로 바꿔줬다.

하지만 여기서 사이다를 1700 입력을 했을 때 "돈이 부족합니다"가 실행되었다. 사이다, 콜라, 식혜 모두 돈이 부족하다고 나오고 솔의눈만 정상적으로 결과가 나왔다.

보니 price 값이 3000으로 고정되어 있었다. price를 값을 새로운 if문에 넣어주기로 했다.

beverages = {
    "사이다": 1700,
    "콜라": 1900,
    "식혜": 2500,
    "솔의눈": 3000
}

for beverage, price in beverages.items():
    print(beverage, price)

user_choice = input("음료를 선택해주세요\n")

if user_choice in beverages.keys():
    price = beverages(user_choice)
    money = input("금액을 입력해주세요\n")
    if int(money) < price:
        print("돈이 부족합니다")
    elif int(money) == price:
        print("주문 완료")
else:
    exit()

이렇게 짜고 음료를 입력했더니 TypeError: 'dict' object is not callable 라는 에러코드를 확인할 수 있었다.

beverages = {
    "사이다": 1700,
    "콜라": 1900,
    "식혜": 2500,
    "솔의눈": 3000
}

for beverage, price in beverages.items():
    print(beverage, price)

user_choice = input("음료를 선택해주세요\n")

if user_choice in beverages.keys():
    price = beverages[user_choice]
    money = input("금액을 입력해주세요\n")
    if int(money) < price:
        print("돈이 부족합니다")
    elif int(money) == price:
        print("주문 완료")
else:
    exit()

괄호가 () 가 아닌 []을 사용했어야 했다.

 

4. 사용자는 음료를 구매하고 남은 잔액을 확인할 수 있습니다.

  • 잔액을 화면에 표시합니다.
    • ex) 입력한 돈 2000원, 사이다 1700원 일때 300원을 잔액으로 보여줍니다.

최종 코드

beverages = {
    "사이다": 1700,
    "콜라": 1900,
    "식혜": 2500,
    "솔의눈": 3000
}

for beverage, price in beverages.items():
    print(beverage, price)

user_choice = input("음료를 선택해주세요\n")

if user_choice in beverages.keys():
    price = beverages[user_choice]
    money = int(input("금액을 입력해주세요\n"))
    if money < price:
        print("돈이 부족합니다")
    else:
        change = beverages[user_choice] - money
        print(change)
else:
    exit()

#

사이다 1700
콜라 1900
식혜 2500
솔의눈 3000
음료를 선택해주세요
사이다
금액을 입력해주세요
2000
-300

 

드디어 했다.

-if문에서 앞의 딕셔너리의 요소들을 다시 써줘야하는 것

-if문 끝은 항상 :(따옴표)로 마무리하는 것

-if문 쓸 때 들여쓰기 신중할 것

-Run 창에서 input 값을 입력할 수 있는 것

-딕셔너리의 key, item 사용

등등을 알 수 있는 좋은 기회였다.

 

일일 알고리즘 코드카타 풀어보기

Q. 정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

def solution(n):
    answer = ((n/2)*(2+n))/2
    return answer

학창시절 때 배운 등차수열을 이용하여 수식을 써봤는데...

입출력 예로 코드 실행을 한 결과는 잘나왔는데 제출 후 채점하기에서 71.4점으로 오답이라고 나왔다.

def solution(n):
    answer = int(((n/2)*(2+n))/2)
    return answer

소수점이 문제인가 싶어 int를 넣어봤지만 85.7점으로 또 오답이 나왔다.

def solution(n):
    import math
    answer = math.floor(((n/2)*(2+n))/2)
    return answer

소수점 문제를 완전히 해결하고 싶어서 math 라이브러리에 소수점 버리는 함수를 구글링해 적용해 봤지만 결과는 같았다.

def solution(n):
    import math
    answer = math.floor(((math.floor(n/2))*(2+n))/2)
    return answer

전체값에만 math.floor() 적용시키는게 아니라 나누는 요소마다 math.floor를 이용하면 정답!

괄호가 너무 많아서 쓸 때 무진장 헷갈려 이게 맞나 싶은 생각이 들기도 한다.

def solution(n):
    answer = int(((int(n/2))*(2+n))/2)
    return answer

굳이 math 라이브러리를 사용할 필요없이 int를 똑같이 적용해보니 잘만 된다.

 

다른 사람들의 풀이 방식을 보자!

def solution(n):
    answer = ((n//2)*(2+n))//2
    return answer

...

산술연산자 / 와 //의 차이를 알았더라면 위에서 내가 했던 창의적이게 멍청한 짓을 하지 않았을텐데!

/ : float - 소수점까지 출력

// : int - 정수만 출력

 

그 밖에 for 문을 이용하는 방법이 보여서 시도해봤다.

def solution(n):
    answer = 0
    for i in range(1,n+1):
        if i % 2 == 0:
            answer += i        
    return answer

아마도 이게 출제 의도인 거 같다.

같은 팀원 분과 이 문제에 대해서 이야기를 해봤는데 팀원 분은 이런 식으로 푸신 것 같다.

아무래도 파이썬을 공부하는만큼 사고를 파이썬 문법에 맞춰서 하는 습관이 필요하다 느꼈다.