Начинающий Python вопрос: проблема с преобразованием объектов списка в целые числа - PullRequest
1 голос
/ 18 апреля 2020

Этот код вызывает

TypeError: 'list' object cannot be interpreted as an integer.

Он работал до добавления пользовательских входов. Код возвращает счетчик того, сколько раз число перекрывается с диапазоном пар входных чисел. Заранее спасибо!

user_input_1 = input("Enter the first pair here: ")
lst1 = [int(i) for i in user_input_1.split(" ") if i.isdigit()]

user_input_2 = input("Enter the second pair here: ")
lst2 = [int(i) for i in user_input_2.split(" ") if i.isdigit()]

user_input_3 = input("Enter the third pair here: ")
lst3 = [int(i) for i in user_input_3.split(" ") if i.isdigit()]

user_input_4 = input("Choose a center number: ")
number = int(user_input_4)


mainlist = [[lst2], [lst2], [lst3]]

def count_overlapping(mainlist, number): 
    count = 0
    for element in mainlist:
        if number in range(element[0], element[-1]) or number == element[0] or number == element[-1]:
            count += 1
    return count    

print(count_overlapping(mainlist, number))

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

У вас есть дополнительный уровень списков, который вам не нужен, поэтому, когда вы думаете, что получаете значение int, вы все равно получаете список.

Измените mainlist = [[lst2], [lst2], [lst3]] на mainlist = [lst2, lst2, lst3]

mainlst = [[lst1], [lst2], [lst3]]
[[[1, 2, 3, 4, 5, 6, 7, 8, 9]],
 [[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]],
 [[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]]]

mainlst = [lst1, lst2, lst3]                                                                                     
[[1, 2, 3, 4, 5, 6, 7, 8, 9],
 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
 [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]]

0 голосов
/ 19 апреля 2020

mainlist - это список списков списков, которые вы должны использовать:

mainlist = [lst2, lst2, lst3]

также вы можете улучшить свою функцию count_overlapping (при условии, что ваши входы имеют пары чисел / 2 числа ):

def count_overlapping(mainlist, number):
    return sum(1 for [a, b] in mainlist if number >= a and number <= b)
...