Я хочу создать компьютер для игры в слова Призрак .Тем не менее, у меня возникают проблемы с поиском хорошего способа доступа к огромному списку слов.Вот моя текущая реализация (которая не работает):
import os, random, sys, math, string
def main():
#Contains a huge wordlist-- opened up for reading
dictionary = open("wordlist.txt", "r")
wordlist = []
win= 0
turn= 0
firstrun = 0
word = ""
#while nobody has won the game
while win==0:
if turn == 0:
#get first letter from input
foo = raw_input("Choose a letter: ")[0]
word+=foo
print "**Current word**: "+ word
#Computer's turn
turn = 1
if turn == 1:
#During the first run the program gets all definitively
#winning words (words that have odd-number lengths)
#from the "dictionary" file and puts them in a list
if firstrun== 0:
for line in dictionary:
#if the line in the dictionary starts with the current
#word and has an odd-number of letters
if str(line).startswith(word) and len(line)%2 == 0:
wordlist.append(line[0: len(line)-1])
print "first run complete... size = "+str(len(wordlist))
firstrun = 1
else: #This is run after the second computer move
for line in wordlist:
#THIS DOES NOT WORK-- THIS IS THE PROBLEM.
#I want it to remove from the list every single
#word that does not conform to the current limitations
#of the "word" variable.
if not line.startswith(word):
wordlist.remove(line)
print "removal complete... size = "+str(len(wordlist))
turn = 0
if __name__ == "__main__":
main()
Я выделил проблемную область в коде.Я понятия не имею, почему это не работает.Что должно произойти: представьте, что список заполнен всеми словами, начинающимися с «а».Затем пользователь выбирает букву «б».Тогда целевое слово должно иметь начальные буквы «ab».Что должно произойти, так это то, что все слова «а», которые находятся в списке, за которыми непосредственно не следует буква «б», должны быть удалены.
Я также был бы признателен, если бы кто-нибудь дал мне знать более эффективный способ сделать это, чем составить огромный начальный список.