Friday, June 12, 2015

თავი 4 (4,4 - 4,5)



4.4 Random numbers
4.4. შემთხვევითი ციფრები


ერთი და იგივე მონაცემის შეყვანისას პროგრამების უმეტესობა დააგენერირებს  ერთნაირ შედეგს. ისინი არიან განსაზღვრული. განსაზღვრა კარგი რამეა,  როცა ველოდებით ერთნაირ გამოთვლას, რომ ვაწარმოოთ ერთნაირი შედეგი. ზოგიერთი აპლიკაციისთვის გვინდა , რომ კომპიუტერი იყოს არაპროგნოზირებადი. თამაშები აშკარა მაგალითია, მაგრამ არის სხვებიც.
მართლაც, არადეტერმინირებული პროგრამის გაკეთება აღმოჩნდება, რომ არც ისე ადვილია, მაგრამ არსებობს ხერხები, რათა ის მინიმუმ ჩანდეს როგორც არადეტერმინირებული. ერთი  ხერხი იყენებს ალგორითმს, რომელიც აგენერირებს ფსევდოშემთხვევით ციფრებს. ფსევდოშემთხვევითი ციფრები არაა მართლა შემთხვევითი, იმიტომ რომ ისინი გენერირებულია განსაზღვრული გამოთვლებით, მაგრამ ერთი შეხედვით მათი გამორჩევა შეუძლებელია  ნამდვილად შემთხვევითი ციფრებისგან.
            random მოდული უზრუნველყოფს ფუნქციას, რომელიც აგენერირებს ფსევდოშემთხვევით ციფრებს (რომელსაც ამას იქით დავუძახებთ "შემთხვევითს" “random”).
ფუნქცია random  აბრუნებს შემთხვევით წილადებს 0.0 - იდან 1.0- მდე. (0.0 -ის ჩათვლით, მაგრამ  1.0 არ ჩაითვლება).  ყოველ ჯერზე, როცა გამოიძახებ random - ს მიიღებ ციფრების გრძელ სერიას. მაგალითი სანახავად გაუშვი ეს მარყუჟი:

import random
for i in range(10):
            x = random.random()
            print x

ეს პროგრამა აწარმოებს 10 შემთხვევითი ციფრის სიას 0.0 - დან 1.0 -მდე

0.301927091705
0.513787075867
0.319470430881
0.285145917252
0.839069045123
0.322027080731
0.550722110248
0.366591677812
0.396981483964
0.838116437404

სავარჯიშო 4.1 გაუშვი ეს პროგრამა შენს სისტემაში და ნახე რა ციფრებს მიიღებ. გაუშვი ბევრჯერ და ნახე რა ციფრებს მიიღებ.

random ფუნქცია არის მხოლოდ ერთი მრავალი ფუნქციიდან, რომელიც უმკლავდება შემთხვევით ნომრებს. randint ფუნქცია იღებს პარამეტრებს low და high და აბრუნებს მთელ რიცხვს low - დან high - მდე (ორივეს ჩათვლით).

>>> random.randint(5, 10)
5
>>> random.randint(5, 10)
9

რიგიდან შემთხვევითი ელემენტის ასარჩევად შეგიძლია გამოიყენო choice:

>>> t = [1, 2, 3]
>>> random.choice(t)
2
>>> random.choice(t)
3

random მოდული ასევე უზრუნველყოფს, რომ უწყვეტად აწარმოოს შემთხვევითი მნიშვნელობები გაუსიდან, ექსპონენტიდან, გამადან და.ა.შ.

4.5. მათ. ფუნქციები

პითონს აქვს math მოდული, რომელშიცაა უმეტესი ნაცნობი მათემატიკური ფუნქციებისა. სანამ დავიწყებთ ამ მოდული გამოყენებას, მანამდე მისი იმპორტირება უნდა მოვახდინოთ.

>>> import math

ეს ბრძანება ქმნის ობიექტურ მოდულს(module object) სახელად math.  
თუ ამობეჭდავ ამ მოდულს , ნახავ რაიმე ინფორმაციას ამის შესახებ.

>>> print math
<module 'math' from '/usr/lib/python2.5/lib-dynload/math.so'>

ეს მოდული შეიცავს ფუნქციებს და ცვლადებს, რომელიც განსაზღვრულია ამ მოდულში.  ფუნქციაზე წვდომა რომ გქონდეს, უნდა მიუთითო მოდულის და ფუნქციის სახელი - რომელიც ერთმანეთისგან გამოყოფა წერტილით. ამ ფორმატს ეძახიან წერტილით ჩაწერას (dot notation).

>>> ratio = signal_power / noise_power
>>> decibels = 10 * math.log10(ratio)
>>> radians = 0.7
>>> height = math.sin(radians)

პირველი მაგალითი ანგარიშობს ლოგარითმს 10 ფუძეზე სიგნალი/ხმაურის სიხშირის(computes the logarithm base 10 of the signal-to-noise ratio). მათ. მოდულში ასევეა ფუნქცია log რომელიც ანგარიშობს ლოგარითმის ფუძეს. მეორე მაგალითი  პოულობს რადიანების (radians) სინუსს. ცვლადის სახელი მინიშნებაა, რომ sin და სხვა ტრიგონომეტრიული ფუნქციები(cos, tan, და.ა.შ.) არგუმენტებს იღებს რადიანებში.  გრადუსები რადიანებში რომ გადაიყვანო, გაყავი 360 -ზე  და გაამრავლე 2 π  - ზე

>>> degrees = 45
>>> radians = degrees / 360.0 * 2 * math.pi
>>> math.sin(radians)
0.707106781187


math.pi არის გამოსახულება pi - სა მათ. მოდულიდან. ცვლადის მნიშვნელობა მიახლოებულია π  - სთან 15 ციფრით.
ტრიგონომეტრია თუ იცი, შეგეძლო შეგემოწმებინა წინა შედეგი შედარებით: კვადრატული ფესვი ორიდან გაყოფილი ორზე:

>>> math.sqrt(2) / 2.0
0.707106781187