#python
#python
Вопрос:
У меня есть заданный пользователем интервал лет (например, 1998-2017), и я должен напечатать конкретное значение из списка ‘mlist’, который содержит любой из лет в данном интервале. И выведите название книги по индексу в ‘plist’. Проблема в том, что он не может найти этот конкретный год в списке, но он обязательно есть
Уже пытался сделать это, создав цикл for с диапазоном (startingIn, endingIn), но не помогло
interval = input("Enter the range: ") #User selects specific interval
startingIn = int(interval.split('-')[0])
endingIn = int(interval.split('-')[1])
for x in range (int(startingIn), int(endingIn)):
if x in mlist:
value = mlist.index(x) #mlist is the list which has years of the books
print (value, x) #plist is the list of books' names
else:
continue
plist = [«book1», «book2», «book3»]
mlist = [«1935», «1990», «1980»]
Он должен напечатать год и книгу, которые входят в заданный пользователем интервал
Комментарии:
1. Было бы полезно просмотреть mlist и plist. Не могли бы вы обновить свой вопрос фиктивными значениями для этих переменных?
2. Если пользователь вводит, скажем, «2000-2001», код выполняет поиск
plist[2000]
.plist
Действительно ли есть тысячи записей?3. Если
plist
это список названий книг, тоplist[x]
собирается вернуть the x’th, где x в тысячах. Я сомневаюсь, что вашplist
содержит так много записей.4. @JohnGordon он проверяет между этим диапазоном, поэтому между 2000 и 2001
5. Ваш
mlist
содержит годы в строке. Переменная x в вашем коде является int. Вероятно, это причина, по которойmlist.index(x)
ничего не возвращает. Попробуйтеif str(x) in mlist:
или измените значения вmlist
на целые числа.
Ответ №1:
Ваша проблема в том, что mlist
это список строк. Но x
это целые числа, а 1935
нет "1935"
, поэтому вы никогда не получите совпадение с mlist.index(x)
. Попробуйте преобразовать mlist
в список целых чисел.
plist = ["book1", "book2", "book3"]
mlist = ["1935", "1990", "1980"]
interval = input("Enter the range: ") #User selects specific interval
startingIn = int(interval.split('-')[0])
endingIn = int(interval.split('-')[1])
nummlist = list(map(int, mlist))
for x in range (startingIn, endingIn 1): #no need to repeat int() here, and note 1 otherwise endingIn would not be included
if x in nummlist:
value = nummlist.index(x)
print (plist[value], x)
У меня это работает. Он печатает:
книга 1 1935
книга 3 1980
книга 2 1990
Ответ №2:
mlist.index(x)
возвращает индекс элемента, поэтому вы, вероятно, захотите получить элемент с помощью
index = mlist.index(x)
itemYouWant = plist[index]
кстати:
Возможно, вам не понадобится оператор continue — в этом случае он ничего не делает.
Ответ №3:
Вы не указываете структуру списков mlist
и plist
, но я подозреваю, что вам следует print(plist[value], x)
вместо print(plist[x], x)
:
interval = input("Enter the range: ") # example "1990-2019"
bounds = interval.split("-")
for x in range(bounds[0], bounds[1]):
if x in mlist:
value = mlist.index(x) #mlist is the list which has years of the books
print (plist[value], x) #plist is the list of books' names