[Tutor] problem loading and array from an external file
bob gailer
bgailer at gmail.com
Tue Aug 10 05:08:36 CEST 2010
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
More information about the Tutor
mailing list