Добавлены примеры и задание по типам коллекций

This commit is contained in:
Sergey Lemeshevsky
2020-03-09 14:33:15 +03:00
parent 2756a9b834
commit 7dba740376
15 changed files with 2151 additions and 107 deletions

View File

@@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
import collections
import sys
# Start 1st block
ID, FORENAME, MIDDLENAME, SURNAME, DEPARTMENT = range(5)
# End 1st block
User = collections.namedtuple("User",
"username forename middlename surname id")
# End 2d block
def main():
if len(sys.argv) == 1 or sys.argv[1] in {"-h", "--help"}:
print("usage: {0} file1 [file2 [... fileN]]".format(
sys.argv[0]))
sys.exit()
usernames = set()
users = {}
for filename in sys.argv[1:]:
with open(filename, encoding="utf8") as file:
for line in file:
line = line.rstrip()
if line:
user = process_line(line, usernames)
users[(user.surname.lower(), user.forename.lower(),
user.id)] = user
print_users(users)
def process_line(line, usernames):
fields = line.split(":")
username = generate_username(fields, usernames)
user = User(username, fields[FORENAME], fields[MIDDLENAME],
fields[SURNAME], fields[ID])
return user
def generate_username(fields, usernames):
username = ((fields[FORENAME][0] + fields[MIDDLENAME][:1] +
fields[SURNAME]).replace("-", "").replace("'", ""))
username = original_name = username[:8].lower()
count = 1
while username in usernames:
username = "{0}{1}".format(original_name, count)
count += 1
usernames.add(username)
return username
def print_users(users):
namewidth = 32
usernamewidth = 9
print("{0:<{nw}} {1:^6} {2:{uw}}".format(
"Name", "ID", "Username", nw=namewidth, uw=usernamewidth))
print("{0:-<{nw}} {0:-<6} {0:-<{uw}}".format(
"", nw=namewidth, uw=usernamewidth))
for key in sorted(users):
user = users[key]
initial = ""
if user.middlename:
initial = " " + user.middlename[0]
name = "{0.surname}, {0.forename}{1}".format(user, initial)
print("{0:.<{nw}} ({1.id:4}) {1.username:{uw}}".format(
name, user, nw=namewidth, uw=usernamewidth))
main()

View File

@@ -0,0 +1,8 @@
622 480 899 298 221 940 196 556 -7 593 250 699 966 530 143 22
-59 164 976 566 -56 960 340 754 620 533 528 308 47.3 14.5
10 51 22 06 50 79 90 34 68 50 -29 -19
29 58 73 15 4 6 17 5 4 5 3 7 5.5 9 1 7 8 -17 0 -9.5 5
299 985 834 72 -100 270 656 -44 255 38 616 845 -6 542 -81 379 279
7 33 50 88 2 91 20 93 60 80 43 93 67 80 41 14 99 73 59 73 74 26 28
39 81 41 18 83 30 74 72 51 15 59
0.9 97 3 35 11 54 50 58 24 11 26 79 21 61 15

95
src-collections/statistics.py Executable file
View File

@@ -0,0 +1,95 @@
import collections
import math
import sys
#Start 1st block
Statistics = collections.namedtuple("Statistics",
"mean mode median std_dev")
#End 1st block
def main():
if len(sys.argv) == 1 or sys.argv[1] in {"-h", "--help"}:
print("usage: {0} file1 [file2 [... fileN]]".format(
sys.argv[0]))
sys.exit()
numbers = []
frequencies = collections.defaultdict(int)
for filename in sys.argv[1:]:
read_data(filename, numbers, frequencies)
if numbers:
statistics = calculate_statistics(numbers, frequencies)
print_results(len(numbers), statistics)
else:
print("no numbers found")
def read_data(filename, numbers, frequencies):
with open(filename, encoding="ascii") as file:
for lino, line in enumerate(file, start=1):
for x in line.split():
try:
number = float(x)
numbers.append(number)
frequencies[number] += 1
except ValueError as err:
print("{filename}:{lino}: skipping {x}: {err}".format(
**locals()))
def calculate_statistics(numbers, frequencies):
mean = sum(numbers) / len(numbers)
mode = calculate_mode(frequencies, 3)
median = calculate_median(numbers)
std_dev = calculate_std_dev(numbers, mean)
return Statistics(mean, mode, median, std_dev)
def calculate_mode(frequencies, maximum_modes):
highest_frequency = max(frequencies.values())
mode = [number for number, frequency in frequencies.items()
if frequency == highest_frequency]
if not (1 <= len(mode) <= maximum_modes):
mode = None
else:
mode.sort()
return mode
def calculate_median(numbers):
numbers = sorted(numbers)
middle = len(numbers) // 2
median = numbers[middle]
if len(numbers) % 2 == 0:
median = (median + numbers[middle - 1]) / 2
return median
def calculate_std_dev(numbers, mean):
total = 0
for number in numbers:
total += ((number - mean) ** 2)
variance = total / (len(numbers) - 1)
return math.sqrt(variance)
def print_results(count, statistics):
real = "9.2f"
if statistics.mode is None:
modeline = ""
elif len(statistics.mode) == 1:
modeline = "mode = {0:{fmt}}\n".format(statistics.mode[0], fmt=real)
else:
modeline = ("mode = [" + ", ".join(["{0:.2f}".format(m)
for m in statistics.mode]) + "]\n")
print("""\
count = {0:6}
mean = {mean:{fmt}}
median = {median:{fmt}}
{1}\
std. dev. = {std_dev:{fmt}}""".format(count, modeline, fmt=real, **statistics._asdict()))
main()

29
src-collections/users.txt Normal file
View File

@@ -0,0 +1,29 @@
1080:Priscillia:Forbes:Shepard:Cleaning Services
4382:Devan::Fielder:Public Relations
6285:Grey::Collyer:Public Relations
6201:Kierah::Battaile:Catering
6671:Madilyn::Helling:Public Relations
4898:Deri-J::Watherston:Research
8954:Alec::Leng:Production
6263:Rebbekkah::Clifford:Cleaning Services
1704:Elorm::Lynes:Sales
2064:Kinza:Roxanna:Farrer:Research
4663:Zackery::Poyntz:Research
1601:Albert:Lukas:Montgomery:Legal
3702:Albert:Lukas:Montgomery:Sales
4730:Nadelle::Landale:Warehousing
4191:Cory:Diljeet:Stockill:Sales
6119:Rhae::Forrester:Sales
4454:Kieara::Milner:Cleaning Services
5502:Taylore:Amellia:Granse:Cleaning Services
7505:Tyra:Deborah:Elting:Research
7506:Tyra:Deborah:Elting:Catering
1183:Bridget:Beverley:Pace:Catering
7337:Nathen::Lemerrie:Customer Service
2462:Ashlee::Hooten:Production
0641:Kelci-Louise::Blakey:Sales
8866:Asir::Cowthwaite:Human Resources
0196:Niven:Cary:Sproule:Warehousing
0199:Niven:Cary:Sproule:Sales
0243:Niven:Cary:Sproule:Legal
4541:Keirien::Blenkinsop:Customer Service

278
src-collections/users2.txt Normal file
View File

@@ -0,0 +1,278 @@
4760:Samira::Mckellar:Production
3209:Daisy::Cobham:Marketing
0419:Naiya::Emmett:Research
4219:Khailan:Rhyan:Tardiff:Production
5275:Azami:Lilly:Shwenn:Warehousing
1703:Sameeta::Leadbeater:Production
0972:Zamin:Thorfinn:Carden:Warehousing
8036:Maude:Corran:Fairbairn:Climate Change
2095:Kole:Eochaidh:Alwood:Catering
9729:Roisin:Alexsandra:Bissett:Research
5347:Orlaith::Pettitt:Senior Management
4901:Amaar:Burhan:Kaye:Catering
0924:Nekoda::Mcmorran:Sales
5286:Kelsy::Dalzell:Production
0664:Martyna::Clapton:Human Resources
4660:Maninder::Bonnard:Public Relations
9331:Dannica::Willock:Senior Management
2059:Duha::Balderstone:Marketing
8193:Aubrey::Underhill:Human Resources
5027:Keedan::Reddoch:Legal
2004:Kenna::Linsey:Production
1842:Keven::Mcgee:Legal
5604:Josef:Brooke:Martinson:Transport
3894:Kobie::Elsom:Cleaning Services
2253:Khai:Kaira:Yelverton:Production
9837:Enarie:Sharleen:Keys:Senior Management
2570:Robbi:Shaunna:Cecil:Production
3016:Latifatu::Brinnan:Sales
4768:Giselle:Samia-Skye:Girdham:Customer Service
3461:Leighvi:Busra:Frarrer:Warehousing
4159:Dong-Hee::Roson:Sales
6800:Khaliq::Yates:Marketing
8621:Karma::Allison:Customer Service
0847:Rio::Trustram:Legal
2311:Mirrin::Bowstall:Sales
6611:Zarina::Sword:Transport
0149:Fredrick:Jeanie:Spencer:Production
8142:Kallin:Xavier:Ratcliff:Transport
8311:Amy-Louise::Coe:Public Relations
4288:Marek::Mcrae:Production
5956:Eabha::Neelin:Public Relations
7351:Edie::Crow:Public Relations
3025:Billie-Jay::Wingrove:Customer Service
2417:Deborah::Scherger:Production
5859:Mitchell:Donell:Ellerington:Legal
7312:Ailsa:Kianna:Sargesson:Marketing
7282:Lucyanne:Els:Apperson:Legal
6313:Eric::Chaplin:Senior Management
7173:Jaimee-Lee::Calloway:Cleaning Services
7645:Angelo-Carlo::Forrester:Senior Management
5222:Joshua::Matts:Climate Change
7471:Ali::Carradice:Marketing
7155:Nicoline::Eckhold:Sales
1629:Glen::Davies:Sales
1527:Andreas::Morfoot:Research
7908:Oihane:Pearse:Mohr:Public Relations
2921:Ma'az:Sharies:Mann:Cleaning Services
8394:Jay-Alexander:Maia:May:Climate Change
5697:Kian::Sellers:Climate Change
4462:Keryn::Cardno:Cleaning Services
8263:Jarrod::Royal:Cleaning Services
2108:Ayman::Baillie:Sales
8752:Ailis::Calvert:Sales
6299:Haroon::Hindmarsh:Production
9810:Dre::Byrom:Transport
5261:Robbyn::Kropp:Public Relations
1811:Gregor::Knott:Research
8386:Anton::Capes:Production
9486:Alyth::Lisenby:Production
7530:Makayla::Looper:Cleaning Services
0676:Alistair::Gosling:Climate Change
8529:Pia:Alea:Jarvis:Research
5087:Dante::Windham:Production
0743:Mahirah::Ashton:Orders
2654:Niah::Selby:Marketing
9707:Ma-an::Gifford:Senior Management
1278:Kamron::Rohrbach:Climate Change
1506:Tianna::Macfie:Production
5159:Arlene::Behymer:Legal
8208:Anya:Fredrick:Grissom:Cleaning Services
0568:Rubie::Mcgeorge:Legal
5372:David:Rohana:Dalgliesh:Human Resources
9256:Chelsey:Carl:Challenor:Senior Management
2633:Neervana::Annie:Human Resources
9196:Fabrizio::Coombe:Sales
3537:Kirstin::Barret:Orders
5756:Maryann:Anisha:Moodie:Sales
6913:Nurintishar::Cavill:Human Resources
9308:Rehan:Joleen:Brennand:Senior Management
0776:Dawn::Leader:Production
9449:Brendyn:Tiernan:Cummings:Marketing
8985:Brogan:Aisling:Warne:Cleaning Services
9399:Kelsay::Rix:Sales
3021:Ben::Wallace:Customer Service
3928:Primrose:Shelly:Handfield:Human Resources
9942:Arlene::Slater:Cleaning Services
3423:Brendon::Boswell:Marketing
7979:Caitlynn::Bonnetta:Sales
8633:Aydan:Greta:Youll:Production
0703:Jenni::Few:Legal
1081:Gregory::Mell:Legal
8656:Ailee:Bryden:Seabrooke:Sales
9985:Pip:Giulia:Lewie:Climate Change
8469:Fionna::Phipps:Sales
4777:Brogan::Hearn:Sales
2332:Corry::Climo:Sales
0520:Ruqaya:Alexi:Norton:Production
3352:Shiran::Chalifour:Research
9235:Cheuk::Trevannion:Senior Management
1026:Khaliq::Hindley:Sales
9372:Murryn::Mcbride:Production
9379:Nur::Rinn:Cleaning Services
1043:Nya:Hebe:Marnie:Production
0063:Eilis:Jeannie:Macmillan:Sales
5285:Arabella:Samara:Farrer:Transport
1859:Fatemah::Living:Sales
4911:Jin-Hwan:Keris:Carew:Human Resources
0489:Gurpreet::Mulvie:Climate Change
7167:Samad::Whiteside:Marketing
4732:Kian::Emmett:Warehousing
2370:Shatha::Aitkin:Sales
6719:Abbey-Lee:Zakeria:Passmore:Cleaning Services
0851:Abdallah:Krishna:Doherty:Marketing
4073:Harriett::Smorthwaite:Marketing
7195:Kenzi:Stacie-Lee:Greenall:Climate Change
4014:Khadeeja:Madilyn:Malbis:Sales
5837:Reanne:Jaedon:Ellicott:Marketing
2796:Yanis::Hindley:Marketing
6290:Devan::Weidenmeyer:Customer Service
5915:Heather:Aidan:Moorehouse:Climate Change
4626:Lyndsey::Dolling:Transport
6776:Leigh-Ann::Supierz:Public Relations
5043:Jacy::Fryer:Marketing
5681:Jai::Vaill:Marketing
4156:Cameron::Christian:Research
6663:Bronwyn::Rodgerson:Transport
4478:Samanta::Lawrenson:Marketing
8337:Ramsey:Nina:Dimascio:Catering
2402:Julius::Haggar:Climate Change
7010:Tamlynn::Rakestraw:Marketing
2193:Braeden::Hoggins:Sales
0266:Rhea:Ruqaya:Hazelgreave:Climate Change
7106:Rhyce::Lord:Production
8037:Tamunotonye:Yann:Craggs:Cleaning Services
0262:Georgie::Coad:Climate Change
2492:Luisadh:Haigan:Ugill:Sales
2062:Justice::Mathieson:Warehousing
1692:Kailey:Denny:Blain:Sales
2259:Rania:Ciar:Dodwell:Sales
9786:Kristin::Shearer:Production
8874:Rayyan:Anwar:Falhouse:Climate Change
5113:Leland::Kightley:Production
6197:Christina::Dodshon:Climate Change
1012:Ewan::Sergeantson:Research
0827:Lexy::Cramp:Legal
5407:Indi:Alba:Cage:Orders
4645:Farjan::Woodburn:Human Resources
6162:Prabhkaran:Taryn:Garthwaite:Sales
4272:Jaydon:Vincent:Locket:Customer Service
4053:Islam::Krouskup:Senior Management
6110:Keeva::Rumfit:Sales
4234:Amina::Callander:Transport
5680:Julius:Vyctoria:Shepard:Production
3988:Karis:India:Peck:Human Resources
9137:Ross::Godolpin:Legal
3401:Rikki::Plamondon:Climate Change
1853:Elisabeth::Wasling:Human Resources
0475:Roma::Dow:Sales
5998:Elizabeth::Helliwell:Production
1535:Breerah::Mcphail:Customer Service
7156:Nur'Ain::Tighe:Orders
4249:Julius::Jalfon:Warehousing
7817:Kellise:Dania:Whitefield:Sales
6511:Kirstyn:Ayse:Rooke:Research
5505:Heatham::Mcminn:Catering
9695:Vera:Mason:Gidman:Climate Change
2612:Jugjeevan:Declyn:Goldie:Legal
5017:Armin::Connery:Transport
6991:Debbieleigh::Gladwyn:Production
9779:Hawa:Nowaa:Swainbank:Senior Management
5972:Evann::Laird:Marketing
7863:Aleena::Meissner:Orders
6944:Louis::Newbould:Senior Management
0023:Rogan::Rumble:Legal
4887:Tana::Donn:Transport
7499:Ted::Cherry:Senior Management
6742:Jeenan:Clara:Mcnutt:Production
8418:Jonny:Diesel:Elton:Marketing
5520:Samson:Haleema:Senkow:Research
7544:Maryanne:Samuele:Lily:Senior Management
9799:Kole::Scoville:Orders
6271:McLaren::Knapp:Production
4678:Connon::Bottomly:Marketing
4235:Mirza::Whiteside:Senior Management
8958:Shanice:Marilyn:Notman:Transport
8115:Emma::Wennerbom:Production
8963:Michel-Ange:Francesca:Ferrell:Sales
8151:Amaya::Grace:Human Resources
6188:Eve-Rose::Veach:Catering
0716:Kimi::Rorbach:Catering
8776:Lilyjo::Graw:Cleaning Services
8518:Ophelia::Franks:Orders
8906:Bradley::Kelsey:Sales
8733:Aby::Lackland:Orders
0279:Bregan::Blood:Sales
4547:Annabella:Bobi-Lea:Elvy:Marketing
7067:Abrar:Matheullah:Yuile:Sales
6640:Karra:Laseinia:Budden:Sales
7073:Harvey:Haniya:Janssen:Research
1193:Kellise:Mykaela:Kevan:Public Relations
8242:Lowri::Tattersall:Transport
7684:Blane::Thwaits:Production
0926:Tamara:Meadow:Nason:Sales
9304:Karmyn::Farragher:Human Resources
7453:Ossian:Mallory:Dryden:Customer Service
5116:Loreta::Lampkin:Sales
6254:Lara::Baylis:Legal
0600:Wiktoria:Hesle:Helme:Human Resources
0071:Daniela:Marymarie:Halliman:Research
3617:Keigan:Yi-An:Wennerbom:Senior Management
8429:Nicole::Alderson:Sales
9514:Kaylin::Clontz:Production
1664:Baizah::Kilham:Sales
4099:Areeya::Linahon:Human Resources
8801:Vegas::Yelverton:Marketing
9309:Kelly:Waris:Haigh:Research
6531:Kahl::Wyman:Research
6127:Alexzandra:Janica:Bullington:Production
9885:Carrie:Doone:Estes:Production
4386:Julia::Wray:Production
2346:Nell::Cordingly:Production
9539:Quin:Abel:Battaile:Human Resources
7959:Guramrit::Jennison:Production
8000:Braedyn::Buttenshaw:Human Resources
0256:Akamveer::Bellard:Sales
6769:Kirstyn::Archer:Sales
0900:Reen:Oakley:Spurlock:Cleaning Services
6427:Gretchen::Webber:Catering
2432:Aliana::Learmont:Warehousing
8232:Seth::Curwen:Cleaning Services
5422:Erona::Wortham:Transport
0267:Faheez::Lupo:Transport
9205:Bailee:Layna:Julia:Cleaning Services
3862:Alexander-Bruce:Jami:Solley:Customer Service
9230:Paris-Nicole::Smorthwaite:Orders
6813:Allana::Sisley:Climate Change
9521:Liza::Shap:Research
3473:Rebbeca::Farmarie:Research
6893:Ellie-May::Mcmurdo:Research
6880:Joela:Lila:Killigrew:Production
7460:Tammy::Waind:Marketing
9978:Davydas:Julian:Waggoners:Catering
6549:Rianne::Elson:Sales
2939:Eesa:McCody:Duncan:Production
6195:Josey::Bunn:Sales
4579:Nikolaus::Sherwin:Production
9472:Suhayb::Cottingham:Research
9946:Duha::Criswick:Production
4557:Lennan:Musammath:Selby:Production
9785:Deuie:Harvey-Lee:Lawrence:Sales
3097:Yousf:Glet:Capes:Marketing
2312:Katrina::Florack:Human Resources
5695:Kasey::Macpherson:Sales
3023:Tawhid::Tyldesley:Marketing
9894:Omolara::Whitehouse:Senior Management
0833:Khaled::Plats:Orders
8817:Gurkeerat::Hargreaves:Marketing
2903:Rumsha::Kay:Sales
7066:Jay-D::Copland:Sales
1484:Arun:Orchid:Caton:Marketing
8730:Errin::Dodwell:Climate Change
4716:Gerrard::Cautherey:Sales
9097:Madysan::Cawley:Public Relations
7803:Kareem::Moffit:Sales
3010:Jayne-Marie:Baban:Lyster:Research
4669:Iman::Spicer:Sales
0021:Justin::Radclyffe:Sales
8959:Siddharth::Gunn:Production