Coding for KidsCoding for Kids
Креативни НиваПредизвикателстваРъководство за Учители
Гласувайте за функции
Курс по усъвършенствано разработване с Python
Глава
>
Ниво

Математически модули
Случаен модул

Цел

Изпълнете симулации и тестове, за да се подготвите за всякакви грешки и забавяния по време на строителството на земеделската земя, използвайки модула random.

През анекса се намира офис, който се грижи за някои административни задължения, свързани с работата с документи относно транспорта, настаняването и логистиката за строителството. Ще бъде добра идея да проведете няколко сценария, използвайки наличните данни, за да изчислите забавянията и неуспехите на оборудването. За тази цел разполагаме с модула random, активиран чрез import random .

Модулът се използва за генериране на случайни резултати в различни степени, което ви позволява да изпълнявате симулации или да добавяте случайни елементи към вашите изчисления/упражнения. За нашите цели ще използваме следните функции:

  • random.seed(): Задава началната стойност за случайното генериране, приема един аргумент – числото, което искате да използвате като начална стойност. Това означава, че всяка функция, която генерира случайно число с даден seed, ще връща същите резултати при многократна употреба. Това се използва, за да се упражни контрол върху случайното генериране и да може да се възпроизведат определени резултати.
  • random.random(): Връща случайно реално число между 0 и 1.
  • random.randint(): Приема два аргумента, генерира число между тях, включително и самите числа. Резултатът се връща като цяло число.
  • random.uniform(): Същото като предишната функция, но връща случайно реално число, а не цяло число.
  • random.triangular(): Същото като предишната функция, но има допълнителен аргумент, наречен mode, който служи като модификатор. Mode трябва да бъде число между двете числа от случайния диапазон. Генерираното случайно число ще бъде статистически по-близко до mode, отколкото ако беше чисто случайно избрано между първите два аргумента.
  • random.choice(): Приема списък като аргумент и избира един елемент от списъка на случаен принцип.
  • random.choices(): Генерира случаен списък, взет като извадка от друг списък, приема три аргумента: списък, от който искате да вземете извадка, друг списък, с който можете да зададете тежест за всяка стойност от основния списък, и накрая променлива с име k, която определя колко извадки искате да вземете. Броят на извадките може да бъде по-голям от дължината на списъка, като се генерират дубликати въз основа на зададените тежести.
  • random.shuffle(): Приема списък като аргумент и го разбърква на случаен принцип.
  • random.sample(): Приема два аргумента, списък, от който да се вземе извадка, и броя извадки, които искате да вземете. Това е опростена версия на random.choices().

За да започнете, отидете до светлия X знак и се обърнете към бюрото, използвайте функцията read(), за да прочетете меморандума и да идентифицирате данните, необходими за симулация с известна случайна вариация. Ще проведем симулация на повреда на оборудване, като меморандумът ще ви информира за кой seed да използвате за случайното генериране, както и за списъка, от който да се прави извадката. Използвайте функцията random.seed() и въведете стойността, предоставена в меморандума.

Отидете до тъмния X знак върху синия килим и обърнете се към бюрото. Имаме константен списък с име sectors, който съдържа зоните на земеделската земя, описани в предишния меморандум. Създайте променлива с име selection, за да запазите стойността на random.choice(), като използвате константния списък sectors за извличане на извадка от списъка, например: selection = random.choice(sectors). Създайте друга променлива с име delay и запазете стойността на random.random(), за да симулирате марж на грешки, предизвикани от забавяния.

Създайте още една променлива с име defect и запазете стойността на random.randint(), за да генерирате процент на потенциална повреда на оборудването. Добавете като аргументи 0 и 15, за да генерирате процент между тези две числа. След като променливите selection, delay и defect бъдат настроени, използвайте предварително написаната функция write() с тези три променливи в този ред, за да запишете данните, които могат да се използват за тестване на потенциални проблеми в строителството.

Отидете до златния X знак и използвайте функцията read(), за да продължите с проекциите; данните в меморандума ще съдържат материали, количества и данни за извадки. Ще проведем по-голяма симулация, използвайки данните от меморандума, включително константен списък с име materials, който съхранява типовете материали, описани в меморандума.

Отидете до тъмния X знак върху червения килим и обърнете се към бюрото. Създайте списък с име weights и запазете четирите числови стойности, посочени в меморандума, съответстващи на материалите в реда, в който са представени. Например: weights = [400, 600 , -insert value-, -insert value-]

Създайте променлива с име simulation и запазете стойността на random.choices(), като добавите константата materials, списъка weights, който създадохте, и променлива с име k, съдържаща единиците за извадка, посочени в меморандума, например: simulation = random.choices(materials, weights , k = insert sampling units ). Използвайте променливата simulation с предварително написаната функция write(), за да запишете данните.

Отидете до тъмния X знак върху зеления килим и обърнете се към бюрото, използвайте функцията random.shuffle() със списъка simulation, който създадохте, за да го разбъркате, например: random.shuffle(simulation). Това ще разбърка списъка, без да е необходимо да се съхранява резултата, тъй като функцията модифицира списъка директно. Създайте списък с име sample и запазете стойността на random.sample(), като добавите списъка simulation като първи аргумент и за втория аргумент посочете стойност 3, за да вземете три случайни елемента като извадка, например: sample = random.sample(simulation, k=3). Използвайте simulation и sample с предварително написаната функция write(), за да запишете новите извадки.

Накрая, отидете до тъмния X знак върху лилавия килим и обърнете се към бюрото, създайте променлива с име defect и запазете резултата от random.uniform(), като добавите аргументите 3 и 10. Това са стойностите за извадката от оригиналната симулация и за взетата извадка, които ще използваме за генериране на потенциални маржове на дефект при оборудването от получената извадка.

Създайте променлива с име losses и запазете стойността на random.triangular(), като добавите стойностите 200, 600 и 400. Това са стойностите за материалите, описани в предишния меморандум, по-конкретно най-ниската, най-високата и тази, която е най-близо до средата. Това ни позволява да получим триъгълна случайна стойност, базирана на броя на материалите, използвани в симулацията. Използвайте стойностите defect и losses с предварително написаната функция write(), за да получите резултати и да завършите нивото.

Книга с Код