Я пишу программу, которая берет буквы и индексы и выплевывает кроссворды (а не кроссвордер, но инструмент, помогающий в решении кроссвордов, если это имеет смысл).Crossword Solving Companion
Я написал две версии алгоритма, но ни один из них не работает правильно. Первый из них я попытался было это:
fin = open('words.txt')
def answer_finder():
global fin
possible_answers = []
length = int(raw_input("How long is the word?"))
letter_1 = raw_input("What is the first letter that you know?").lower
letter_1_index = int(raw_input("How many letters into the word is that letter?")) - 1
letter_2 = raw_input("What is the second letter that you know?").lower
letter_2_index = int(raw_input("How many letters into the word is that letter?")) - 1
letter_3 = raw_input("What is the third letter that you know?").lower
letter_3_index = int(raw_input("How many letters into the word is that letter?")) - 1
for i in fin:
if len(i) == length:
if i[letter_1_index] == letter_1 and i[letter_2_index] == letter_2 and i[letter_3_index] == letter_3:
possible_answers.append(i)
return possible_answers
Я понимаю, что это своего рода некрасиво, но это было больше доказательство концепции алгоритма. Пользовательский ввод будет изменен позже. Во всяком случае, это, кажется, возвращает пустой список, независимо от того, что я пытаюсь.
Вторая версия была по существу такой же, но полагались на вложенной, если заявления вместо логических операторов:
def answer_finder():
global fin
possible_answers = []
length = int(raw_input("How long is the word?"))
letter_1 = raw_input("What is the first letter that you know?").lower
letter_1_index = int(raw_input("How many letters into the word is that letter?")) - 1
letter_2 = raw_input("What is the second letter that you know?").lower
letter_2_index = int(raw_input("How many letters into the word is that letter?")) - 1
letter_3 = raw_input("What is the third letter that you know?").lower
letter_3_index = int(raw_input("How many letters into the word is that letter?")) - 1
for i in fin:
if len(i) == length:
if i[letter_1_index] == letter_1:
if i[letter_2_index] == letter_2:
if i[letter_3_index] == letter_3:
possible_answers.append(i)
return possible_answers
Это тоже возвращает пустой список. Список слов, которые я использую, исходит от here. Я предполагаю, что мне не хватает чего-то очевидного, так как я новичок в работе с внешними файлами. Я хотел бы отметить, что эти функции являются прототипами первого, и оба работают нормально:
def greater_than_20():
global fin
li = []
for i in fin:
if len(i) > 20:
li.append(i)
return li
def first_letter_length_finder():
global fin
length = int(raw_input("How long is the word?"))
first_letter = raw_input("What is the first letter?")
li = []
for i in fin:
if len(i) == length and i[0] == first_letter:
li.append(i)
print li
return li
EDIT: (. В том числе закомментированных участков коды) Просто для справки, вот код в полном объеме
fin = open('words.txt')
print fin
def greater_than_20():
global fin
li = []
for i in fin:
if len(i) > 20:
li.append(i)
return li
def first_letter_length_finder():
global fin
length = int(raw_input("How long is the word?"))
first_letter = raw_input("What is the first letter?")
li = []
for i in fin:
if len(i) == length and i[0] == first_letter:
li.append(i)
print li
return li
def answer_finder():
global fin
possible_answers = []
length = int(raw_input("How long is the word?"))
letter_1 = raw_input("What is the first letter that you know?").lower
letter_1_index = int(raw_input("How many letters into the word is that letter?")) - 1
letter_2 = raw_input("What is the second letter that you know?").lower
letter_2_index = int(raw_input("How many letters into the word is that letter?")) - 1
letter_3 = raw_input("What is the third letter that you know?").lower
letter_3_index = int(raw_input("How many letters into the word is that letter?")) - 1
for i in fin:
if len(i) == length:
# if i[letter_1_index] == letter_1 and i[letter_2_index] == letter_2 and i[letter_3_index] == letter_3:
# possible_answers.append(i)
if i[letter_1_index] == letter_1:
if i[letter_2_index] == letter_2:
if i[letter_3_index] == letter_3:
possible_answers.append(i)
return possible_answers
Вы, кажется, не разбиваете файл слова (или даже читаете его) ... это сделано в коде, который вы не опубликовали? –
О, возможно. Все эти функции находятся в одном документе, и у меня вверху 'fin = open ('words.txt')'. Затем я вызываю «глобальный плавник» в каждую из функций. Я все еще супер новый с чтением файлов через Python, поэтому, если это не так, как это должно быть сделано, пожалуйста, дайте мне знать. Я добавил полный код программы для ссылки. – b4ux1t3