2016-12-23 9 views
-1

У меня есть Vector класс следующим образом:печати кортеж Десятичные без этикетки «Десятичная»

class Vector(object): 

    def __init__(self, coordinates): 
     self.coordinates = tuple([Decimal(x) for x in coordinates]) 

    def __str__(self): 
     return 'Vector: {}'.format(self.coordinates) 

Если я запускаю код ниже ...

v1 = Vector([1,1]) 
print v1 

... Я получаю

Vector: (Decimal('1'), Decimal('1')) 

Как я могу избавиться от метки «Десятичная»? Вывод должен выглядеть следующим образом:

Vector: (1, 1) 
+1

Возможный дубликат [Python Decimal к String] (http://stackoverflow.com/questions/11093021/python-decimal-to-string) – Mureinik

+0

Я сознавал ул метод() , но просто применяя его к кортежу, он не удалял метку «Десятичная». Комбинация методов str() и join() внутри понимания списка помогла решить мою проблему. –

ответ

1

Добавление str() вокруг ваших знаков после запятой работы:

from __future__ import print_function 
from decimal import Decimal 

class Vector(object): 

    def __init__(self, coordinates): 
     self.coordinates = tuple([Decimal(x) for x in coordinates]) 

    def __str__(self): 
     return 'Vector: ({})'.format(', '.join(str(x) for x in self.coordinates)) 

v1 = Vector([1,1]) 
print(v1) 

Выход:

Vector: (1, 1) 
+0

Да, понял это. Улучшено, –

+0

Это правильно. –

+0

Спасибо, это решило мою проблему! –

1

Просто вызовите str функцию:

import decimal 
d = decimal.Decimal(10) 
d 
Decimal('10') 
str(d) 
'10' 

Для вашего кода:

def __str__(self): 
    return 'Vector: {}'.format(map(str, self.coordinates)) 
+5

Никогда не называйте методы двойного подчеркивания напрямую. Этот код должен быть 'str (d)'. –

+0

true, @DanielRoseman – Netwave

+0

Это не совсем то, что хочет OP: у него квадратные скобки вместо круглых, и у него есть нежелательные кавычки вокруг коорд. И в Python 3 'map' возвращает объект карты, а не список, поэтому выход будет еще более непостижим. –

Смежные вопросы