[Tutor] problem loading and array from an external file
bob gailer
bgailer at gmail.com
Tue Aug 10 15:21:43 CEST 2010
On 8/9/2010 11:13 PM, Bill Allen wrote:
> Bob,
>
> Thanks for the feedback. I have been stepping through it in the IDLE
> debugger. However, it may be that I am letting the debugger get in my
> way as I am new to it also. You are right. I'll get out the old
> yellow legal pad and step through it by hand. In fact, I think I will
> process the loop entirely by hand, just the logic, and see how the
> variables look that way.
>
>
Glad I could help.
PLEASE remember to always reply-all so a copy goes to the list.
> Thanks,
> Bill
>
>
> On Mon, Aug 9, 2010 at 10:08 PM, bob gailer<bgailer at gmail.com> wrote:
>
>> On 8/9/2010 10:55 PM, Bill Allen wrote:
>>
>>> Hi, my name is Bill and I am completely stuck. I have a little bit of
>>> code I am working with for the sole purpose of coding in order to
>>> learn Python. In order to learn a programming language, I very often
>>> use a little text based map of rooms traversal game. So far, so good.
>>> However, this time I decided to learn some file operations so I am
>>> trying to read the data in from an external file rather than
>>> preloading an array inside the code itself. I am able to open the
>>> file and read from it. However, I am getting unexpected results when
>>> filling the array. Instead of each row in the array being loaded with
>>> the matching line in the data file, by the end of the loops all the
>>> rows in the array end up being filled with the last line of the data
>>> file. I have stepped and traced through it and cannot figure out
>>> where I am going wrong.
>>>
>> How did you step thru it? If you do it very precisely the problem will be
>> evident.
>> I'd prefer you discover it by careful step-thru rather than feeding you the
>> answer.
>>
>>
>>> This may not be a Python issue at all, but is
>>> likely me being way off in the weeds on my algorithm. This is only
>>> the portion of the code for loading the array from the file. I am
>>> writing this in Python 3. I believe my problem is somewhere in the
>>> read_maze_data_file() function.
>>>
>> That is accurate.
>>
>>
>>> There are lots of unnecessary extra
>>> print statements in this code because I was trying to carefully follow
>>> the state of the variables as the code ran. If anyone can point out
>>> where I am going wrong, I would really appreciate it.
>>>
>>>
>> As mentioned above you have a bug in your step-throuogh process. Write down
>> the variables that are affected by each statement and note their new values.
>>
>>> The code:
>>> # N S E W U D
>>> room0 = [0,0,0,0,0,0,0]
>>> room1 = [0,0,0,0,0,0,0] #Pad the first place so that rooms may
>>> room2 = [0,0,0,0,0,0,0] #be referenced naturally
>>> room3 = [0,0,0,0,0,0,0]
>>> room4 = [0,0,0,0,0,0,0] #First places will have special purposes
>>> room5 = [0,0,0,0,0,0,0]
>>> room6 = [0,0,0,0,0,0,0] #initialize the array with zeros
>>> room7 = [0,0,0,0,0,0,0]
>>>
>>> room = [room0,room1,room2,room3,room4,room5,room6,room7]
>>>
>>>
>>> def clearscreen(numlines=100):
>>> """Clear the console.
>>> numlines is an optional argument used only as a fall-back.
>>> """
>>> import os
>>> if os.name == "posix":
>>> # Unix/Linux/MacOS/BSD/etc
>>> os.system('clear')
>>> elif os.name in ("nt", "dos", "ce"):
>>> # DOS/Windows
>>> os.system('CLS')
>>> else:
>>> # Fallback for other operating systems.
>>> print('\n' * numlines)
>>> print(os.name)
>>>
>>> def print_map():
>>> print("+-------------+")
>>> print('|','MAP: ','N','S','E','W','U','D','|', sep="", end="")
>>> for x in range(1,8):
>>> print()
>>> print("|","room",x,"> ", sep="", end="")
>>> for y in range(1,7):
>>> print(room[x][y], end="")
>>> print("|", end="")
>>> print()
>>> print("+-------------+", end="")
>>>
>>>
>>> def read_maze_data_file():
>>>
>>> roomx = [0,0,0,0,0,0,0]
>>> n, m = 0, 0
>>>
>>> try:
>>> filename = 'mazegame.dat'
>>> textf = open(filename, 'r')
>>> except IOError:
>>> print ('Cannot open file %s for reading' % filename)
>>> import sys
>>> sys.exit(0)
>>>
>>> # reads one line at a time
>>>
>>> for line in textf:
>>> print("raw line in file: ",line, end="")
>>> tempwords = line.split(None)
>>> print ("line as read from file: ",tempwords)
>>>
>>> for n in range(0, len(room)-1):
>>> roomx[n] = tempwords[n]
>>> #print(roomx[n])
>>>
>>> print("roomx",roomx)
>>> room[m] = roomx
>>> print("room ",m,room[m])
>>> print("current state of room array")
>>> print("room 0",room[0])
>>> print("room 1",room[1])
>>> print("room 2",room[2])
>>> print("room 3",room[3])
>>> print("room 4",room[4])
>>> print("room 5",room[5])
>>> print("room 6",room[6])
>>> print("room 7",room[7])
>>>
>>> m += 1
>>>
>>> textf.close()
>>> return(room)
>>>
>>> #----END read_maze_data_file()
>>>
>>>
>>> #---------MAIN SECTION---------
>>>
>>> clearscreen()
>>>
>>>
>>> print("LOAD AN ARRARY FROM A FILE")
>>> print(" by Bill Allen")
>>> print()
>>> print("initial state of room array")
>>> print(room)
>>> print()
>>>
>>> print("data from file")
>>> room_final = read_maze_data_file()
>>> print("from MAIN")
>>> print(room_final)
>>> print()
>>>
>>> print("a PRINT_MAP call from MAIN")
>>> print_map()
>>> print()
>>> print()
>>>
>>>
>>> =======================
>>> partial sample output showing the current incorrect results:
>>> a PRINT_MAP call from MAIN
>>> +-------------+
>>> |MAP: NSEWUD|
>>> |room1> 000050|
>>> |room2> 000050|
>>> |room3> 000050|
>>> |room4> 000050|
>>> |room5> 000050|
>>> |room6> 000050|
>>> |room7> 000050|
>>> +-------------+
>>> =========================
>>> the contents of the data file, mazegame.dat
>>> 0 0 0 0 0 0 0
>>> 0 0 4 2 0 0 0
>>> 0 0 0 1 3 6 0
>>> 0 0 5 0 2 0 0
>>> 0 1 0 5 0 0 0
>>> 0 3 0 0 4 0 7
>>> 0 0 0 0 0 0 2
>>> 0 0 0 0 0 5 0
>>> _______________________________________________
>>> Tutor maillist - Tutor at python.org
>>> To unsubscribe or change subscription options:
>>> http://mail.python.org/mailman/listinfo/tutor
>>>
>>>
>>>
>>
>> --
>> Bob Gailer
>> 919-636-4239
>> Chapel Hill NC
>>
>>
>>
>
--
Bob Gailer
919-636-4239
Chapel Hill NC
More information about the Tutor
mailing list