Проблема с разделением строки на python и последующим сравнением каждого отдельного раздела со списком значений - PullRequest
0 голосов
/ 03 марта 2020

У меня проблемы с лабораторией. Мне поручено принимать входные данные, разбивать эти входные данные на пробелы и проверять, находится ли он в отдельном списке. У меня есть функция, которая проверяет, есть ли значение в списке, но когда я проверяю фразу, которую я знаю, находится в списке, ничего не появляется. Я попытался увидеть, как разделение строк разделяет мою фразу «Остин классный», и когда я ввел city [0], он вернул просто «a». Я также создал функции, которые анализировали текстовый файл, и создал список, чтобы я мог сравнить, и еще одну, которая фактически проверяла, было ли слово в списке. Ниже моя окончательная программа + функции:

def load_city_corpus():
    city_list = []
    filename = "NYC2-cities.txt"
    with open(filename) as f:
        for line in f:
            city_list.append(line.strip())
    return city_list

\\\\\

def is_a_city(city,city_list):
    try:
        index = city_list.index(city)
        return True
    except AttributeError:
        return False

\\\\\

list_of_cities = load_city_corpus
while True:
   city_test = input("Enter some text (or ENTER to quit):")
   if city_test == "":
      break
   city_test.split(" ")
   print(city_test[0]) #prints "a"
   for item in city_test:
      if is_a_city(city_test,list_of_cities) == True:
          print(f"{city_test.title()} is a city")
   else:
      break

Ответы [ 3 ]

0 голосов
/ 03 марта 2020

При использовании city_test.split ("") вы можете разделить строку на основе пробелов. Но оригинальный city_test = ["Остин крутой"] остается прежним. Сохраните список в переменной после разделения.

list_name = city_test.split ("")

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

0 голосов
/ 03 марта 2020

В вашем коде есть несколько ошибок. Вот исправленная версия с некоторыми комментариями:

def load_city_corpus():
    city_list = []
    filename = "NYC2-cities.txt"
    # return ['austin', 'boston'] # my stub for testing...
    with open(filename) as f:
        for line in f:
            city_list.append(line.strip()) # could add lower() for safety...
    return city_list

def is_a_city(city, city_list):
    try:
        index = city_list.index(city) # could be city.lower() for safety
        return True
    except ValueError: # AttributeError:
        return False

list_of_cities = load_city_corpus() # Need the () to call the func
while True:
   city_test = input("Enter some text (or ENTER to quit): ")
   if city_test == "":
      break
   city_test = city_test.split() # (" ") not an error to use, but not nec.
   # ^^^^^^^^^^ have to assign the result of the split to preserve it...
   print(city_test[0]) #prints "a" -- not anymore! :)
   for item in city_test:
      if is_a_city(item, list_of_cities) == True: # item, not city_test
          print(f"{item.title()} is a city")          # item, not city_test
   # get rid of the below, because it will always break out of the loop after one pass.
   # else:
   #    break

Читая ваш пост снова, я замечаю, что вы используете «Остин круто», как если бы он был введен в качестве ввода. Итак, вы пытаетесь проверить, является ли первое слово ввода городом, или любое слово ввода города? Приведенный выше код обрабатывает последнее.

Кроме того, не стесняйтесь использовать дополнительную переменную для хранения результатов city_test.split(). Это может облегчить чтение, отслеживание и отладку кода. Вам просто нужно использовать эту новую переменную во всех нужных местах. Итак ...

city_splits = city_test.split()
print(city_splits[0]) #prints "a" -- not anymore! :)
for item in city_splits:
   if is_a_city(item, list_of_cities) == True: # item, not city_test
       print(f"{item.title()} is a city")          # item, not city_test
0 голосов
/ 03 марта 2020

Вы не назначаете результат своего разделения - это не происходит на месте. Когда вы проверяете city_test[0], вы просто проверяете 0-й элемент вашей строки - А.

Замените city_test.split(" ") на city_test = city_test.split(" "), чтобы функциональность соответствовала вашим ожиданиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...