Python Forum
String index out of range - help please - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: String index out of range - help please (/thread-25320.html)



String index out of range - help please - DudleyDiccle - Mar-26-2020

I'm new to programming btw.
I'm trying to write a program that will take a tuple of a list of toys, a tuple of the base prices for those toys, and calculate a 40% mark up and the final price (mark up + base) to get the retail price and then print the toys in one column, the base costs in one column, the mark up in one column, and the final price in one column. Here is what it should look like
[Image: 5pH2QMo.png]

Here is my program, which currently gets a string index out of range error and prints it incorrectly. Please help.

#Variable List
# toys - the tuple for the list of toys
# costs - the tuple for the costs of each toy
# mark - the 40 percent mark up
# retail - the base cost plus mark up
# count - the counter/sentry


print ("Welcome to the Mark Up program")
#step 1 - this will set up the toys tuple and the base cost of each 
toys = ("Teddy Bear","Toy Train","Hoola Hoop","Betsy Wetsy","Pogo stick")
costs = (12.50,58.75,10.00,15.00,11.00)

#step 2 -  set up the for loop to calculate mark up on each toy
print ("Item","\t\t","Cost","\t\t","Mark Up","\t\t","Retail")

#step 3 - this will print and format the output

for num in range(len(costs)):
    mark = num * .4
    retail = mark + num
    costs = str(costs)
    mark = str(mark)
    retail = str(retail)
    print (toys[num],"\t",costs[num],"\t",mark[num],"\t",retail[num])
    



RE: String index out of range - help please - deanhystad - Mar-26-2020

What does print(str(costs)) print? How about print(str(mark))? And finally what does print(str(retail)) print?

Are the printed values what you expected to see?


RE: String index out of range - help please - DudleyDiccle - Mar-26-2020

Sadly it doesn't.
When I put in
toys = ("Teddy Bear","Toy Train","Hoola Hoop","Betsy Wetsy","Pogo stick")
costs = (12.50,58.75,10.00,15.00,11.00)
print ("Item","\t\t","Cost","\t\t","Mark Up","\t\t","Retail")
for num in range(len(costs)):
    mark = num * .4
    retail = mark + num
    costs = str(costs)
    mark = str(mark)
    retail = str(retail)
    print(str(costs))
    print(str(mark))
    print(str(retail))
I got this:
Item Cost Mark Up Retail
(12.5, 58.75, 10.0, 15.0, 11.0)
0.0
0.0
(12.5, 58.75, 10.0, 15.0, 11.0)
0.4
1.4
(12.5, 58.75, 10.0, 15.0, 11.0)
0.8
2.8
(12.5, 58.75, 10.0, 15.0, 11.0)
1.2000000000000002
4.2
(12.5, 58.75, 10.0, 15.0, 11.0)
1.6
5.6


RE: String index out of range - help please - deanhystad - Mar-26-2020

Does that make sense to you? Shouldn't markup be computed from cost instead of how many times you have executed the loop? Shouldn't cost be the cost of one item instead of the cost of all the items?


RE: String index out of range - help please - DudleyDiccle - Mar-26-2020

I agree that markup should be computed from cost not from how many times you have executed the loop, but it needs to calculate the individual 40% mark up of each of the toys and then display them in columns. Btw it doesn't need the chart it just has to be organized columns like the picture


RE: String index out of range - help please - DudleyDiccle - Mar-26-2020

But still doesnt work sadly :(


RE: String index out of range - help please - SheeppOSU - Mar-26-2020

For the formatting, I first made a function to find which toys' name has the most letters and how many that is. Then I recorded the largest for each. Finally, I went through the cost for each and printed it out. This could definitely be done more smoothly with the help of dictionaries and possibly more functions, which I would suggest to work on. Anyway, here's the code.
def LargestCharacterCount(WordList):
    count = 0
    for word in WordList:
        if len(str(word)) > count:
            count = len(str(word))
    return count

toys = ("Teddy Bear","Toy Train","Hoola Hoop","Betsy Wetsy","Pogo stick")
costs = (12.50,58.75,10.00,15.00,11.00)
markup = ()
for cost in costs:
    markup += (cost*.4, )

LargestToyCharacterAmount = LargestCharacterCount(toys)
LargestCostCharacterAmount = LargestCharacterCount(costs)
LargestMarkupCharacterAmount = LargestCharacterCount(markup)

count = 0
print("Item", " "*(LargestToyCharacterAmount-4), "Cost", " "*(LargestCostCharacterAmount-4), "Markup", " "*(LargestMarkupCharacterAmount-6), "Retail")
for toy in toys:
    print(toy, " "*(LargestToyCharacterAmount-len(toy)), costs[count], " "*(LargestCostCharacterAmount-len(str(costs[count]))), markup[count], " "*(LargestMarkupCharacterAmount-len(str(markup[count]))), costs[count]+markup[count])
    count += 1



RE: String index out of range - help please - DudleyDiccle - Mar-27-2020

Thank you so much it worked!