Մոդուլներ

Python ծրագրավորման լեզուն սովորելիս մենք արդեն կիրառել ենք ներդրված ֆունկցիաներ՝ print(), input(), կամ type(): Իրականում, Python-ն ունի մեծ թվով ֆունկցիաներ, սակայն ոչ բոլորն են ուղղակիորեն հասանելի Python-ի նոր ծրագրից: Փոխարենը, դրանք պահվում են առանձին ֆայլերում, որոնք կոչվում են մոդուլներ: Այս ֆունկցիաներն օգտագործելու համար մենք պետք է ներմուծենք դրանք պարունակող մոդուլը, ինչն արվում է import-ի միջոցով: Եկեք տեսնենք՝ ինչպես․
import math           # Importing the math module

print(math.pi)        # Accessing the constant pi from the math module
print(math.sqrt(16))  # Accessing the square root function from the math module
Այս ծրագիրը տպելու է pi-ի արժեքը (3.141592653589793) և 16-ի քառակուսի արմատը (4.0):
Մենք կարող ենք նաև մոդուլից import անել հատուկ ատրիբուտներ կամ ֆունկցիաներ՝ օգտագործելով from...import հայտարարությունը.
from math import pi, sqrt  # Importing only pi and sqrt from the math module

print(pi)                  # We can use pi directly without prefixing it with the module name
print(sqrt(16))            # Similarly, we can use sqrt directly
Ծրագրի արդյունքը կլինի նույնը, ինչ նախորդ դեպքում:
Երբեմն մոդուլներն ունեն երկար անուններ, և ամեն անգամ, երբ ցանկանում ենք որևէ ֆունկցիա օգտագործել, ամբողջ անունը մուտքագրելը կարող է ժամանակատար լինել: Սրանից խուսափելու համար մենք կարող ենք օգտագործել as հիմնաբառը մոդուլին այլ անուն (alias) տալու համար:
import math as m   # Importing the math module and renaming it as m

print(m.pi)        # Now we can use the short alias
print(m.sqrt(16))  # Using the sqrt function using the alias
Արդյունքը նույնպես կլինի 3.141592653589793 և 4.0, ինչպես նախկինում:
Այսպիսով, Python-ի մոդուլները նման են գործիքների տուփերի, որոնք պարունակում են նախապես մշակված գործառույթներ և փոփոխականներ, որոնք մենք կարող ենք ներմուծել և օգտագործել մեր ծրագրերում: Մոդուլներն օգնում են կազմակերպել կոդը և մեր աշխատանքն ավելի արդյունավետ դարձնել:
Ինչպես են աշխատում մոդուլները
Երբ ներմուծում ենք անում մոդուլ, Python-ը կատարում է կուլիսային որոշ աշխատանքներ, որոնք կարող են անմիջապես չերևալ: Հակիրճ նկարագրենք, թե ինչ է տեղի ունենում, երբ օգտագործում ենք import հայտարարությունը.
  1. Մոդուլի տեղորոշում Python-ը նախ փնտրում է մոդուլը՝ ստուգելով իր sys.path ցանկում նշված վայրերը: Այս ցանկը ներառում է ընթացիկ գրացուցակը (directory), ներկառուցված Python փաթեթների գրացուցակը և ցանկացած ուղի, որը նշված է PYTHONPATH միջավայրի փոփոխականում: Եթե Python-ը գտնում է մոդուլը, այն անցնում է հաջորդ քայլերին: Եթե ոչ, այն raise է անում ModuleNotFoundError:
  1. Մոդուլի սկզբնավորում Հենց նշում ենք մոդուլի ֆայլը, Python-ը ստեղծում է նոր մոդուլի օբյեկտ (types.ModuleType): Այնուհետև ծրագիրը մոդուլի բովանդակությունը տեղափոխում է նոր մոդուլի օբյեկտի մեջ՝ գործարկելով մոդուլի ֆայլի վերին մակարդակում գտնվող բոլոր կոդերը: Խոսքը վերաբերում է ֆունկցիաների, class-ների, փոփոխականների սահմանումներին և կոդի սկզբնավորման կատարմանը:
  1. Մոդուլի քեշավորում Սկզբնավորումից հետո մոդուլը պահվում է sys.modules-ում (բառարան): Այս քայլը երաշխավորում է, որ երբ նույն մոդուլը նորից ներմուծենք սցենարում (կամ այլ սցենարների միջոցով), Python-ը կարիք չունենա կրկին տեղորոշել և սկզբնավորել մոդուլը։ Փոխարենը, այն կարող է օգտագործել քեշավորված տարբերակը: Այս բառարանի բանալին մոդուլի անվանումն է, իսկ արժեքը՝ մոդուլի օբյեկտը:
  1. Ավելացնել մոդուլը սցենարի namespace-ին Վերջապես, Python-ն ավելացնում է մոդուլի անունը սկրիպտի namespace-ին կամ մոդուլին, որը import է արել այն։ Անունը վերաբերում է մոդուլի օբյեկտին, այնպես որ կարող եք հասանելիություն ստանալ մոդուլի ֆունկցիաներին և փոփոխականներին՝ օգտագործելով կետային նշումը:
Եկեք սա ցույց տանք կոդի օրինակով.
import sys
import math

print(sys.path)       # The path where Python searches for modules
print(sys.modules)    # The cached modules
print(math.sqrt(16))  # Accessing a function from the math module
sys.path-ը տպում է պանակների ցանկ, որի մեջ Python-ը փնտրում է մոդուլները։ sys.modules-ը տպում է բառարան՝ մոդուլների անուններով (բանալիներով) և անուններին համապատասխան մոդուլների օբյեկտներով (արժեքներով)։

Առաջադրանք․ պատահական թվեր

Կրիպտոգրաֆիայի աշխարհում պատահական թվերը չափազանց կարևոր դեր են խաղում: Կրիպտոգրաֆիկ ալգորիթմները հաճախ հիմնվում են պատահական թվերի հաջորդականության ստեղծման վրա՝ տվյալների անվտանգությունն ապահովելու համար:
Այս առաջադրանքում ձեզ հանձնարարված է մոդելավորել պատահական թվերի պարզ գեներատոր, որը մեզ կօգնի ավելի հստակ հասկանալ, թե ինչ է պատահականությունը: Python-ն ունի ներկառուցված random մոդուլ, որն ունի տարբեր ֆունկցիաներ՝ պատահական թվեր ստեղծելու համար: Ձեզանից պահանջվում է օգտագործել այս մոդուլը տրված երկու՝ a և b միջակայքում՝ n պատահական ամբողջ թվերի ցուցակ ստեղծելու համար: Սակայն պատահականությունը չպետք է իսկապես պատահական լինի. փորձի կրկնելիությունն ապահովելու համար մենք պետք է seed-ը ֆիքսենք 42-ի: Դուք կարող եք օգտագործել seed() ֆունկցիան՝ seed-ը շտկելու համար, իսկ randint()-ը՝ պատահական թիվ ստեղծելու համար:
Մուտքի առաջին տողը պարունակում է բացատներով բաժանված երեք ամբողջ թիվ՝ n, a և b: a և b թվերը որոշում են այն միջակայքը (ներառյալ), որից պետք է ընտրվեն պատահական թվերը, իսկ n-ը որոշում է, թե քանի այդպիսի թիվ պետք է գեներացվի:
Ծրագիրը պետք է տպի [a, b] միջակայքում ստեղծված, n բացատով բաժանված պատահական թվեր, որոնց պատահական seed-ը ֆիքսված է՝ 42:
Input
Output
10 1 100
82 15 4 95 36 32 29 18 95 14
5 1 5
1 1 3 2 2
3 10 20
20 11 10
Նշում. քանի որ մենք պատահական seed-ի համար կոնկրետ թիվ ենք սահմանում՝ 42, ելքում հաջորդականությունը պետք է նույնը մնա՝ անկախ նրանից, թե քանի անգամ ենք գործարկում ծրագիրը։ Սա մի առանձնահատկություն է, որը մենք օգտագործում ենք փորձարկման, վրիպազերծման (debugging) և այլ դեպքերում, երբ անհրաժեշտ է ստանալ կանխատեսելի արդյունք:
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue