-
Notifications
You must be signed in to change notification settings - Fork 0
/
thread_shed.py
256 lines (188 loc) · 9.74 KB
/
thread_shed.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
# Python 3 (Coded in 2020)
# Thread Shed keeps its register of all of the transaction information in one string called daily_sales.
# For each transaction, the name of the customer, amount spent, types of thread purchased, and the date of sale is recorded in this same string.
# The task is to iterate through the string and clean up each transaction and store all the information in easier to access lists.
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"""
#------------------------------------------------
## FIRST STEP - CLEANING ##
#How is each transaction stored?
# Each transaction is separated with a coma starting by name of the customer and ending with the date.
#How is each piece of data within the transaction stored?
#Within each transaction, the values are separated with a ;,; between each of the values,there're (sometimes) also spaces of inconsistent length.
#At the end of a transaction (date) and the begining of the next (name), sometimes there are spaces and sometimes not, but it is always separated by the comma that marks the new transaction, there's no ;,; between the date at the end and the name at the beginning of the next transaction.
# 1. We need to replace the artifact ;,; to something without a comma, so we don’t split any transactions themselves.
daily_sales_replaced = daily_sales.replace(";,;", "!!!!")
# print(daily_sales_replaced)
# 2. Split into a list of each individual transaction:
daily_transactions = daily_sales_replaced.split(",")
#print(daily_transactions)
#3. Split each individual transaction into a list of its data points
daily_transactions_split = []
for item in daily_transactions:
daily_transactions_split.append(item.split("!!!!"))
#print(daily_transactions_split)
#4. Replace new line caracters with an empty string and then clean whitespace with .strip()
transactions_clean = []
for transaction in daily_transactions_split:
transaction_clean = []
for each_data_point in transaction:
transaction_clean.append(each_data_point.replace("\n", "").strip(" "))
transactions_clean.append(transaction_clean)
#print(transactions_clean)
## SECOND STEP, GET THE DATA ##
# Collect the individual data points for each transaction in these lists: customers, sales, and thread_sold.
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)
# to know how much Thread Shed made in a day:
total_sales = 0
for sale in sales:
total_sales += float(sale.strip("$"))
#print(sales)
#print (total_sales)
# we want to determine how many of each color thread we sold today (a list that contains an item for each color thread sold)
#thread_sold is a list of strings, some are single colors and some are multiple colors separated by the & character, so we need to split them again.
#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)
# Count the number of sales for each color:
# color_count takes one argument "color". It iterates through thread_sold_split
# and count the number of times the item is equal to argument "color" and then returns this count.
def color_count(color):
count = 0
for item in thread_sold_split:
if (item == color):
count += 1;
return count;
# TESTS
#print(color_count("blue"))
#print(color_count("green"))
#print(color_count("yellow"))
#print(color_count("white"))
# The list colors stores all of the colored threads that Thread Shed offers.
# Iterate through thread_sold_split and print a sentence that says how many threads of each color were sold today.
colors = ['red','yellow','green','white','black','blue','purple']
# Simple solution
for color in colors:
print("Today we sold " + str(color_count(color))+ " " + color +" threads" )
# Solution using format:
for color in colors:
print(
"Thread Shed sold today {0} threads of {1} threads today.".format(color_count(color), color)
)
# Reference: https://www.youtube.com/watch?v=x1AxPYJwHCw