Курс по усъвършенствано разработване с Python
Глава
>
Ниво
Математически модули
Въведение в модула по математика
Цел
Проверете документите за собственост и границите на имота във фермата, верифицирайте и пресметнете числата, използвайки функциите от Math модула.
В офиса на самия край на главната сграда има архив със стари сини чертежи на сградата и документи за собственост. Има планове за разширяване на фермата към изток, но е важно да се уредят всички документи, преди да решите да разгледате каквито и да е строителни планове. Това ще бъде направено чрез използването на модула math на python.
import math
Както и статистическият модул преди това, модулът math разполага със съвкупност от математически функции, които можем да използваме за разширяване на вградената библиотека на python:
-
math.isnan(): Проверява дали въведената стойност не е число -
math.isinf(): Проверява дали въведената стойност е безкрайно число -
math.isfinite(): Проверява дали въведената стойност е крайна -
math.prod(): Умножава всички подадени аргументи -
math.pow(): Приема два аргумента и връща стойността на първия аргумент, повдигнат в степен на втория. -
math.trunc(): Прекъсва подадения аргумент, като премахва десетичната част от числото с плаваща запетая, превръщайки го в цяло число. (Не закръгля, а просто премахва) -
math.copysign(): Приема два аргумента, копира знака (- или +) от втория аргумент и го прилага към първия. -
math.factorial(): Приема аргумент и изчислява произведението на числата от този аргумент до 1. Например, ако стойността е5, то се извършва:5x4x3x2x1и се получава резултат.
Ще използваме тези функции, за да прегледаме и запишем някои данни с цел подготовка на проектите за развитие. Съществуват три константи от тип списък, съдържащи схеми на фермата, наречени: red_schematics, green_schematics, blue_schematics. В тези схеми са записани нечислови и неизползваеми стойности; използвайте математическите функции, за да идентифицирате елементите и да намерите използваемите данни, които да запишем.
Първо, придвижете се към тъмния X знак над червения килим и използвайте цикъл, за да преминете през елементите на списъчната константа red_schematics, за да идентифицирате използваемите елементи.
for x in red_schematics: y = math.isnan (float(x)) if y == True: player.speak("Not a Number") else: y = math.isinf(float(x)) if y == True: player.speak("Is infinite") else: player.speak(x)
Цикълът ще премине през всички елементи на списъка, като функцията math.isnan() ще идентифицира нечисловите записи, а math.isinf() ще идентифицира безкрайните стойности, които не могат да се използват за събиране на данни. Създайте нов списък с име red_values и използвайте list comprehension, за да премахнете нежеланите елементи, като приложите math.isfinite() за филтриране, по следния начин: red_values = [x for x in red_schematics if math.isfinite(float(x))].
След това съберете всички числа, като използвате функцията math.prod() за умножение на всички елементи в списъка, по следния начин: red_values = math.prod(red_values).
Извършете същия процес на филтриране върху тъмните X знаци над зеления и синия килим, като използвате списъчните константи green_schematics и blue_schematics и обединете елементите в списъци с имена green_values и blue_values.
Придвижете се до златния X знак, обърнете се към бюрото и използвайте предварително написаната функция write(), за да запишете използваемите данни от схемата. След като съберете всичко, придвижете се до светлия X знак и използвайте функцията open(), за да влезете в следващата стая.
След като влезете в следващата стая, има няколко бюра с документи за земята и координати. Добра идея е да запишете някои данни, преди да пристъпите към проверка на новите добавки във фермата в следващата зона, намираща се от другата страна на моста. Придвижете се до светлия X знак пред кутията с карти до първото бюро, използвайте функцията read(), за да придобиете индекс данни за документите на земята.
Придвижете се до тъмния X знак над лилавия килим, създайте променлива с име purple_data и използвайте функцията math.pow() за умножаване на придобитите данни с цел получаване на координатна информация. Повдигнете индекса на степен 3, по следния начин: purple_data = math.pow( -index data- , 3 ), като не забравяте да добавите прочетените индекс данни. Използвайте math.trunc(), за да премахнете десетичната част от променливата, по следния начин: purple_data = math.trunc(purple_data). След това, на X знака, използвайте предварително написаната функция write() с purple_data, за да запишете данните съхранени в променливата.
За финал, придвижете се до светлия X знак пред архивния шкаф до горното бюро. Използвайте функцията read(), за да получите индекс данни отново; тези данни трябва да бъдат разопаковани, за да разкрият допълнителна координатна информация за земята. Създайте променлива с име white_data, за да съхраните стойността на данните, намерени във файла, и променлива с име sign, за да съхраните знаковия номер, намерен във файла. Придвижете се до тъмния X знак над белия килим и използвайте функцията math.copysign(), като подадете двете създадени променливи като аргументи, и присвоите стойността на white_data, по следния начин: white_data = math.copysign(white_data,sign).
След това, с white_data, използвайте math.factorial(), за да умножите индекса, конвертирайте white_data в цяло число и го използвайте с функцията, по следния начин: white_data = math.factorial(int(white_data)). Използвайте предварително написаната функция write(), за да запишете white_data и така да завършите нивото.