Nonamed Develog
[TIL] AI 웹 개발 7기 사전 캠프 2-2 본문
[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
아마도 이게 출제 의도인 거 같다.
같은 팀원 분과 이 문제에 대해서 이야기를 해봤는데 팀원 분은 이런 식으로 푸신 것 같다.
아무래도 파이썬을 공부하는만큼 사고를 파이썬 문법에 맞춰서 하는 습관이 필요하다 느꼈다.
'WHAT I LEARN > TIL' 카테고리의 다른 글
[TIL] AI 웹 개발 7기 사전 캠프 2-4 (0) | 2024.05.30 |
---|---|
[TIL] AI 웹 개발 7기 사전 캠프 2-3 (0) | 2024.05.29 |
[TIL] AI 웹 개발 7기 사전 캠프 2-1 (0) | 2024.05.27 |
[TIL] AI 웹 개발 7기 사전 캠프 1-5 (0) | 2024.05.24 |
[TIL] AI 웹 개발 7기 사전 캠프 1-4 (1) | 2024.05.23 |