2016-11-11 3 views
0

Я пишу программу для чтения текстового файла почтовых индексов, который должен печатать местоположение почтового индекса при вводе правильного числа. Однако у меня возникла проблема с записью сообщения об ошибке. Я пробовал различные методы и не может получить сообщение об ошибке печати, вот что у меня есть:Файл поиска для ввода Python

try: 
    myFile=open("zipcodes.txt") #Tries to open file user entered 
except: 
    print "File can't be opened:", myFile #If input is invalid filename, print error 
    exit() 

zipcode = dict() #List to store individual sentences 
line = myFile.readline() #Read each line of entered file 

ask = raw_input("Enter a zip code: ") 

if ask not in line: 
    print "Not Found." 
else: 
    for line in myFile: 
     words = line.split() 
     if words[2] == ask: 
      zipcode = words[0:2] 
for value in zipcode: 
    print value, 

Некоторые примеры ZIP коды:

Abbeville   AL 36310 
Abernant   AL 35440 
Acmar    AL 35004 
Adamsville  AL 35005 
Addison   AL 35540 
Adger    AL 35006 
Akron    AL 35441 
Alabaster   AL 35007 
+0

Вы можете добавить часть "zipcodes.txt" на вопрос ?. Достаточно первых трех строк. – Arnial

+0

Есть несколько образцов, размещенных под кодом. – AndrewSwanson94

+0

Метод 'readline' читает только 1 строку. Мне нужно «прочитать». – Arnial

ответ

0

С самого начала:

try: 
    myFile=open("zipcodes.txt") 
except: 
    print "File can't be opened:", myFile # if open fail then myFile will be undefined. 
    exit() 

zipcode = dict() # you creating dict, but you never add something into it. 

line = myFile.readline() # this will read only first line of file, not each 

ask = raw_input("Enter a zip code: ") 

if ask not in line: 
    # it will print not found for any zipcode except zipcode in first line 
    print "Not Found." 
else: 
    # because you already read 1 line of myFile 
    # "for line in " will go from second line to end of file 

    for line in myFile: # 1 line already readed. Continue reading from second 
     words = line.split() 
     if words[2] == ask: # If you don't have duplicate of first line this will never be True 
      zipcode = words[0:2] 

# So here zipcode is an empty dict. Because even if "ask is in line" 
# You never find it because you don't check line 
# where the ask is (the first line of file). 
for value in zipcode: 
    # print never executed becouse zipcode is empty 
    print value, 
+0

Это объясняет, почему он ничего не печатает, когда ввод правильный. Я не уверен, почему он не печатает «Не найден» для любого ввода, кроме «36310». Я запускаю этот код с zipcode.txt, который вы ставите под сомнение, и он всегда печатает «Не найден» для других почтовых индексов. – Arnial

+0

Выяснилось самостоятельно, закрыто. – AndrewSwanson94

1

Я не уверен, о значении enterFile. Вы должны увидеть сообщение об ошибке, если вы удалите enterFile из исключения, потому что оно, как представляется, не определено.

+0

Это было что-то, что я забыл вынуть из старого кода, я исправлю его – AndrewSwanson94

+0

Проблема в том, когда я меняю, если не спрашивать не в строке: если спросить в строке: код работает, но я не получаю сообщение об ошибке. – AndrewSwanson94

0

Я считаю, что вам нужно в два этапа в этой программе:

  1. Читать zipcodes.txt и построить свой каталог.
  2. Запросить код для почтового индекса; напечатайте соответствующее местоположение.

Ваше текущее "положительное" логика является

Необходимое Логика (на мой взгляд)

# Part 1: read in the ZIP code file 
# For each line of the file: 
# Split the line into location and ZIP_code 
# zipcode[ZIP_code] = location 

# Part 2: match a location to the user's given ZIP code 
# Input the user's ZIP code, "ask" 
# print zipcode[ask] 

ли это pseduo-код заставить вас двигаться к решению?

+0

Не совсем. Основная проблема заключалась в том, что запрос if not in: statement работал неправильно, и я не знаю почему. – AndrewSwanson94