Как показать, сколько объектов в списке, с вводом имени списка и объекта?

#python

Вопрос:

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

Вот мой код:

 list_1 = [1, 2, 4, 2, 5, 6, 7, 3, 5, 6, 3, 2, 1, 7, 8, 9, 3, 6, 5, 3, 4]

list_2 = [12, 14, 13 , 11, 16, 15, 17, 18, 18, 19, 17, 15, 19, 11, 12, 14, 13]

def count_objects(wlist):    
    read_o = int(input("input object: "))
    print(wlist.count(read_o))

getList = input("input list: ")
count_objects(getList)
 

Но там написано:

 Traceback (most recent call last):
 line 6, in <module>
    count(wlist)
  line 4, in count
    print(wlist.count(read_o))
TypeError: must be str, not int 
 

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

1. Каков был вклад?

2. getList = input("input list: ") возвращает str объект. Это не список. Основная проблема здесь заключается в том, что вы полагаетесь на имя переменной. Не делай этого. Переменные предназначены для людей, читающих исходный код, входы в вашу программу не должны требовать каких-либо знаний о каких-либо переменных. Создайте диктант, который сопоставляет некоторые строки со списками, и используйте str, возвращенный из input , для получения списка.

3. ввод был list_1

Ответ №1:

Как прокомментировал Хуанпа Арривиллага:

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

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

 lists = {
    # These keys can be whatever you want
    '1': [1, 2, 4, 2, 5, 6, 7, 3, 5, 6, 3, 2, 1, 7, 8, 9, 3, 6, 5, 3, 4],
    '2': [12, 14, 13 , 11, 16, 15, 17, 18, 18, 19, 17, 15, 19, 11, 12, 14, 13],
}

def count_objects(wlist):    
    read_o = int(input("input object: "))
    print(wlist.count(read_o))

getList = input(f"input list: (valid inputs are: {list(lists)})n")
count_objects(lists[getList])
 

Это очень минимальное редактирование вашего кода, которое можно было бы немного улучшить. Как только у вас все заработает, я бы рекомендовал отправиться в https://codereview.stackexchange.com чтобы получить обратную связь.

Если вы действительно хотите получить доступ к переменной в своем коде с помощью пользовательского ввода, вы можете использовать eval ее для этого, но я настоятельно рекомендую этого не делать. Немного лучший подход-посмотреть это в globals() locals() диктантах или, но даже тогда вы все равно будете злоупотреблять переменными.

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

1. я ценю это, спасибо