Python 3 _ Thread-shed

Hi I have a question regarding below course

[https://www.codecademy.com/courses/learn-python-3/projects/thread-shed]

So, at task 8, I realized that I was not getting the expected result (list in list) because I defined a new list outside of the loop.
I quite don’t understand why is that…
What makes it different?

//WRONG//
transactions_clean =
transaction = []
for i in daily_transactions_split:
for k in i:
transaction.append(k.strip())
transactions_clean.append(transaction)

//CORRECT//
transactions_clean =
for i in daily_transactions_split:
transaction = []
for k in i:
transaction.append(k.strip())
transactions_clean.append(transaction)

5 Likes

In the second example we are re-using the list, starting from empty on each iteration.

2 Likes

Hi I wrote the following code for “Thread Shed” but the counting that I receiving is not even close to the counts in the example (and in the video) I don’t understand what’s wrong in my counter function
this is the code:
daily_sales_replaced = daily_sales.replace(’;,;’,’;’)
daily_transaction = daily_sales_replaced.split(’,’)
#print (daily_transaction)
daily_transactions_split =
for tran in daily_transaction:
daily_transactions_split.append(tran.split(’;’))
#print(daily_transactions_split)

transactions_clean =
for trans in daily_transactions_split:
transaction_clean =
for data in trans:
transaction_clean.append(data.replace("\n"," “).strip(” "))
transactions_clean.append(transaction_clean)

customers =
sales =
thread_sold =

for transa in transactions_clean:
customers.append(transa[0])
sales.append(transa[1])
thread_sold.append(transa[2])

total_sales = 0
for price in sales:
total_sales+=float(price.strip(’$’))

#print (total_sales)
#print (thread_sold)

thread_sold_split =
for sale in thread_sold:
for color in sale.split(’&’):
thread_sold_split.append(color)

print (thread_sold_split)

def color_count(color):
total_colors = 0
for tred_color in thread_sold_split:
if tred_color == color:
total_colors += 1
return total_colors

#print(color_count(‘white’))

colors = [‘red’,‘yellow’,‘green’,‘white’,‘black’,‘blue’,‘purple’]

for color in colors:
print (“Thread Shed sold {} threads of {} threads today.”.format(color_count(color),color))

and these are the results:
Thread Shed sold 96 threads of red threads today.
Thread Shed sold 136 threads of yellow threads today.
Thread Shed sold 120 threads of green threads today.
Thread Shed sold 112 threads of white threads today.
Thread Shed sold 104 threads of black threads today.
Thread Shed sold 88 threads of blue threads today.
Thread Shed sold 68 threads of purple threads today.

If we look closely the above output amounts are 4 times those expected. That should point to the issue.

2 Likes

transactions_clean =
for trans in daily_transactions_split:
transaction_clean =
for data in trans:
transaction_clean.append(data.replace("\n"," “).strip(” "))
transactions_clean.append(transaction_clean)

Thanks a lot!!!

1 Like

Python is very dependent upon block syntax demarcated with indentation. In this exercise we learn to back out of a lower scope block, back into the parent scope block. This would be akin to a times table, row on row.

Multiples in the outputs that equate for all arguments points to nested loops.


On the above code, consider,

We have color information in the thread_sold_split list. Rather than arbitrarily declare the list, it is possible to create an index of unique colors using the set() constructor.

colors = set(thread_sold_split)

We can do this only if it’s certain the list we’re working with is comprised of color names. This is a point to look backwards through code to make sure it is always going to happen.

Now that we have a colors object we can iterate it, with no nesting.

def sales_report(x):
    for c in colors:  # the global is immutable in this setting
        print ('Color: {}\nCount: {}'.format(c, x.count(c)))
    return 1
>>> sales_report(thread_sold_split)
Color: blue
Count: 22
Color: green
Count: 30
Color: yellow
Count: 34
Color: purple
Count: 17
Color: white
Count: 28
Color: red
Count: 24
Color: black
Count: 26
1
>>> 
1 Like

We’re free to create our own count() function if the exercise expects. It’s moot if we know how to do that already; the built-in is something that we understand.

1 Like

daily_sales = \

“”"Edith Mcbride ;,;$1.21 ;,; white ;,;

09/15/17 ,Herbert Tran ;,; $7.29;,;

white&blue;,; 09/15/17 ,Paul Clarke ;,;$12.52

;,; white&blue ;,; 09/15/17 ,Lucille Caldwell

;,; $5.13 ;,; white ;,; 09/15/17,

Eduardo George ;,;$20.39;,; white&yellow

;,;09/15/17 , Danny Mclaughlin;,;$30.82;,;

purple ;,;09/15/17 ,Stacy Vargas;,; $1.85 ;,;

purple&yellow ;,;09/15/17, Shaun Brock;,;

$17.98;,;purple&yellow ;,; 09/15/17 ,

Erick Harper ;,;$17.41;,; blue ;,; 09/15/17,

Michelle Howell ;,;$28.59;,; blue;,; 09/15/17 ,

Carroll Boyd;,; $14.51;,; purple&blue ;,;

09/15/17 , Teresa Carter ;,; $19.64 ;,;

white;,;09/15/17 , Jacob Kennedy ;,; $11.40

;,; white&red ;,; 09/15/17, Craig Chambers;,;

$8.79 ;,; white&blue&red ;,;09/15/17 , Peggy Bell;,; $8.65 ;,;blue ;,; 09/15/17, Kenneth Cunningham ;,; $10.53;,; green&blue ;,;

09/15/17 , Marvin Morgan;,; $16.49;,;

green&blue&red ;,; 09/15/17 ,Marjorie Russell

;,; $6.55 ;,; green&blue&red;,; 09/15/17 ,

Israel Cummings;,; $11.86 ;,;black;,;

09/15/17, June Doyle ;,; $22.29 ;,;

black&yellow ;,;09/15/17 , Jaime Buchanan ;,;

$8.35;,; white&black&yellow ;,; 09/15/17,

Rhonda Farmer;,;$2.91 ;,; white&black&yellow

;,;09/15/17, Darren Mckenzie ;,;$22.94;,;green

;,;09/15/17,Rufus Malone;,;$4.70 ;,; green&yellow

;,; 09/15/17 ,Hubert Miles;,; $3.59

;,;green&yellow&blue;,; 09/15/17 , Joseph Bridges ;,;$5.66 ;,; green&yellow&purple&blue

;,; 09/15/17 , Sergio Murphy ;,;$17.51 ;,;

black ;,; 09/15/17 , Audrey Ferguson ;,;

$5.54;,;black&blue ;,;09/15/17 ,Edna Williams ;,;

$17.13;,; black&blue;,; 09/15/17, Randy Fleming;,; $21.13 ;,;black ;,;09/15/17 ,Elisa Hart;,; $0.35 ;,; black&purple;,; 09/15/17 ,

Ernesto Hunt ;,; $13.91 ;,; black&purple ;,;

09/15/17, Shannon Chavez ;,;$19.26 ;,;

yellow;,; 09/15/17 , Sammy Cain;,; $5.45;,;

yellow&red ;,;09/15/17 , Steven Reeves ;,;$5.50

;,; yellow;,; 09/15/17, Ruben Jones ;,;

$14.56 ;,; yellow&blue;,;09/15/17 , Essie Hansen;,; $7.33 ;,; yellow&blue&red

;,; 09/15/17 , Rene Hardy ;,; $20.22 ;,;

black ;,; 09/15/17 , Lucy Snyder ;,; $8.67

;,;black&red ;,; 09/15/17 ,Dallas Obrien ;,;

$8.31;,; black&red ;,; 09/15/17, Stacey Payne

;,; $15.70 ;,; white&black&red ;,;09/15/17

, Tanya Cox ;,; $6.74 ;,;yellow ;,;

09/15/17 , Melody Moran ;,; $30.84

;,;yellow&black;,; 09/15/17 , Louise Becker ;,;

$12.31 ;,; green&yellow&black;,; 09/15/17 ,

Ryan Webster;,;$2.94 ;,; yellow ;,; 09/15/17

,Justin Blake ;,; $22.46 ;,;white&yellow ;,;

09/15/17, Beverly Baldwin ;,; $6.60;,;

white&yellow&black ;,;09/15/17 , Dale Brady

;,; $6.27 ;,; yellow ;,;09/15/17 ,Guadalupe Potter ;,;$21.12 ;,; yellow;,; 09/15/17 ,

Desiree Butler ;,;$2.10 ;,;white;,; 09/15/17

,Sonja Barnett ;,; $14.22 ;,;white&black;,;

09/15/17, Angelica Garza;,;$11.60;,;white&black

;,; 09/15/17 , Jamie Welch ;,; $25.27 ;,;

white&black&red ;,;09/15/17 , Rex Hudson

;,;$8.26;,; purple;,; 09/15/17 , Nadine Gibbs

;,; $30.80 ;,; purple&yellow ;,; 09/15/17 ,

Hannah Pratt;,; $22.61 ;,; purple&yellow

;,;09/15/17,Gayle Richards;,;$22.19 ;,;

green&purple&yellow ;,;09/15/17 ,Stanley Holland

;,; $7.47 ;,; red ;,; 09/15/17 , Anna Dean;,;$5.49 ;,; yellow&red ;,; 09/15/17 ,

Terrance Saunders ;,; $23.70 ;,;green&yellow&red

;,; 09/15/17 , Brandi Zimmerman ;,; $26.66 ;,;

red ;,;09/15/17 ,Guadalupe Freeman ;,; $25.95;,;

green&red ;,; 09/15/17 ,Irving Patterson

;,;$19.55 ;,; green&white&red ;,; 09/15/17 ,Karl Ross;,; $15.68;,; white ;,; 09/15/17 , Brandy Cortez ;,;$23.57;,; white&red ;,;09/15/17,

Mamie Riley ;,;$29.32;,; purple;,;09/15/17 ,Mike Thornton ;,; $26.44 ;,; purple ;,; 09/15/17,

Jamie Vaughn ;,; $17.24;,;green ;,; 09/15/17 ,

Noah Day ;,; $8.49 ;,;green ;,;09/15/17

,Josephine Keller ;,;$13.10 ;,;green;,; 09/15/17 , Tracey Wolfe;,;$20.39 ;,; red ;,; 09/15/17 ,

Ignacio Parks;,;$14.70 ;,; white&red ;,;09/15/17

, Beatrice Newman ;,;$22.45 ;,;white&purple&red

;,; 09/15/17, Andre Norris ;,; $28.46 ;,;

red;,; 09/15/17 , Albert Lewis ;,; $23.89;,;

black&red;,; 09/15/17, Javier Bailey ;,;

$24.49 ;,; black&red ;,; 09/15/17 , Everett Lyons ;,;$1.81;,; black&red ;,; 09/15/17 ,

Abraham Maxwell;,; $6.81 ;,;green;,; 09/15/17

, Traci Craig ;,;$0.65;,; green&yellow;,;

09/15/17 , Jeffrey Jenkins ;,;$26.45;,;

green&yellow&blue ;,; 09/15/17, Merle Wilson

;,; $7.69 ;,; purple;,; 09/15/17,Janis Franklin

;,;$8.74 ;,; purple&black ;,;09/15/17 ,

Leonard Guerrero ;,; $1.86 ;,;yellow

;,;09/15/17,Lana Sanchez;,;$14.75 ;,; yellow;,;

09/15/17 ,Donna Ball ;,; $28.10 ;,;

yellow&blue;,; 09/15/17 , Terrell Barber ;,;

$9.91 ;,; green ;,;09/15/17 ,Jody Flores;,;

$16.34 ;,; green ;,; 09/15/17, Daryl Herrera

;,;$27.57;,; white;,; 09/15/17 , Miguel Mcguire;,;$5.25;,; white&blue ;,; 09/15/17 ,

Rogelio Gonzalez;,; $9.51;,; white&black&blue

;,; 09/15/17 , Lora Hammond ;,;$20.56 ;,;

green;,; 09/15/17,Owen Ward;,; $21.64 ;,;

green&yellow;,;09/15/17,Malcolm Morales ;,;

$24.99 ;,; green&yellow&black;,; 09/15/17 ,

Eric Mcdaniel ;,;$29.70;,; green ;,; 09/15/17

,Madeline Estrada;,; $15.52;,;green;,; 09/15/17

, Leticia Manning;,;$15.70 ;,; green&purple;,;

09/15/17 , Mario Wallace ;,; $12.36 ;,;green ;,;

09/15/17,Lewis Glover;,; $13.66 ;,;

green&white;,;09/15/17, Gail Phelps ;,;$30.52

;,; green&white&blue ;,; 09/15/17 , Myrtle Morris

;,; $22.66 ;,; green&white&blue;,;09/15/17"""

#------------------------------------------------

Start coding below!

daily_sales_replaced = daily_sales.replace(’;,;’, ‘;’)

print(daily_sales_replaced)

daily_transaction = daily_sales_replaced.split(’,’)

print(daily_transaction)

daily_transactions_split =

for transaction in daily_transaction:

daily_transactions_split.append(transaction.split(’;’))

print(daily_transactions_split)

transactions_clean =

for transaction in daily_transactions_split:

transaction_clean =

for data_point in transaction:

transaction_clean.append(data_point.replace('\n', ' ').strip(' '))

transactions_clean.append(transaction_clean)

print(transactions_clean)

customers =

sales =

thread_sold =

for transaction in transactions_clean:

customers.append(transaction[0])

sales.append(transaction[1])

thread_sold.append(transaction[2])

print(customers)

print(sales)

print(thread_sold)

total_sales = 0

for item in sales:

total_sales += float(item.strip(’$’))

print(total_sales)

print(thread_sold)

thread_sold_split =

for item in thread_sold:

for color in item.split(’&’):

thread_sold_split.append(color)

print(thread_sold_split)

def color_count(color):

color_count = 0

for thread_color in thread_sold_split:

if color == thread_color:

  color_count += 1

return color_count

print(color_count(‘white’))

why it giving me 122 count it should be 28
in the color count

How many times does 28 go into 122? There are that many repetitions happening somewhere.

Im having issues with my code as well, repeating each transaction 4 times. I read this thread but couldn’t see the solution to this problem.

EDIT: nevermind, i noticed the indentation issue. but can someone explain why this happens so i have a better understanding of it.
Thanks!

Because the loops are nested. We use one loop (inner) to create a small list, and the other loop (outer) to append those lists to the main list.

I have the same problem.

Hello @ralph0626 and welcome to the Codecademy Forums!

Your question might already have been answered here by @mtf. If not, please explain what issue you are having and post any relevant code.

1 Like

Hello, I came until step 18, where I had to check a bit on the solution.
I first printed out the variable “thread_sold”, and it looked like a simple list.
Then I iterated through it, but didn’t get the desired result.
According to the solution you iterate through it with a nested loop.
Why? In the print output it doesn’t appear like a nested list, but a simple list.
Is it because the content of the list variable “thread_sold” is created in a loop via the append() function iteration through the list variable “transactions_clean” before?

Thanks already for your help.

The purpose of the nested loop is to iterate over the new list that is split out of each string.

'green&white&blue'  =>  ['green', 'white', 'blue']

Thanks a lot for your help mtf!

1 Like

hi
just finished the following got stuck for a good time nested for loop. Took time but got the idea just need practice.