Почему sep='.' не работает в этом коде?

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

Я искал в Интернете и не могу найти ответ, касающийся того, что я пытаюсь сделать.

fullName = input('Please enter your full name: ')

name = []

for i in fullName:
    if i.isupper():
        name.append(i)

for i in name:
    print(i, sep='.', end='')

Я хочу, чтобы распечатка была A.B.C. Я сейчас получаюABC.

Что я делаю не так или не вижу?

5 ответов

Решение

В этом коде

for i in name: 
    print(i ,sep='.',end='')

print получает каждый отдельный элемент i в nameв каждой итерации цикла, так что это по одному объекту за раз. Вам нужно передать объекты для печати func. Вы можете сделать что-то подобное, распаковав свойname список и передача его на печать

print(*name ,sep='.',end='')

Сведем код к минимальному примеру. Шаги ввода и предварительной обработки не имеют значения:

name = list('ABC')
for i in name:
    print(i, sep='.', end='')

Это эквивалентно вызову

print ('A', sep='.', end='')
print ('B', sep='.', end='')
print ('C', sep='.', end='')

Надеюсь, вы видите, что каждый оператор печати печатает только одно, а это означает, что sepникогда не вступает в игру. Вы хотели бы разделить элементы вашего списка (или строки) на отдельные аргументы для одного вызоваprint.

Самый простой способ - использовать звездное расширение:

print(*name, sep='.')

В качестве альтернативы вы можете выполнить форматирование самостоятельно:

print('.'.join(name))

Заменить print(i, sep='.', end='') с print(i, sep='', end='.')

Или вы можете распечатать отформатированную строку, например

name = '.'.join(name)
print(name)

Вам нужен другой подход, потому что люди часто не пишут свои имена с большой буквы:

fullName = input('Please enter your full name: ')

# convert first characters of every word to upper case
initials = [i[0].upper() for i in fullName.split()]

# print them out, joining by a dot '.'
print( '.'.join(initials) )

В print() sep= указывает, как разделять ввод объектов на оператор печати, а не символы в строке.

In[1]: print('A', 'B', sep='.')

печатает:

A.B

но это:

In[2]: print('AB', sep='.')

печатает:

AB

потому что "AB" - это один строковый объект и нечего разделять, а "A", "B" - это два строковых объекта. Для справки: print()

Другие вопросы по тегам