[zero-base/] DS Part 1. Python 중급 - 9일차 스터디 노트

손윤재·2023년 12월 14일

제로베이스 DS 22기

목록 보기
10/55
post-thumbnail

파이썬 중급 문제풀이

- 클래스


👌 예제 1. 클래스

자동차 경주 게임 클래스를 만들고 순위 결과를 출력


📣 자동차 클래스 정의

class Car:
    def __init__(self, n='fire car', c='red', s=200):
        self.name = n
        self.color = c
        self.max_speed = s
        self.distance = 0 # 얼마 만큼 이동했는지
  • 자동차 객체의 속성으로 이름, , 최고 속도, 이동 거리 선언

  • 각 속성에 Default 값을 할당한다.

  • 속도의 단위는 km/h로 가정한다.

def changeSpeed(self):
	return random.randint(0, self.max_speed)
  • 자동차의 첫 번째 기능은 변속이다.

  • 속도 변화는 random 모듈을 import해서 램덤으로 정한다.
    자동차는 매 시간마다 랜덤 속도로 이동한다고 가정한다.

  • 범위는 0부터 자동차 각 객체가 가진 최고 속도까지이다.
    최고 속도값은 Car 객체를 생성할 때 설정해도 되고
    Default 값(200km/h)을 그대로 사용해도 된다.

def getDistanceForHour(self):
	return self.changeSpeed() * 1
  • 자동차의 두 번째 기능은 1시간 당 이동한 거리를 알려주는 것이다.

  • 이동거리는 속도(km/h) * 시간(h)으로 구할 수 있다.
    1은 상징적으로 곱해주었다.

  • 속도는 위에서 정의한 changeSpeed() 함수에서 받아온다.


📣 레이싱 클래스 정의

class CarRacing:
    def __init__(self):
        self.cars = []
  • 자동차 레이스 경기를 진행할 클래스를 정의한다.

  • 속성으로 레이스에 참여하는 자동차 객체들을 담을 리스트를 선언한다.

def startRacing(self):
	for i in range(10):
		print(f'Racing {i+1}시간 후 이동거리: ')
		for car in self.cars:
			car.distance += car.getDistanceForHour()
		sleep(1)
		self.printCurrentCarDistance()
  • 레이싱 클래스의 첫 번째 기능은 자동차 경주를 실행하는 것이다.

  • 10시간 레이싱을 한다고 가정하고 이동거리가 가장 먼 자동차가 우승한다.

  • 경주에 참여한 각 자동차의 이동거리를 매 시간 더해간다.

  • 시간 별로 현재 이동거리를 출력해준다. 출력 함수는 따로 정의한다.

⭐ self.cars.sort(key=lambda car: car.distance, reverse=True)
      i = 1
      for car in self.cars:
          if i == 1:
              print(f'{car.name}({car.distance})\t- {i}위 우승!!')
          else:
              print(f'{car.name}({car.distance})\t- {i}위')
          i += 1
  • 레이싱 클래스의 두 번째 기능은 랭킹 결과를 출력하는 것이다.

  • cars 리스트의 정렬(sort()) 함수를 사용한다.

  • 각 자동차 객체의 이동거리를 키값으로 해서 내림차순 정렬한다.

  • 1위부터 차례대로 출력해준다.


📣 레이싱 실행

from car_game import class_car_racing as rc
carRacing = rc.CarRacing()
car01 = car.Car('Car01', 'white', 250)
car02 = car.Car('Car02', 'black', 200)
car03 = car.Car('Car03', 'yellow', 220)
car04 = car.Car('Car04', 'red', 280)
car05 = car.Car('Car05', 'blue', 150)
carRacing.addCar(car01)
carRacing.addCar(car02)
carRacing.addCar(car03)
carRacing.addCar(car04)
carRacing.addCar(car05)
  • 클래스를 선언한 모듈을 import한다.

  • 레이싱을 실행할 CarRacing 객체를 생성한다.

  • 5개의 자동차 객체를 생성하고 레이싱 참여에 등록한다.

carRacing.startRacing()
carRacing.printRanking()
  • 자동차 레이싱을 실행하고 랭킹 결과를 출력한다.

  • 실행결과

    Racing 1시간 후 이동거리: 
    ['Car01', 8]	['Car02', 196]	['Car03', 181]	['Car04', 194]	['Car05', 41]		
    Racing 2시간 후 이동거리: 
    ['Car01', 108]	['Car02', 328]	['Car03', 306]	['Car04', 209]	['Car05', 120]		
    Racing 3시간 후 이동거리: 
    ['Car01', 357]	['Car02', 385]	['Car03', 448]	['Car04', 382]	['Car05', 214]		
    Racing 4시간 후 이동거리: 
    ['Car01', 567]	['Car02', 576]	['Car03', 652]	['Car04', 475]	['Car05', 239]		
    Racing 5시간 후 이동거리: 
    ['Car01', 635]	['Car02', 635]	['Car03', 813]	['Car04', 669]	['Car05', 258]		
    Racing 6시간 후 이동거리: 
    ['Car01', 770]	['Car02', 676]	['Car03', 866]	['Car04', 718]	['Car05', 309]		
    Racing 7시간 후 이동거리: 
    ['Car01', 976]	['Car02', 700]	['Car03', 911]	['Car04', 797]	['Car05', 438]		
    Racing 8시간 후 이동거리: 
    ['Car01', 1018]	['Car02', 759]	['Car03', 1059]	['Car04', 803]	['Car05', 513]		
    Racing 9시간 후 이동거리: 
    ['Car01', 1138]	['Car02', 919]	['Car03', 1083]	['Car04', 942]	['Car05', 620]		
    Racing 10시간 후 이동거리: 
    ['Car01', 1149]	['Car02', 999]	['Car03', 1299]	['Car04', 1088]	['Car05', 693]		
    Car03(1299)	- 1위 우승!!
    Car01(1149)	- 2위
    Car04(1088)	- 3위
    Car02(999)	- 4위
    Car05(693)	- 5위


profile
ISTP(정신승리), To Be Data Scientist

0개의 댓글