2017-01-20 6 views
3

Я сказал, что в питона 3.x это можно добавить разделитель между строк, неоднократным использованием умножения, например ..Использование сен при умножении строки в Python

c = "rabble" 

print(c * 5, sep = ' | ') 

Я хотел бы, распечатать «сброд» 5 раз строкой | между каждым повторением.

Он сохраняет печать повторяющейся строки, но без символа разделителя. У меня возникли проблемы с поиском информации об использовании sep в этой конкретной ситуации. Что я делаю не так?

ответ

4

Вы можете получить необходимый эффект, но на самом деле это не имеет особого отношения к умножению per se.

sep аргумента print() обеспечивает разделитель между не-именованными аргументами - например:

>>> print("spam", "eggs", "ham", sep=" | ") 
spam | eggs | ham 

Вы могли бы просто передать c в print() 5 раз, чтобы получить результат, который вы ищете:

>>> c = "rabble" 
>>> print(c, c, c, c, c, sep=" | ") 
rabble | rabble | rabble | rabble | rabble 

... но это неудобно и бесполезно, если вы не знаете заранее, сколько раз вам понадобится c.

Чтобы обойти эту проблему, вы можете использовать argument unpacking - специальный синтаксис для передачи списка или другой последовательности к функции, как если бы элементы в нем были передаются как отдельные аргументы:

>>> s = ["spam", "eggs", "ham"] 
>>> print(*s) # notice the * 
spam eggs ham 

Чтобы получить результат, который вы ищете, вы можете создать список на лету из 5 копий c, и передать этот список с аргументом распаковки обозначения:

>>> print(*([c] * 5), sep = ' | ') 
rabble | rabble | rabble | rabble | rabble 

Обратите внимание, что вы мультипликативный список, содержащий c на пять, а не c. Вам может показаться полезным проверить, что на самом деле делает print(*(c * 5), sep = ' | '), и попытаться выяснить, почему (подсказка: строки также являются последовательностями).

+2

Спасибо Zero, я попробовал код в конце (используя распаковку аргументов без добавления c в список), и он печатает каждую букву строки «сброд» с символом '|' строка, разделяющая каждую. Я думаю, что у меня есть лучшее понимание исходной проблемы, которая заключается в том, что print (c * 5) просто объединяет 5 строк и не дает точки прерывания, в которой '|' строка может быть вставлена. При использовании распаковки аргументов каждая буква является ее собственным элементом, а в списках каждая строка является ее собственным элементом, между которыми можно вставить разделитель. Еще раз спасибо. –