Печать кортежа с форматированием строк в Python



Итак, у меня есть эта проблема.
Я получил кортеж (1,2,3), который я должен распечатать с форматированием строки.
например.



tup = (1,2,3)
print "this is a tuple %something" % (tup)


и это должно печатать представление кортежа с скобками, например




это кортеж (1,2,3)




но я TypeError: not all arguments converted during string formatting вместо.



как в мире я могу это сделать? Своего рода потерял здесь, так что если вы, ребята, могли бы указать мне в правильном направлении:)

453   10  

10 ответов:

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

создание одноэлементного кортежа с кортежем интереса в качестве единственного элемента, т. е. (thetuple,) часть, является ключевым здесь.

отметим, что % синтаксис является устаревшим. Используйте str.format, что проще и читабельнее:

t = 1,2,3
print 'This is a tuple {0}'.format(t)

многие ответы, приведенные выше верны. Правильный способ сделать это:

>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)

однако, был спор о том, если '%' строковый оператор устарел. Как многие отметили, он определенно не устарел, как '%' строковый оператор легче комбинировать строковый оператор со списком данных.

пример:

>>> tup = (1,2,3)
>>> print "First: %d, Second: %d, Third: %d" % tup
First: 1, Second: 2, Third: 3

однако, используя

>>> tup = (1, 2, 3)
>>> print "Here it is: %s" % (tup,)
Here it is: (1, 2, 3)
>>>

отметим, что (tup,) кортеж с кортежем. Внешний Кортеж является аргументом для оператора%. Внутренний Кортеж - это его содержимое, которое фактически печатается.

(tup) - это выражение в скобках, которое при оценке результатов tup.

(tup,) с конечной запятой-это Кортеж, который содержит tup как только член.

это не использовать форматирование строк, но вы должны быть в состоянии сделать:

print 'this is a tuple ', (1, 2, 3)

Если вы действительно хотите использовать форматирование строк:

print 'this is a tuple %s' % str((1, 2, 3))
# or
print 'this is a tuple %s' % ((1, 2, 3),)

Примечание, это предполагает, что вы используете версию Python ранее 3.0.

t = (1, 2, 3)

# the comma (,) concatenates the strings and adds a space
print "this is a tuple", (t)

# format is the most flexible way to do string formatting
print "this is a tuple {0}".format(t)

# classic string formatting
# I use it only when working with older Python versions
print "this is a tuple %s" % repr(t)
print "this is a tuple %s" % str(t)

Я думаю, что лучший способ сделать это:

t = (1,2,3)

print "This is a tuple: %s" % str(t)

Если вы знакомы с printf форматирование стиля, затем Python поддерживает свою собственную версию. В Python это делается с помощью оператора"%", применяемого к строкам (перегрузка оператора по модулю), который принимает любую строку и применяет к ней форматирование в стиле printf.

в нашем случае мы говорим ему напечатать " это кортеж:", а затем добавить строку "%s", и для фактической строки мы передаем строковое представление кортежа (путем вызова str (t)).

Если вы не знакомы с форматированием стиля printf, я настоятельно рекомендую учиться, так как это очень стандартно. Большинство языков поддерживают его так или иначе.

обратите внимание, что конечная запятая будет добавлена, если Кортеж имеет только один элемент. например:

t = (1,)
print 'this is a tuple {}'.format(t)

и вы получите:

'this is a tuple (1,)'

в некоторых случаях, например, вы хотите получить список кавычек для использования в строке запроса mysql, например

SELECT name FROM students WHERE name IN ('Tom', 'Jerry');

вы должны рассмотреть, чтобы удалить хвостовую запятую использовать заменить(',)', ')') после форматирования, потому что возможно, что Кортеж имеет только 1 элемент типа ('Tom',), поэтому хвостовая запятая должна быть удалено:

query_string = 'SELECT name FROM students WHERE name IN {}'.format(t).replace(',)', ')')

пожалуйста, предложите если у вас есть достойный способ удаления запятой в выходных данных.

попробуйте это, чтобы получить ответ:

>>>d = ('1', '2') 
>>> print("Value: %s" %(d))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

если мы помещаем только один кортеж внутри (), он сам создает кортеж:

>>> (d)
('1', '2')

Это означает, что приведенный выше оператор печати будет выглядеть так: печать ("значение: %s" %('1', '2')) что является ошибкой!

отсюда:

>>> (d,)
(('1', '2'),)
>>> 

выше будут правильно подаваться аргументы печати.

говорить дешево, показать вам код:

>>> tup = (10, 20, 30)
>>> i = 50
>>> print '%d      %s'%(i,tup)
50  (10, 20, 30)
>>> print '%s'%(tup,)
(10, 20, 30)
>>> 

Comments

    Ничего не найдено.