데이터 분석가

파이썬(Python) 경매(bidding) 프로젝트 본문

파이썬(python) 프로젝트 모음

파이썬(Python) 경매(bidding) 프로젝트

PlintAn 2023. 3. 21. 14:00

안녕하세요 !

 

뭉크 절규 경매입니다

그림은 직접 그린 그림인데 어떤가요 ㅎㅎ 잘 그렸을까요

 

 

이번 시간에는 Def, While not을 활용한

 

경매 최종 입찰 프로그램을 만들어 보겠습니다 !

 

From replit import clear
From art import logo
Print(logo)

logo = '''
                         ___________
                         \         /
                          )_______(
                          |"""""""|_.-._,.---------.,_.-._
                          |       | | |               | | ''-.
                          |       |_| |_             _| |_..-'
                          |_______| '-' `'---------'` '-'
                          )"""""""(
                         /_________\\
                       .-------------.
                      /_______________\\
'''

먼저 clear 함수를 불러옵니다 clear 함수는 리스트 [], 딕셔너리{} 안에 속한 내용물들을

 

비워주는 함수입니다. clear() 사용 시 싹 비워지는 것을 볼 수 있습니다 ! 

 

경매 시작을 알리는 경매 진행자 '망치(?)'입니다.

 

로고는 사실 위와 같이 불러올 필요 없이 From art import logo로 대체됩니다.

 

bids = {} #입찰 값을 넣을 딕셔너리 생성
bidding_finished = False #비딩 종료, While not문은 False값 반환 시 종료

# 이 때 bidding_record = {"A" : 100, "B" : 1000} 같은 형식으로 저장
def find_highest_bidder(bidding_record): #최고 입찰자를 찾는다
  highest_bid = 0 #비딩값은 0으로 시작
  winner = "" #추후 최종입찰자의 이름

  for bidder in bidding_record: #기록된 입찰기록에서 입찰자로 조회
    bid_amount = bidding_record[bidder] #기록된 입찰자 인덱싱하여 순서대로 실행
    if bid_amount > highest_bid: #새로운 입찰값이 기존 최종입찰값보다 높다면
      highest_bid = bid_amount #새로운 최고입찰값
      winner = bidder #최종입찰자
  print(f"The winner is {winner} with a bid of ${highest_bid}")

 

bids = {} 딕셔너리를 선언합니다.

그리고 Whle not 반복문(Flase 반환 시 중단)을 사용할 거기 때문에 기본 값으로 Flase를 맞춰줍시다.

 

그 후 Def  반복문으로 find_highest_bidder 을 구하기 위한 변수 bidding_record 설정합니다.

 

그 후 for문을 이용해 input 함수로 입력된 bidding_record를 범위로 bidder(임의변수)로 반복합니다.

ㄴ 이 말은 우리들이 흔히 아는 for i in range 의 형태를 = >> for bidder in bidding_record  로 변환한 것 뿐입니다.

(다음 코드에서 input(name),int(input(price)로 각각 짝을 맞춰 딕셔너리로 불러올 예정입니다)

ㄴ 딕셔너리에 저장된 입찰 기록bidding_record[bidder] >> 입찰자 인덱싱

if문을 이용해 새로운 입찰 기록이 highest_bid에 저장된 기존 입찰가보다 높다면 그 값으로 대체합니다.

 

while not bidding_finished: #6번째 행의 True 값과 연관
  name = input("What is your name?: ")
  price = int(input("What is your bid?: $"))
  bids[name] = price #bids = {} 딕셔너리에 이미 넣어진 name : "" 밸류 값에 해당한다
  should_countiue = input("Are there any other bidders? Type 'yes' or 'no'.\n")
  #입찰자가 더 있습니까 ?
  if should_countiue == "no":  #또 다른 입찰자가 '없다'
    bidding_finished = True #While not = Ture 값으로 while not문을 빠져나가 초기값Flase로 종료
    find_highest_bidder(bids) #
  elif should_countiue == "yes": #또 다른 입찰자가 존재한다
    clear() #딕셔너리 {} 최고 입찰자만 남기고 다른 값 삭제

다음 while not 반복문을 이용해 bidding_finished = Flase 값이 나올 동안 반복합니다.

 

  name, price를 input으로 입력받아

 

bids [name]으로 name을 생성함과 동시에 bids[name] = price으로 EX) bids = { "name" : price},,. 

 

name(Key) : Price(value) 를 생성합니다.

 

sould_countiue = 'yes', 'no'로 입력받아

 

if문을 이용해 'yes'일 경우 bidding_finished = Truewhile not 문으로 돌아가 새로운 입찰가를 입력받고

 

'no' 일 경우 최고 입찰자만 제외하고 삭제하여 최종 입찰자를 print(f'{} )로 출력한다.

 

 

 

 

이번 시간에는 저희가 배운 반복문을 무려 3개나 적용시켜 봤는데요

( Def 반복문, While not 반복문, for 반복문 )

 

이처럼 다양하게 알고리즘을 짜는 연습을 하면 실력이 점차 늘어가는 것을 볼 수 있어서 참 좋은거 같습니다 ㅎㅎ

 

딕셔너리를 입력 받는 식이 조금 복잡해 보일 수도 있는데 사실 간단히 표현하자면

 

bids[name] = price 로 "name"과 price를 동시에 입력할 수 있다는 것을 알고 있으면 이해가 쉬울거 같습니다.

 

어렵긴 하지만 반드시 알고 넘어가야 하는 개념이기에 반복 연습을 해봅시다 !!

 

Comments