List problem

Terry Reedy tejarex at yahoo.com
Fri Mar 29 18:37:01 EST 2002


"Jon Cosby" <jcosby at mindspring.com> wrote in message
news:a82mlc$ja1$1 at slb6.atl.mindspring.net...
> Can anyone se why this is coming up empty in the "cols" list? I've
tried
> something similar in the interpreter, and everything here looks
right.

What happens if you paste exactly this text into the interpreter (on
PC, turn off fast pasting)?  (Answer: syntax errors, see below.)

######################################################################
##
> # WordSquare
> # Build word squares from initial word

> # Word dictionary
> dict = "c:\data\dict.txt"

As I said elsewhere, use forward slashes / to be safe, concise, and
more portable.

> firstword = input("Enter first word (enclosed in quotes): ")

firstword = raw_input("Enter first word (do not enclose in quotes): ")
is safer and easier for user.

> lword = len(firstword)
> words = []
> cols = []
> rows = []
>
> f = open(dict, "r")
> for line in f.readlines():
>  if len(line[:-1]) == lword:
>   words.append(line[:-1])
#  add 'word = line[:-1]' before if and sub in nect too two lines
slightly faster

> f.close()
Need blank line to run interactively

If words were sorted by len, you could read in only those of proper
length

> for i in range(lword):
>  cols.append([])
>  rows.append([])

> rows[0].append(firstword)
>
> # Generate an array of words with matching first letters
> for i in range(lword):
>  for word in words:
>    if word[0] == firstword[i]: # Matches not found
>    cols[i].append(word)

As written, without indent of 'cols...' after 'if', this has a syntax
error.
This suggests that this is not exactly the file that produced the
output below.

If words of given length were sorted, you could grab just those
needed.

> print len(words)
> print cols
>
>
######################################################################
>
> C:\Python21>python projects\wordsquare.py
> Enter first word (enclosed in quotes): "hello"
> 4220
> [[], [], [], [], []]

Try print words[0:10] to see what actually iterating through.

# I pasted following into interpreter and got output marked by #

firstword = "cow" # cow, ore, wee/wet make square
lword = len(firstword)
words = ['act', 'art', 'boo', 'cat', 'cad', 'coo', 'cow', 'oft',
'opt',
'ore', 'wee', 'wet']
cols = []
rows = []

# delete readin from file stuff

for i in range(lword):
 cols.append([])
 rows.append([])

rows[0].append(firstword)

# Generate an array of words with matching first letters
for i in range(lword):
 for word in words:
   if word[0] == firstword[i]: # Matches not found
     cols[i].append(word)

print len(words)
#12
print cols
#[['cat', 'cad', 'coo', 'cow'], ['oft', 'opt', 'ore'], ['wee', 'wet']]

so this much of program works.

Terry J. Reedy








More information about the Python-list mailing list