no_one
@no_one

Как использовать sep= в Pyton?

Привет. Задача: есть список ["Foo_1", "Foo_2", "Foo_3" ]
вывести в консоль элементы списка в виде Foo_1, Foo_2, Foo_3
обратите внимание на запятую после первого и второго элемента и её отсутствие после третьего.
пробовал так:
spisok = [1, 2, '3']
for x in spisok:
    print(x, sep=", ")  
output:
1
2
3

и так:
spisok = [1, 2, '3']
for x in spisok:
    print(x, end=" ", sep=", ")
output:
1 2 3

и другие варианты.
я так понял sep= работает только в таком виде
print('1', '2', '3', sep=", ")
output:
1, 2, 3

В гугле искал, не нашел (может плохо искал)
Подскажите как решить задачку, может есть другие варианты кроме sep=.
  • Вопрос задан
  • 25350 просмотров
Решения вопроса 1
aRegius
@aRegius
Python Enthusiast
print(*your_list, sep=', ')
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
nika_lime
@nika_lime
Все дело в том, что в команде print параметр sep по умолчанию равен пробелу sep = ' ', а параметр end по умолчанию равен переносу строки end = '\n'

В цикле вы вызываете команду print несколько раз, и каждый раз срабатывают оба параметра по умолчанию.
То есть вот этот код:

spisok = [1, 2, '3']
for x in spisok:
    print(x)


Равносилен вот этому:

spisok = [1, 2, '3']
for x in spisok:
    print(x, sep = ' ', end = '\n')


Если не указывается параметр команды print и значение этого параметра, то он назначается по умолчанию.

То, что вы пытаетесь заставить сделать параметр sep на самом деле управляется параметром end. Так как параметр sep работает когда в команде print несколько аргументов, а у нас всего один. Циклом повторяется не аргумент внутри print, а весь print целиком. То есть каждый print вам будет переносить строку. Поэтому и вылезает перенос строки в выводе вот тут, а sep не срабатывает:

print(x, sep=", ")  
output:
1
2
3


Вот тут значение параметра end перестало быть переносом строки, поэтому аргумент выведен в одну строку x раз, но так как аргумент всего один, sep не срабатывает, он просто не нужен, команде print нечего перечислять.

print(x, end=" ", sep=", ")
output:
1 2 3


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

print(x,  end=",  ")
output:
1, 2, 3,
Ответ написан
@iikoreva
Задача: написать функцию, которая вернет из списка объединенную версию слов, разделенных дефисами.

Первое решение (не моё - предложил Senior после ревью моего):
def words(*args):
    print(*args, sep='-')

words("i", "love", "python", "!")


Второе - моё, муторное и большое, зато своё :)))
def words(*words):
    expr = []
    print(len(words))
    rep = (len(words))
    for i in range(rep):
        if i < rep-1:
            expr.append(words[i])
            expr.append('-')
        else:
            expr.append(words[i])
    expression = "".join(expr)
    print(expression)
words("i", "love", "python", "!")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы