Stemapproach
  • Оқытудағы STEM-тәсіл
  • Python тілінде программалау негіздері
  • Компьютерлік графика және 3D модельдеу
  • Home
  • Python тілінде программалау негіздері
  • СӘЙКЕСТЕНДІРУ ОПЕРАТОРЫ: PATTERN MATCHING
  • АЛҒАШҚЫ ПРОГРАММА
  • АЙНЫМАЛЫЛАР ЖӘНЕ МӘЛІМЕТТЕР ТҮРЛЕРІ
  • ЕНГІЗУ ЖӘНЕ ШЫҒАРУ ФУНКЦИЯЛАРЫ
  • АРИФМЕТИКАЛЫҚ АМАЛДАР
  • ШАРТТЫ ОПЕРАТОРЛАР
  • ЦИКЛДЫҚ ОПЕРАТОРЛАР: FOR ЖӘНЕ WHILE
  • ФУНКЦИЯЛАР МЕН ПАРАМЕТРЛЕР
  • ЖОЛДАР
  • ТІЗІМДЕР
  • КОРТЕЖ
  • СӨЗДІК
  • ЖИЫН
  • ФАЙЛДАРМЕН ЖҰМЫС
  • СӘЙКЕСТЕНДІРУ ОПЕРАТОРЫ: PATTERN MATCHING
  • МОДУЛЬДЕР

СӘЙКЕСТЕНДІРУ ОПЕРАТОРЫ: PATTERN MATCHING

3.10 нұсқасынан бастап Python тілінде pattern matching (шаблондарды сәйкестендіру) сияқты функционалдылық мүмкіндік пайда болды. Pattern matching өрнектің кейбір үлгіге сәйкес келуіне мүмкіндік беретін match дизайнын қолдануды білдіреді.

Егер өрнек үлгіге сәйкес келсе, онда белгілі бір әрекеттер орындалады. Бұл мағынада match конструкциясы кейбір шарттарға байланысты белгілі бір әрекеттерді орындайтын if/else/elif конструкциясына ұқсас. Дегенмен, match функционалдығы әлдеқайда кең — ол сонымен қатар құрама түрлерден деректерді алуға және нысандардың әртүрлі бөліктеріне әрекеттерді қолдануға мүмкіндік береді.

Match дизайны келесі ресми анықтамаға ие:

match өрнек:

    case шаблон_1:

        әрекет_1

    case шаблон_2:

        әрекет_2

    …………….

    case шаблон_N:

        әрекет_N

    case _:

        әдепкі_әрекет

Match кілт сөзінен кейін салыстырылатын өрнек келеді. Содан кейін қос нүктеден кейін келесі жолдарда case өрнектері орналасады. Әрбір case өрнегінен кейін match өрнегі салыстырылатын шаблон көрсетіледі. Шаблоннан кейін қос нүкте арқылы case блогының орындалатын әрекеттер жиынтығы көрсетіледі.

Match конструкциясы өрнекті case блоктарының шаблондарымен дәйекті түрде салыстырады. Егер кейс блогынан шаблон табылса, матчтың өрнегіне сәйкес келеді, содан кейін осы кейс блогынан нұсқаулар орындалады.

Өрнектерді салыстыру үшін үлгілер/шаблондар ретінде примитивті типтегі деректерді де, элементтер тізбегін және класс объектілерін де қолдануға болады.

Алдымен, шаблон ретінде примитивті типтегі литералдар қолданылатын жағдайды қарастырайық. Мысалы, программалау тіліне байланысты сәлемдесу хабарламасын шығарайық.

Case блоктарында match конструкциясының басынан шегіністер бар екенін ескеріңіз. Әрбір case блогының нұсқауларында осы case блогының басынан шегіністер бар. Бірақ егер case блогында бір нұсқаулық болса, оны case операторымен бір жолға қоюға болады:

def print_hello(language):

    match language:

        case «kazakh»:

            print(«Салем»)

case «russian»:

            print(«Привет»)

        case «english»:

            print(«Hello»)

print_hello(«kazakh»)     # Салем

print_hello(«russian»)    # Привет

print_hello(«english»)    # Hello

Сонымен қатар, егер match өрнегі case шаблондарының ешқайсысына сәйкес келмесе, онда сәйкесінше бұл case блоктарының ешқайсысы орындалмайды.

Мұнда print_hello функциясы таңдалған тіл берілетін тіл параметрін қабылдайды. Функцияның өзінде match конструкциясы тіл айнымалысының мәнін салыстырады. Case блоктары language айнымалысы сәйкес келетін жол үлгілерін анықтайды.

Егер мәндер сәйкес келмеген жағдайда (егер case шаблондарының ешқайсысы match өрнегіне сәйкес келмесе) _ (сызықша) шаблоны қолданылады:

def print_hello(language):

    match language:

        case «kazakh»:

            print(«Салем»)

        case «english»:

            print(«Hello»)

               case _:

            print(«Анықталмады»)

 print_hello(«kazakh»)    # Салем

 print_hello(«spanish»)  # Анықталмады

Сонымен қатар, бірден бірнеше мәндермен салыстыруға мүмкіндік беретін case блогын анықтауға болады. Бұл жағдайда өрнектерді басқа типтегі мәліметтермен салыстыруға болады. Мысалы:

def operation(x, y,z):

    match code:

        case 1:

            return x + y

        case 2:

            return x — y

        case 3:

            return x * y

        case _:

            return 0

print(operation(3, 2, 4))     # 5

print(operation(3, 2, 4))     # 1

print(operation(3, 2, 4))     # 6

print(operation(3, 2, 4))     # 0

Кортеждердегі pattern matching

Python-да pattern matching-те шаблондар ретінде кортеждер қолданылуы мүмкін. Мысалы:

def print_data(user):

    match user:

        case («Timur», 15):

            print(«default user»)

        case («Timur», age):

            print(f»Age: {age}»)

        case (name, 24):

            print(f»Name: {name}»)

        case (name, age):

            print(f»Name: {name}  Age: {age}»)

print_data((«Timur», 15)) # default user

print_data((«Timur», 15)) # Age: 15

print_data((«Almas», 24)) # Name: Sam

print_data((«Madina», 25))    # Name: Madina  Age: 35

print_data((«Timur», 33, «STEM»))  # ешбір шаблонға сәйкес келмейді

Бұл жағдайда функция екі элементтен тұратын кортежді білдіретін user параметрін қабылдайды. Ал match дизайны бұл кортежді бірқатар үлгілермен салыстырады.

Элементтерді өткізіп жіберу

Егер кортеждің қандай да бір элементі біз үшін маңызды болмаса, онда шаблонда нақты мәннің немесе айнымалының орнына _ символын көрсетуге болады:

def print_data(user):

    match user:

        case («Timur», 15):

            print(«default user»)

        case (name, _):   # екінші элемент маңызды емес

            print(f»Name: {name}»)

print_data((«Timur», 15)) # default user

print_data((«Almas», 24)) # Name: Almas

Белгісіз мөлшердегі элементтері бар кортеж

Егер өрнекті ұзындығы белгісіз кортежбен салыстыру қажет болса, онда кортеждің қалған барлық мәндерін * (жұлдызша) символы арқылы анықтауға болады:

def print_data(user):

    match user:

        case («Timur», 37, *rest):

            print(f»Rest: {rest}»)

        case (name, age, *rest):

            print(f»{name} ({age}): {rest}»)

print_data((«Timur», 37))              # Rest: []

print_data((«Timur», 37, «Google»))    # Rest: [«Google»]

print_data((«Madina», 41, «Microsoft», «english»)) # Bob (41): [«Microsoft», «english»]

Жоғарыдағы мысалда барлық басқа элементтерге сәйкес келетін *rest параметрі қолданылады. Яғни, жоғарыдағы мысалда («Timur», 37, *rest) және (name, age, *rest) үлгілері екі немесе одан да көп элементтері бар кез келген кортежге сәйкес келеді. Үшіншіден бастап барлық элементтер мәндер массивін білдіретін rest параметріне орналастырылады.

Массивтердегі pattern matching

Шаблон ретінде массивтер де қолданыла алады. Мұндай шаблондар нақты мәндерді, массив элементтеріне тағайындалатын айнымалыларды немесе маңызды емес элементтер үшін _ символын қамтуы мүмкін:

def print_people(people):

    match people:

        case [«Timur», «Almas», «Madina»]:

            print(«default people»)

        case [«Timur», second, _]:

            print(f»Second Person: {second}»)

        case [first, second, third]:

            print(f»{first}, {second}, {third}»)

print_people([«Timur», «Almas», «Madina»])     # default people

print_people([«Timur», «Sabina», «Madina»])    # Second Person: Sabina

print_people([«Aruna», «Bolat», «Aizhan»])          # Aruna, Bolat, Aizhan

print_people([«Timur», «Aizhan»])              # ешқандай шаблонға сәйкес келмейді

Бұл жағдайда print_people функциясы үш элементтен тұратын массивті қабылдайды. Бірінші шаблон массив элементтерінің белгілі бір мәндері бар екенін көрсетеді:

case [«Timur», «Almas», «Madina»]:

    print(«default people»)

Бұл жағдайда массивтің бірінші элементі «Timur» жолын, екіншісі «Almas» жолын және үшіншісі «Madina» жолын көрсетуі керек.

Екінші шаблон массивтің бірінші элементі «Timur» жолына тең болуы керек деп болжайды, қалған екі элементтің ерікті мәндері болуы мүмкін:

case [«Timur», second, _]:

    print(f»Second Person: {second}»)

Бұл жағдайда екінші элементтің мәні екінші айнымалыға беріледі, ал үшінші элементтің мәні маңызды емес, сондықтан оның орнына сызықша қолданылады.

Үшінші шаблон үш элементтің кез келген массивіне сәйкес келеді. Бұл жағдайда оның элементтері бірінші, екінші және үшінші айнымалыларға беріледі:

case [first, second, third]:

    print(f»{first}, {second}, {third}»)

Тапсырмалар:

  1. Жануардың қай жерде тұратынын қалай анықтауға болады?

Шарт: Қолданушыға берілген жануардың тізімінен олардың тіршілік ету ортасын анықтайтын программа жасаңыз.

STEM: биология, зоология

Енгізу мәліметтеріШығару мәліметтері
Арыстан, қасқыр  Жер үсті ортасы  
Бүркіт, қарға  Ауа ортасы  
Акула, дельфин  Су ортасы  
 Белгісіз орта
  • Елдің атауы бойынша климаттық аймақты қалай білуге болады?

  Шарт: Қолданушыға берілген елдердің тізімінен олардың климаттық аймағының қай топқа жататының анықтайтын программа жазыңыз.

  STEM: география, климатология

Енгізу мәліметтеріШығару мәліметтері
Китай ТүркияСубэкваторлық Континентальный
  • Жыл бойынша ғасырды қалай анықтауға болады?

  Шарт: Қолданушыға берілген жылдарға сәйкес келетін ғасырды анықтайтын функцияның программасын жазыңыз.

  STEM: тарих, математика

Енгізу мәліметтеріШығару мәліметтері
1568  XVI  
1765  XVIII  
2023XXI
  • Ақшаны толықтыру немесе есептен шығару екенін қалай анықтауға болады?

  Шарт: Қолданушы енгізген соммамен жасалған банктік операцияға сәйкес банктік қызмет түрін анықтайтын функция жазыңыз.

STEM: экономика, математика

Енгізу мәліметтеріШығару мәліметтері
1000 -500Ақшаны толықтыру Есептен шығару
  • Аспан денелерінің түрлеріне қарай қалай жіктеуге болады?

  Шарт: Аспан денесінің атауы бойынша оның жұлдыз, планета немесе жер серігі екенін анықтайтын программа жасаңыз.

STEM: физика, астрономия

Енгізу мәліметтеріШығару мәліметтері
Юпитер  Планета  
Жеті қарақшыЖұлдыз

 🎓 STEM тұрғысынан бұл жоба не үйретеді?

STEM құрамдасыҚолдану мысалы
S – ScienceБиология, зоология, география, астрономия салалары бойынша объектіні сәйкестендіру арқылы ғылыми деректерді талдау.
T – TechnologyPython 3.10 тілінде енгізілген match-case синтаксисін қолдану арқылы заманауи бағдарламалау тәсілдерін меңгеру.
E – EngineeringДеректер құрылымын (tuple, list) талдап, күрделі логикалық шарттармен жұмыс істей отырып, программаны оңтайлы жобалау.
M – MathЖыл мен ғасырға байланысты есептеулер жасау, сан мәндерін match арқылы сәйкестендіру арқылы математикалық ойлау мен логикалық шешім қабылдау.

Бақылау сұрақтары:

  1. Pattern matching негізгі қызметі қандай?
  2. Pattern matching (шаблон) ретінде қолданылатын Python-ның негізгі элементтері қандай?
  3. Match конструкциясының орындалуы?
  4. Match өрнегі case шаблондарының ешқайсысына сәйкес келмеген жағда        йда қандай әрекет орындалады?


No comments yet! You be the first to comment.

Жауап қалдырыңыз Отменить ответ

Сіздің электрондық пошта мекенжайыңыз жарияланбайды. Обязательные поля помечены *

Іздеу

Жаңа пікірлер

  • admin к записи STEM-білім берудің тарихы мен дамуы
  • Mr WordPress к записи STEM-білім берудің тарихы мен дамуы
Stemapproach 2025 жыл