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@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor



--
Bob Gailer
919-636-4239
Chapel Hill NC

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to