#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. я ценю это, спасибо