Есть ли ярлыки для такого случая? - PullRequest
0 голосов
/ 01 марта 2019

все!Я новичок в программировании, и я не смог найти правильный ответ на этот вопрос.Я постараюсь объяснить это как можно лучше:

Я хотел бы знать, есть ли способы сократить мой код, чтобы не делать его таким повторяющимся в случаях, подобных приведенному ниже.

class vehicle:
    colour = 0
    turbo = 0
    quality = 1
    type = 0

    def create_vehicle(self, pick_colour, add_turbo, define_quality, pick_type):
        self.colour = pick_colour
        self.turbo = add_turbo
        self.quality = define_quality
        self.type = pick_type
        return (self.colour, self.turbo, self.quality, self.type)

#This is the part I want to shorten up#

    def check_vehicle(self):
        if self.type == 0:
            self.type = "motorbike"
        elif self.type == 1:
            self.type = "car"
        elif self.type == 2:
            self.type = "van"
        if self.quality == 1:
            self.quality = "basic"
        elif self.quality == 2:
            self.quality = "normal"
        elif self.quality == 3:
            self.quality = "good"
        elif self.quality == 4:
            self.quality = "superior"
        if self.colour == 0:
            self.colour = "white"
        elif self.colour == 1:
            self.colour = "red"
        elif self.colour == 2:
            self.colour = "yellow"
        elif self.colour == 3:
            self.colour = "blue"
        elif self.colour == 4:
            self.colour = "green"
        elif self.colour == 5:
            self.colour = "black"
        elif self.colour == 6:
            self.colour = "orange"
        elif self.colour == 7:
            self.colour = "grey"
        if self.turbo == 0:
            self.turbo = "does not have"
        elif self.turbo == 1:
            self.turbo = "has"
        print("The %s I've created has a %s quality. It is %s and %s turbo" % (self.type, self.quality, self.colour, self.turbo))

"""
Types:
    0 = Motorbike
    1 = Car
    2 = Van
Quality:
    From 1 to 4
    Increases general stats of the vehicle (Speed, Appearance, Maneuverability)
    1 = Basic
    2 = Normal
    3 = Good
    4 = Superior
Colour:
    0 = White
    1 = Red
    2 = Yellow
    3 = Blue
    4 = Green
    5 = Black
    6 = Orange
    7 = Grey
"""

vehicle1 = vehicle()
vehicle1.create_vehicle(5, 1, 4, 0)
vehicle1.check_vehicle()

Как я сам проверил, этот код выводит следующее:

The motorbike I've created has a superior quality. It is black and has turbo

Это работает!Ура!Однако проблема в том, что я хочу сократить часть кода, которую я выделил выше.Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вы можете использовать списки или словари для преобразования кодов в описания.Однако я бы посоветовал вам не обновлять элементы ваших объектов, если вы просто хотите напечатать описание.

def check_vehicle(self):
    types     = [ "motorbike", "car", "van" ]
    qualities = [ "", "basic", "normal", "good", "superior" ]
    colours   = [ "white", "red", "yellow", "blue", "green", "black" ]
    hasTurbo  = ["does not have","has"]
    self.type    = types[self.type]
    self.quality = qualities[self.quality]
    self.colour  = colours[self.colour]
    self.turbo   = hasTurbo[self.turbo]
    print("The %s I've created has a %s quality. It is %s and %s turbo" % (self.type, self.quality, self.colour, self.turbo))
0 голосов
/ 01 марта 2019

Если вы используете Python 2.7, вы захотите наследовать от Object.т.е.

class vehicle:

должно стать

class vehicle(Object):

Для получения информации о том, почему см. Класс Python наследует объект

В зависимости от вашего варианта использования это может бытьлучше определить конструктор (он же init ), а не create_vehicle (..).

Для получения дополнительной информации см. https://micropyramid.com/blog/understand-self-and-init-method-in-python-class/

Для check_vehicle Я бы упростил использование словаря.например,

types = {
    1: "motorbike",
    2: "car",
    3:......etc
}

, затем в

def check_vehicle(self):
    if self.type in types:
        self.type = types[self.type]
    else:
        print "My error message"

https://www.w3schools.com/python/python_dictionaries.asp

...