Файлдарды жазу, оқу және талдау.
Мақсаты: қолданбалы міндеттерді шешуге арналған жиынтықтардың өзара байланысын қалай пайдалану керектігін үйрену.
Қысқаша теориялық мәлімет
Топтамалармен көрсетілген операцияларға қосымша, жиі реляциялық операциялармен айналысуға тура келеді (жиындармен жұмыс істеу контекстінде орындалған).
Теңдік тақырыбына арналған жиындарды қалай салыстыру керек және элементті жиынтықтың бөлігі екендігін қалай білуге болады, біз білеміз. Бірінші жағдайда == оператор пайдалы, ал екінші жағдайда оператор.
A және B екі жиынтығы A (B) деп аталады, егер A элементінің әрбір элементі B жиынына енсе, онда B жиынтығының әрбір элементі А
A жиынтығы A жиынтығының әрбір элементі B жиынтығының элементі болса, B арқылы белгіленсе, A және B B немесе A көптеген B жиынтығы (A белгілері сәйкес келуі мүмкін)
Реляциялық операторлар ретінде стандартты салыстыру операторлары пайдаланылады, ал кейбіреулері үшін қосымша әдістер бар. Негізгі операторлар және олардың тиісті операциялары 1-кестеде келтірілген. A және B арқылы біз қандай операциялар орындалатындығын анықтаймыз.
1-кесте. Топтамаларға қатысты қатынастардың негізгі операциялары
Оператор немесе әдіс
|
Сипаттама
|
<
|
A |
<= немесе
issubset ( )
|
A <= B өрнегінің нәтижесі (немесе өрнектің A. issubset (B)) шын мәнінде A жиынтығының барлық элементтері B жиынтығына (жиынтық A - жиынтығы B жиынтығы) енгізілсе және жиынтықтардың теңдігі рұқсат етіледі. Әйтпесе, өрнектің мәні F a l s e болып табылады
|
>
|
A> B өрнегінің нәтижесі T e e болып табылады, егер B жиынтығының барлық элементтері А жиынына (жиынтықта A жиынтығының жиынтығы) енгізілсе және екі жиын тең емес. Әйтпесе, өрнектің мәні F a 1 s e болып табылады
|
>=
немесе issuperset ( )
|
A = B өрнекінің нәтижесі (немесе өрнек A.issupeset (B)) шын мәнінде B жиынтығының барлық элементтері A жиынына енеді (жиынтықта A жиынтығының жиынтығы) және жиындардың теңдігі рұқсат етіледі. Әйтпесе, өрнек мәні False
|
==
|
A == B өрнегіндегі көлемнің нәтижесі A жиынтығының барлық элементтері B жиынтығына кірсе, онда B жиынтығының барлық элементтері A жиынтығына (жиынтық теңдігі) кіреді. Әйтпесе, өрнек мәні Fa l s e болып табылады
|
isdisjoint ( )
|
A 'өрнекінің нәтижесі. isdisjoint '(B) - бұл мән. A және B жиындарының қиылысуы бос жиын болып табылса (яғни A және B жиындарының ортақ элементтері болмаса). Әйтпесе, өрнек мәні False.
|
in
|
A i n A өрнекінің нәтижесі A элементі A жиынтығына кірсе True, әйтпесе, өрнек мәні Fa 1 s e тең
|
Бос жиын - ешбір элементтері жоқ (әдетте арқылы белгіленетін) жиын.
Айта кету керек, циклдар циклында айнымалы айнымалының мәндерін аудару үшін қолдануға болады. бұл тізімдермен болды.
Есте сақтаудың жалғыз нәрсе - тізімнен өзгеше, жиынтықта элементтердің реті белгіленбеген. Айнымалы айналымның мәні қандай немесе сол иерарацияны қабылдайды, айту өте қиын.
Жиындарды жасау үшін, жиынтық генераторларды пайдалануға болады. Бұл қағида генераторларға тек тіктөртбұрыш емес, ал бұйра жақшалардан тұратын жиынтықтар үшін ғана беріледі.
Иллюстрациялар ретінде мынадай мәселенің бағдарламалық әдістері шешу жинақтарын пайдалану қарастыру: төмендегі шарттарды қанағаттандыратын 1-ден 100 диапазонында қандай сан анықтау қажет:
5-бөліктегі сандар 2 немесе 4-де қалдықтар береді;
• 7-бөлімде сандар 3 қалдықта беріледі;
• қалдықтардан сандарды 3-ке бөлгенде, сіз 1-ден басқа сандарды аласыз.
Бұл қарапайым тапсырма және әр түрлі жолдармен шешілуі мүмкін. жағдай жоғарыда аталған екенін тексеру үшін әрбір нөмірі үшін 1-ден 100 - барлық табиғи сандар арқылы дәйекті цикл - ақыл келеді, ең қарапайым және айқын идея. Бірақ, біз, әрине, мәселенің әдіснамалық жағы сияқты соңғы нәтижеге көп көңіл бөлмейміз. Сондықтан, Python-дағы бұл мәселені шешу үшін, біз Python тілінің мүмкіндіктері мен көптеген теориясын құрастырамыз.
Мәселені шешу алгоритмін түсіну үшін келесі жағдайларды ескеру қажет.
1-ден 100-ге дейінгі табиғи сандар жиынтығы Е арқылы белгіленеді. 5-ке бөлінген кезде, қалған 2-де А1-ді білдіреді. 5-ке бөлінген кезде, қалдық 4 деп көрсетілген сандардың жиынтығы А2-мен белгіленеді. 7 бөлінген саны, жиынтығы B. жәйттерді 3 бөлінген, сандар жиынтығы 100 артық емес сандар туралы айтып отырмыз осы барлық жағдайларда С таңбалау арқылы, 1 қалған береді, 3 қалған береді. Сондықтан осы көптеген көптеген жиынтығы E.
қалдық 2 немесе 4 беруге 5 бөлінген сандар жиыны, Әлбетте А. ретінде белгіленеді, A = A1∪ A2. қалдық 2 немесе 4 беруге 5 бөлінген сандар жиыны, және осындай санының екі жиынтығы А (қалдық 2 немесе 4 5 бөлінген) екі тиесілі тиіс, өйткені, қалдық білдіру анықталады 3 ∩V беруге 7 бөлінеді , ал B жиынтығына (7 бөлімі бойынша 3-ін қалдырады). біз шартты қолдануға болса G бөлінген, тіпті осындай саны 1 қалған берген жоқ, бұл, осы сандардың жиынтығы C (3 бөлінген 1 қалдығына) тиесілі емес екенін білдіреді. Демек, A ∩B жиынтығы көптеген С жиналуын білдіреді. Осылайша, көптеген D = (A ∩B) \ C
Тиісті бағдарлама коды
# Верхняя граница
n= 100
# Множество натуральных чисел
E= { s for s in range ( 1 , n+ 1 ) }
# Множество чисел , которые при делении на 5 дают в остатке 2
A 1 = {s for s in Е if s % 5==2 }
# Множество чисел , которые при делении на 5 дают в остатке 4
A 2 = {s for s in Е if s % 5 == 4 }
# Множество чисел , которые при делении на 5 дают в остатке 2 или 4
A=A1 | A2
# Множество чисел , которые при делении на 7 дают в остатке 3
B= {s for s in Е if s % 7==3 }
# Множество чисел , которые при делении # на 3 дают в остатке 1
C= {s for s in Е if s% 3 = = 1 }
# Множество чисел , которые при делении на 5 дают в остатке 2 или 4 , при делении на 7 дают в остатке 3 , а при делении на 3 не дают в остатке 1
D= ( A & B ) - C
# Отображаем результат
рrint ( " Приведенные ниже числа о т 1 до " , n )
p r i n t ( " 1 ) при деле нии на 5 дают в остатке 2 или 4 ; " )
p r i n t ( " 2 ) при деле нии на 7 дают в остатке 3 ; " )
p r i n t ( " 3 ) при делении на 3 не дают в остатке 1 : " )
p r i n t ( D )
Бұл жағдайда келесі нәтиже аламыз:
Төмендегі сандар 1-ден 1 0 0-ге дейін
5-ке бөлінгенде, 2 немесе 4 қалдықты беріңіз;
7-ге бөлінген кезде қалдықтар 3;
3-ке бөлінгенде, олар 1 қалдықты бермейді:
{ 2 4 , 1 7 , 5 9 , 8 7 }
Сандық ауқымның жоғарғы шегінің мәні n айнымалы мәніне жазылады. Командада 1-ден n-ге дейінгі ауқымда мәндері бар оң бүтін сандар жиынтығы жасалады
E = (1, n + 1) диапазонында s s үшін.
Мұнда жиынтықтың генераторын пайдаланғанымызда: жақшаларда, s үшін s (l, n + l) аралығындағы s s операторлары көптеген элементтердің 1-ден n-ге дейінгі табиғи сериялардың мәндері арқылы өтетін айнымалы s анықтайды.
Set al = l = {s болса, S кезінде 5% == 2} командасымен жасалады. Енді жиынтықтың генераторында айнымалы s көптеген элементтердің мәндерінен шығып кетеді. Элемент S алгебрада 5% == 2 жағдайында сақталады, яғни, егер 5-ке тең бөлісу саны 2-ге тең болса. Ұқсас бұйрықтар да бар
A2 = {s for s in Е if s % 5 = = 4 }
B= {s for s in Е if s % 7 == 3 }
С= {s fоr s in Е if s % 3 == 1 }
басқа жиынтықтар жасалады. 5-ке бөлінген кезде, қалған 2 немесе 4-дегі сандар жиынтығы Al және A2 жиындарын біріктіру арқылы есептеледі - A = Al ∪ A2 пәрменін қолданып есептеледі. Ақырында, D = (A & B) - C пәрменін қолданып, қажетті нәтижені табамыз.
Сіз «классикалық» тәсіл қолдансаңыз болады.
Мысал 2. Біз бірдей мәселені шешеміз.
# Верхняя граница
n= 100
# Пустое множество
D= set()
# Бөлуге 5, 2 немесе 4 кірістілік бөлінген кезде, олардың саны 3-ке 3-ке бөлінеді, ал 3-ке бөлінген кезде олар қашықтықта берілмейді
For s in range ( 1 , n + 1 ) :
i f s % 5==2 or s % 5 = = 4 :
if s % 7 == 3 :
if s % 3 ! = 1 :
D .add ( s )
# Отображаем резул ьтат
р r i n t ( " Приведенные ниже числа о т 1 до " , n )
p r i n t ( " 1 ) при делении на 5 дают в о с т а т ке 2 или 4 ; " )
p r i n t ( " 2 ) при делении на 7 дают в о с т а тке 3 ; " )
p r i n t ( " 3 ) при делении на 3 не дают в ост атке 1 : " )
p r i n t ( D )
Осы тұрғыда, біз бірінші бос жиынын әмір, содан кейін цикл мәлімдеме мен кірістірілген шартты есептілігін тобын пайдалану) D = жиынтығы (жасау жаңа элементтер тізіміне қосу - әрине, бұл элементтері барлық критерийлерге (шартты есептілігінде шарттары) қанағаттандыратын болса.
Элементті жиынға қосу үшін add () әдісі қолданылады. Python түріндегі s e t (set) түріне қосымша frozenset (өзгермейтін жиын) түрі бар. Өзгеріссіз жиынтығы мен кәдімгі жиынтықтың арасындағы негізгі айырмашылық - бұл өзгермейтін жиынтығы, оңай деп болжауға болатындықтан, өзгерту мүмкін емес. Сіз өзгермейтін жиынтығын frozenset () функциясын пайдаланып жасай аласыз, мысалы, тізім немесе мәтін жолы. Кәдімгі жиынтықтарға қолданылатын көптеген әдістер өзгермейтін жиынтықтарға қолданылуы мүмкін - сөйлеу, әрине, бастапқы жиынның құрылымын өзгертпейтін әдістер туралы.
Достарыңызбен бөлісу: |