Невозможно ввести пользовательский ввод в виде списка в Python

Я ожидал, что код запросит у меня ввод столько раз, сколько я захочу, а затем распечатает количество раз, когда ввод был введен вместе с именем, написанным с заглавной буквы. Однако он распечатывает только последний ввод с 1 перед входом.

Можете ли вы сказать, где я ошибаюсь


while True:
    try: 
        lst = [
          input('Enter name here: ')
        ]
    except (KeyboardInterrupt): 
        for n in lst:
         print(lst.count(n), n.upper())

Вы назначаете lst список, состоящий из одного элемента, который является результатом ввода пользователя. И вы делаете это снова и снова (назначая один элемент пользовательского ввода).

Michael Butscher 11.07.2024 14:37

Вы назначаете lst вместо добавления

Sharim09 11.07.2024 14:37

Следуя комментарию @MichaelButscher, вам также необходимо увеличивать n на 1 после каждого ввода.

NebularNerd 11.07.2024 14:40
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно добавить имя, взятое из ввода, к lst, но вместо этого вы присваиваете lst списку только самых новых имен, введенных пользователем.

Используйте lst.append(input(...))

Кроме того, у вас есть еще одна проблема в вашем коде: ваш код никогда не завершится, пока вы не закроете терминал. Это связано с тем, что вы обрабатываете ошибку KeyboardInterruput, но на самом деле вы не останавливаете цикл while, поэтому он никогда не закончится. для этого вам нужно добавить перерыв после списка.

Я не использую какие-либо другие структуры данных (например, словарь) для печати счетчика, я просто использую ваш код с исправлением.

lst = []
while True:
    try:
        lst.append(input('Enter name here: '))
    except KeyboardInterrupt:
        print()
        for n in set(lst): # use set so that it will not print data for duplicate names
            print(lst.count(n), n.upper())
        exit() 

Выход

Enter name here: asd
Enter name here: asd
Enter name here: asd
Enter name here: a
Enter name here: d
Enter name here: qw
Enter name here: a
Enter name here: sd
Enter name here: asd
Enter name here: 
1 D
1 QW
1 SD
4 ASD
2 A

Другой способ: если вы хотите, чтобы цикл выполнялся только n раз, вы тоже это делаете.


n = 10
lst = []
for i in range(n):
    lst.append(input('Enter name here: '))
    
print() # just for one line space
for n in set(lst): 
    print(lst.count(n), n.upper())


Оу чувак, спасибо тебе огромное. Я вижу, где я ошибся

Manansh Arora 11.07.2024 16:02

В вашем коде есть некоторые проблемы, например:

  1. Каждый раз, когда вы инициализируете свой список, он печатает только последний результат.
  2. Обработка прерываний клавиатуры: блок исключений будет выполнен только тогда, когда Вызывается исключение KeyboardInterrupt, список будет содержать только последний ввод, поскольку список повторно инициализируется на каждой итерации цикла.
  3. Эта строка (lst.count(n), n.upper()) некорректно обрабатывает и отображает количество имен.

Вам следует использовать следующий код:

l = []

try:
    while True:
        name = input('Enter name here: ')
        l.append(name)
except KeyboardInterrupt:
    for name in set(l):
        print(l.count(name), name.capitalize())

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