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

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위