Hi Terry (if that's your name),
Start slow - don't think ahead too much. It is a good thing that you know the end product, but sometimes when building a real-life system, you might want to work with one aspect of the program at a time (input, calculations, print, etc.) to make sure it works as advertised before moving onto other things. Also, I put print statements that prints "before and after" picture of a variable to make sure that I and the computer are in agreement as to what is what.

Good luck.
Cheers,
Joseph (UC Riverside)
----- Original Message -----
From: Terry--gmail <terry.kemme...@gmail.com
To: Python_Tutor -- Mailing List <tutor@python.org
Date sent: Fri, 15 Aug 2014 13:21:17 -0600
Subject: [Tutor] Building Starships -- object of type 'int' has no len()

Thanks for your response JL.

I added the following Exception to the code snippet:

for line_number in range(len(catalog2)):

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

try:

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

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

except TypeError:

print(catalog2)

print("col #: ", col)

print("line_number", line_number)

print("catalog2 col content: ", catalog2[line_number][col])

print("catalog2 col content TYPE: ", type(catalog2[line_number][col]))

exit()


Below is the exception printout. I ordered the catalog2 printout portion
to be more readable:

[['Drives', 'Type', 'Price', 'Max Speed', 'Energy Drain', 'Rq-Crew', '',
'', ''],
 ['Drives', 'Solar Sail', 3, 1, 'None', 2, '', '', ''],
<<------------------------here's the problem
 ['Drives', 'Bussard Ramjet', '10', '7', '2', '3', '', '', ''],
 ['Drives', 'Fusion', '70', '15', '5', '8', '', '', ''],
['Drives', 'Matter-Antimatter', '1500', '145', '15', '13', '', '', ''], ['Drives', 'Warp Drive', '2500', '250', '45', '17', '', '', '']]
col #:  2
line_number 1
catalog2 col content:  3
catalog2 col content TYPE:  <class 'int'

Hmmm. It appears that when I bought a Solar Sail the first time through, my code has altered my master Catalog away from holding strings to holding integers for that particular row-record, which is why when I return to a particular category to make a second purchase, the code errors out when it hits the integers that are suppose to be strings.

You know, for some reason, it just never sank into my thick skull that the integer 3 doesn't have a length. I just proved that to myself on the python commandline. It's just that my eyes see the number 3 displayed on the screen and my blond brain automatically counts it as occupying 1 space in the printout and thinks it's length is 1....which is why the texts say to use str() on integers and floats in mixed printouts, I guess.

Thanks! I guess the above code is actually fine.

Now, I just need to discover how and where I am somehow altering the master catalog where everything is suppose to be contained in strings. The problem with that is, I don't think there is any code to mess with the master catalog. I create catalog2 from scans of catalog each time another category is picked. And I store the chosen parts, after a quantity has been selected, in a list called myship. So, the problem must be where I do the quanity calculation, as that is done in integer form before the new row is added to myship. So, I will start there as I suspect I didn't switch it back to strings when I altered the catalog2
row, just before I appended it to myship.

Thanks for putting me back on track!

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

Reply via email to