Я пытаюсь найти конкретное значение в многомерном списке. Но когда я пытаюсь найти это конкретное значение, моя функция ничего не возвращает - PullRequest
0 голосов
/ 28 октября 2019

Таким образом, я пытаюсь выполнить поиск по рейтингу фильма, указанному пользователями, в моем списке, но каждый раз, когда я указываю рейтинг для поиска, моя функция ничего не возвращает.

Например: когда мне предлагается ввести рейтингнайти. Я наберу "PG", и он ничего не вернет. Хотя я знаю, что есть фильмы с рейтингом PG.

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

Ниже мой код. Любая помощь приветствуется. Спасибо!

def getInput():
  try:
    inFile = open("movies.txt", 'r')
  except IOError:
    print("File cannot be found. Check Spelling.")
  else:
    return inFile.readlines()

def menu():
  L = getInput()
  for i in range(0, len(L)):
    L[i] = L[i].split('\n')
  while(True):
    print("\nWelcome to the movie finder!")
    print("\t1. Print the Movies alphabetically by name.")
    print("\t2. Print movies with a rating matching yours.")
    print("\t3. Print the movies by run time.")
    print("\t4. Find all movies with a run time less than your desired time.")
    print("\t5. Find all movies with a run time greater than your desired time.")
    print("Type -1 to quit.")
    opt = input("Input a number to start desired search: ")

    if (int(opt) == 1):
      alpha(L)
    elif (int(opt) == 2):
      rating(L)
    elif (int(opt) == 3):
      runTime(L)
    elif (int(opt) == 4):
      lessThan(L)
    elif (int(opt) == 5):
      greaterThan(L)
    elif (int(opt) == -1):
      break;
    else:
      print("Invalid Input")

def alpha(L):
  L.sort()
  print("\n",L)

def rating(L):
  userRate = str(input("Enter a rating to search for: "))
  for i in range(0, len(L)):
    for j in range(len(L[i])):
      if userRate == L[i][2]:
        print(L[i][0])

menu()

Вот как выглядит L (мой многомерный список)

[['"Detective Pikachu",104,PG', ''], ['"The Secret Life of Pets 2",86,PG', ''], ['"Deadpool 2",119,R', ''], ['"Godzilla: King of the Monsters",132,PG-13', ''], ['"A
vengers: Endgame",181,PG-13', ''], ['"The Lion King(1994)",88,G']]

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Линия L[i] = L[i].split('\n') не делает то, что я думаю, что вы хотите. Ваши строки данных разделены запятыми, но в конце вы разделяетесь на новую строку. Возможно, вы захотите:

L[i] = L[i].strip('\n').split(',')

Но вместо того, чтобы анализировать файл CSV самостоятельно, вы можете рассмотреть возможность использования модуля csv из стандартной библиотеки , который будет обрабатывать большую частьдетали для вас.

0 голосов
/ 28 октября 2019

В вашем коде нет ничего особенно плохого.
Однако ваш L формат неверен.

['"Detective Pikachu",104,PG', '']

содержит только 2 элемента.
Элемент 0"Detective Pikachu",104,PG
Элемент 1 равен .

Вы должны либо исправить способ, которым ваш getInput() анализирует movies.txt, либо изменить свои функции для чтения L.

Кроме того, вы должны close() файл после использования.

...