2013-08-20 3 views
2

Я занимаюсь программированием на python, и это класс. и код не печатает правильный ответ.Конкатенация строк на Python

class Car(object): 
    condition = "new" 
    def __init__(self, model, color, mpg): 
     self.model = model 
     self.color = color 
     self.mpg = mpg 
    def display_car(self): 
     print "This is a "+ self.color + self.model+ " with "+str(self.mpg)+"MPG" 

my_car = Car("DeLorean", "silver", 88) 
print my_car.display_car() 

Я пытаюсь напечатать Это серебряный DeLorean с 88 миль на галлон.

+2

Но что она делает печать? –

+0

Kaushik, также добавить пробелы: '' ... self.color + "" + self.model ... '' –

ответ

5

Попробуйте эту версию display_car метода вместо:

def display_car(self): 
    print "This is a %s %s with %d MPG." % (self.color, self.model, self.mpg) 

Или, вы можете использовать format:

def display_car(self): 
    print "This is a {0} {1} with {2} MPG.".format(self.color, self.model, self.mpg) 

Обе версии печати This is a silver DeLorean with 88 MPG.

Я думаю, что вы видите, что оба версии более читабельны, чем ваши с конкатенацией строк.

Вы можете сделать его еще более удобным для чтения с помощью format с именованными аргументами:

def display_car(self): 
    print "This is a {color} {model} with {mpg} MPG.".format(color=self.color, model=self.model, mpg=self.mpg) 

Кроме того, у вас есть None печататься тоже - заменить print my_car.display_car() с my_car.display_car().

+1

лучше использовать' string.format() '? и его должно быть '% d' для' mpg'? –

+0

@alecxe Я хотел бы знать, что мое заявление о конкатенации правильное или нет? если я хочу 'print' ** Это серебряный DeLorean с 88 MPG ** с пробелами в них только один за одним словом –

+0

@GrijeshChauhan yup, я добавил опции с помощью' format'. '% d' может быть более правильным здесь, согласился. Благодарю. – alecxe

1

print в print my_car.display_car() является излишним, поскольку вы уже напечатали заявление в методе display_car. Таким образом, вы получаете дополнительные None.

+0

Так что мне делать? оператор 'display_car'' print' должен быть заменен на 'return'? –

+0

Это один из вариантов. Кроме того, просто напишите 'my_car.display_car()' (без 'print' спереди). –

+0

Спасибо большое @benjamin –

4

Изменить это:

def display_car(self): 
    return "This is a "+ self.color + self.model+ " with "+str(self.mpg)+"MPG" 

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

my_car = Car("DeLorean", "silver", 88) 
my_car.display_car() 
+0

Спасибо, что сделали. @Oscar –

1

Python неявно возвращает None если вы ничего так print не возвращать ИНГ функцию, которая вызывает printprint также будет None.

+0

Большое спасибо человеку ..! –

0

Линия

print my_car.display_car() 

должен быть

my_car.display_car() 
Смежные вопросы