Почему 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()