Python 3.3

This has something to do with the nature of FOR statements and IF statements, and I am sure it must be a simple mistake...but I seem to be stumped.

I am writing a starship encounter program as my first real python program....where the user gets a random amount of credits to design his own ship and the computer also gets a random number of credits to spend and designs it's own ship, and then they go into combat against each other.

This is part of the design phase for the user. The user has picked one category of the catalog, such as:

Hulls, Drives, Shields, Weapons, Personnel, etc

catalog and catalog2 are lists of lists:  [[],[],[]]

OK. So, my program has scanned the master catalog for a particular chosen category and has built catalog2 containing all the parts of that one category and their associated differences (rows), and now I want to print it out as a menu for the user to pick what part to add of this particular category to his ship.

But first, so that I can pretty print the menu items and their associated capabilities to the screen in nice uniform columns, I need to know the maximum size of what is going to be printed in each column on the screen in advance, so I do the below learning scan through catagory2 and I build the simple list 'lens' to contain the max size of each column.

As I run the program, this works perfectly for every NEW category the user picks, and the rows of associated data are printed just like I want.......*UNTIL the user chooses to buy a second part from a category he has already visited*, and at that point things error out. Below is the problem code and the error:


lens = []

# pre-format the list called lens for maximum number of columns contained in catalog2

lens = [0] * len(catalog2[0])

# map the largest sizes of each column into list 'lens'

col, line_number = 0, 0

for line_number in range(len(catalog2)):

for col in range(len(catalog2[line_number])):

*if lens[col] < len(catalog2[line_number][col]):*

lens[col] = len(catalog2[line_number][col])


Traceback (most recent call last):
  File "encounter.py", line 379, in <module>
    myship = designShip(credits, myship)
  File "encounter.py", line 354, in designShip
hull, myship, credits, section = nicePrint(hull, credits, myship, catalog, section)
  File "encounter.py", line 199, in nicePrint
if lens[col] < len(catalog2[line_number][col]):
TypeError: *object of type 'int' has no len()*

I don't get it. This code does the same job, again and again successfully as I proceed to pick new categories. Why would it care if I want to go over the same ground more than once??? It seems to me that the FOR STATEMENT automatically zeros the counters 'col' and line_number' when it starts counting, but why would it suddenly choke because of going over old territory???

In trying to debug i have checked catalog2 and it's data is present and intact. I added the line 'col, line_number = 0, 0' in the sequence of events although I don't see why it would be needed, and evidently it isn't needed because the problem persists. What's left to check?

I really want to buy more guns and bombs and armor! But the program seems to be on the side of gun control!!!
:)
Thanks for your thoughts and suggestions!


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

Reply via email to