Как отформатировать имя

#python

Вопрос:

Я беру урок по python, и меня просят о лабораторном задании…

Во многих документах используется определенный формат для имени человека. Напишите программу, ввод которой:

 firstName middleName lastName
 

и чей результат:

 lastName, firstInitial.middleInitial.
 

Пример: Если входные данные являются:

 Pat Silly Doe
 

на выходе получается:

 Doe, P.S.
 

Если входные данные имеют форму:

 firstName lastName
 

на выходе получается:

 lastName, firstInitial.
 

Пример: Если входные данные являются:

 Julia Clark
 

на выходе получается:

 Clark, J.
 

До сих пор я так и делал…

 firstName = input()
middleName = input()
lastName = input()
lastName2 = input()
firstName2 = input()

print(lastName  ',', (firstName[0]) '.' (middleName[0]) '.')
 

на тестовом экране написано, что он выводится как Doe, P.S. но когда я перехожу на экран отправки, он говорит, что вывода нет. Я буквально нахожусь здесь в тупике. Моя голова вот — вот взорвется. Я ничего из этого не понимаю. Они выбрасывают на меня слишком много информации за короткий промежуток времени. Любые ресурсы, которые кто-либо порекомендует, были бы великолепны.

Это сообщение об ошибке, которое я получаю

 0 / 3
Traceback (most recent call last):
  File "main.py", line 2, in <module>
    middleName = input()
EOFError: EOF when reading a line
Input
Pat Silly Doe
Your output
Your program produced no output
Expected output
Doe, P.S.
 

Комментарии:

1. Возможно, они ожидают, что вы напишете функцию, которая вернет требуемый вывод. Например ? def format_name(lastName, middleName, lastName): return lastName ',', (firstName[0]) '.' (middleName[0]) '.' Печать записывает данные на консоль, но ничего не возвращает.

2. Что есть lastName2 и firstName2 должно быть? Вашему коду, конечно, не дается пять входных данных, на самом деле может быть только один (который вам придется разделить на части).

3. Почему ты звонишь input 5 раз? Моя интерпретация задачи заключается в том, что «Имя, фамилия, среднее имя» должно быть указано в одном вводе.

4. Я не думаю, что задание ожидает, что вы попытаетесь прочитать пять строк ввода.

5. Конечно, цель этого задания состоит в том, чтобы увидеть, понимаете ли вы концепции, которым они уже обучали, такие как str.split() метод.

Ответ №1:

В вопросе говорится, что все входные данные находятся в одной строке. Каждый вызов input() считывает целую строку ввода. Таким образом, для вашего решения требуется предоставить 5 строк ввода-3 для человека с 3 именами и 2 для второго человека только с 2 именами.

Вам нужно просто позвонить input() один раз, чтобы узнать полное имя. Используйте split() , чтобы разбить его на список с разделителями пробелов. Затем вы можете создать соответствующий вывод в зависимости от длины списка.

 names = input().split()
if len(names) == 3:
    first_name, middle_name, last_name = names
    print(f'{last_name}, {first_name[0]}.{middle_name[0]}.')
elif len(names) == 2:
    first_name, last_name = names
    print(f'{last_name}, {first_name[0]}.')
else:
    print("Invalid input")
 

Комментарии:

1. Этот код выдает «Неверный ввод». Я пытаюсь изучить его, чтобы понять, что он делает. Правка: Я выяснил, что было не так. У меня была отдача от моего вклада.

2. Я протестировал его, и он работает. Что вы ввели в качестве входных данных?

3. Я попробовал оба ваших образца ввода, и они дали желаемый результат.

4. Вот более гибкий подход, просто чтобы показать мощь Python : *first_names, last_name = input().split() далее print(f'{last_name}, {".".join(first_name[0] for first_name in first_names)}.') . Это все.

Ответ №2:

Возможно, ваша проблема в том, что вы не написали ввод. Я запускаю его, и он работает просто отлично [![Это просто запуск вашего кода][1]][1]

Однако я вижу проблему, и она заключается в том, что вы дважды спрашиваете имя и фамилию, а на самом деле не используете их. Пожалуйста, дайте мне знать, если я вам помог [1]: https://i.stack.imgur.com/b2jiq.png

Комментарии:

1. Не публикуйте изображения, вставьте расшифровку в блок кода.

2. ДА. Когда вы запускаете то, что я написал, он возвращает то, что они просят на экране разработки. Проблема в том, что на экране отправки написано «ваша программа не произвела вывода», поэтому я не думаю, что это то, о чем они просят. 0/3 Трассировка (последний последний вызов): Файл «main.py», строка 2, в <модуле> MiddleName = input() Ошибка EOF: Ошибка EOF при чтении строки ввода Pat Глупая Лань Ваш вывод Ваша программа не выдала ожидаемого вывода Лань, P.S.

3. Аааа, хорошо, тогда вы получаете строку, затем разделяете ее с помощью метода split() и сохраняете ее в списке, затем в вашем списке есть [«Пэт», «Глупый», «Доу»], чтобы вы могли сделать то, что вы пытались в первую очередь. Что-то вроде: полное имя=ввод() имя=список(полное имя.разделение()) печать (…)