Python программалау тілінде алгоритмдерді программалау
Спецификация бойынша не тексеріледі:
Бір минутта мәні
Бұл — ҰБТ информатикасының ең басты тақырыбы: әр нұсқада дерлік «программа не шығарады», «цикл неше рет орындалады», «айнымалы қандай мән қабылдайды» деген тапсырмалар болады. Тақырып алгоритм ұғымынан, оның қасиеттері мен блок-сызбалардан басталып, Python 3 тіліне ауысады: айнымалылар мен деректер типтері, енгізу және шығару, //, % және ** амалдары бар арифметика, if/elif/else шарттары, range арқылы while және for циклдері, break және continue. Жеке бөлім — типтік алгоритмдер: санауыш, жинақтауыш, ең үлкен және ең кіші мәнді табу, санды цифрларға жіктеу. Тақырыпты тізімдер (бір өлшемді массивтер) және екі өлшемді тізімдер (матрицалар) аяқтайды. Басты дағды — мұқият трассировка: программаны жол-жолымен «ойша» орындап, айнымалылардың мәндерін кестеге жазу.Қарапайым тілмен
Программа — өте тілалғыш, бірақ мүлде тапқыр емес аспазға арналған рецепт: ол жазылғанды ғана, қадам бойынша қатаң орындайды және ештеңені өзі ойлап таппайды.
Айнымалы — жазуы бар қорап
x = 5 — x деп жазылған қорапқа 5 санын салдық. x = x + 1 — 5-ті алып, 1 қосып, қайта 6-ны салдық. Ескі мән жойылады.
Шарт — жолдағы айрық
if «иә ме, жоқ па?» деп сұрайды. Иә болса — бір тармақпен, жоқ болса — else тармағымен жүреміз. Тек бір тармақ қана орындалады.
Цикл — «N рет қайтала»
for i in range(5) — 5 рет қайтала, i мәндері 0, 1, 2, 3, 4. while — «шарт ақиқат болғанша қайтала», «қант еріп кеткенше араластыр» сияқты.
Тізім — нөмірленген шкафтар қатары
a = [7, 2, 9] тізімінде шкафтар нөлден бастап нөмірленеді: a[0] = 7, a[1] = 2, a[2] = 9. Соңынан нөмірлеу: a[-1] = 9.
Басты формулалар
range(a, b, k) қанша сан беретіні (әйтпесе 0). Мысалы, range(3, 20, 4): сан (3, 7, 11, 15, 19). үшін: болғанда .Ұғымдар мен терминдер
- Алгоритм
- Орындаушыға берілетін, бастапқы деректерден нәтижеге жеткізетін нақты командалардың шектеулі тізбегі.
- Блок-сызба
- Процесті, жүйені немесе алгоритмді графикалық түрде бейнелейтін арнайы фигуралардың жиынтығы (сопақша — басы/соңы, параллелограмм — енгізу/шығару, тіктөртбұрыш — әрекет, ромб — шарт).
- Айнымалы
- Екі атрибуты бар жад ұяшығы: аты және мәні.
- Деректер типі
- Мүмкін мәндер мен оларға қолданылатын амалдар жиыны: int — бүтін сандар, float — нақты сандар, str — жолдар, bool — логикалық (True/False).
- Шартты оператор
- Шарттарға байланысты бірнеше әрекеттер тізбегінен бір әрекеттің орындалуын қамтамасыз ететін программаның маңызды құрылымы (Python-да: if, elif, else).
- Цикл
- Шарт ақиқат болған жағдайда қандай да бір кодты бірнеше рет орындауға арналған программа үзіндісі.
- while (әзірше)
- Алғышартты цикл операторы: шарт әр қайталау алдында тексеріледі, ол ақиқат болғанша цикл денесі орындалады.
- Массив (тізім)
- Бір атаумен біріктірілген, бір типтегі деректерден тұратын айнымалылардың жиынтығы; элементке индекс арқылы қол жеткізіледі. Python-да массив list тізімімен жүзеге асырылады.
- Индекс
- Тізімдегі немесе жолдағы элементтің нөмірі; Python-да нөмірлеу 0-ден басталады, теріс индекстер соңынан саналады.
- Трассировка
- Алгоритмді қолмен қадам бойынша орындап, әр командадан кейін барлық айнымалылардың мәндерін кестеге жазу.
Тақырыпты талдау
Алгоритм, оның қасиеттері және блок-сызбалар 5–8 сынып
Алгоритм — орындалуы нәтижеге жеткізетін нақты командалардың шектеулі тізбегі. Орындаушы (адам, робот, компьютер) командаларды олардың мағынасына үңілмей, формальды түрде орындайды.
Алгоритм қасиеттері (сәйкестендіру тапсырмаларында жиі сұралады): дискреттілік — алгоритм жеке қадамдарға бөлінген; түсініктілік — командалар орындаушының командалар жүйесіне кіреді; анықтылық (детерминділік) — әр команда бірмәнді, бірдей деректерде нәтиже әрқашан бірдей; нәтижелілік — алгоритм нәтижеге жеткізеді; шектілік — нәтиже қадамдардың шектеулі санында алынады; көпшілікке арналғандық (жалпылық) — алгоритм әртүрлі бастапқы деректері бар есептердің тұтас класына жарайды.
Алгоритмді жазу тәсілдері: сөздік (табиғи тілде), графиктік (блок-сызба), псевдокод, программалау тілінде (программа).
Блок-сызба фигуралары: сопақша (бұрыштары дөңгеленген тіктөртбұрыш) — «Басы» және «Соңы»; параллелограмм — деректерді енгізу және шығару; тіктөртбұрыш — әрекет (есептеу, меншіктеу); ромб — шартты тексеру, одан «иә» және «жоқ» деген екі бағыттауыш шығады; алтыбұрыш — параметрлі цикл тақырыбы (for циклі); бүйір сызықтары қос тіктөртбұрыш — қосалқы программаны шақыру.
Негізгі алгоритмдік құрылымдар: сызықтық (тізбектей орындау) — командалар бірінен соң бірі орындалады; тармақталу — шарт бойынша жолдардың бірін таңдау (блок-сызбада ромб, жолдар кейін қайта қосылады); цикл — әрекеттерді қайталау (блок-сызбада бағыттауыш шартқа қайта оралады). Кез келген алгоритм осы үш құрылымнан құралады.
Айнымалылар, деректер типтері, енгізу және шығару 6 сынып
Айнымалы меншіктеу арқылы құрылады: x = 5. = белгісі теңдікті емес, «оң жақтағы мәнді сол жақтағы айнымалыға салу» дегенді білдіреді. x = x + 1 жазбасы x-ті 1-ге арттырады (қысқаша: x += 1). Аттары: латын әріптері, цифрлар және _, цифрдан басталмайды, регистр маңызды (A мен a — әртүрлі айнымалылар), қызметтік сөздерді (if, for, while...) қолдануға болмайды.
Негізгі типтер: int — бүтін сандар (5, -12, 0), float — нақты сандар (3.14, 2.0, 1e3), str — тырнақшадағы жолдар ('hi', "5"), bool — логикалық True және False. Типті білу: type(x). Python типті мәніне қарап өзі анықтайды (динамикалық типтеу).
Көптік меншіктеу: a, b = 3, 7. Үшінші айнымалысыз мәндерді алмастыру: a, b = b, a. Үшінші айнымалы арқылы классикалық тәсіл: t = a; a = b; b = t.
Енгізу: input() әрқашан жол қайтарады. Сондықтан сандар үшін: n = int(input()), x = float(input()). Бір жолдағы бірнеше сан: a, b = map(int, input().split()).
Шығару: print(a, b, c) мәндерді бос орын арқылы басып шығарып, жаңа жолға көшеді. sep параметрі мәндер арасындағы ажыратқышты, end — соңында не басылатынын береді (әдепкі бойынша жаңа жол '\n').
print(1, 2, 3, sep='-') # 1-2-3
print('a', end='')
print('b') # ab
print(5, 6, sep='', end='!') # 56!Аргументсіз print() бос жол шығарады. f-жолдар: print(f'x = {x}') айнымалының мәнін мәтінге қояды.
Арифметикалық амалдар, басымдық және типті түрлендіру 6–7 сынып
Амалдар: +, -, *; / — кәдімгі бөлу, нәтижесі әрқашан float (6 / 2 = 3.0); // — бүтін бөлу (төменге, кіші санға қарай дөңгелектеу); % — бөлгендегі қалдық; ** — дәрежеге шығару.
Мысалдар: 17 // 5 = 3, 17 % 5 = 2, 2 ** 10 = 1024. Теріс сандарда // төменге дөңгелектейді: -17 // 5 = -4 (-3 емес!), -17 % 5 = 3 (қалдық бөлгіштің таңбасымен). 7.5 // 2 = 3.0 — операндтың бірі float болса, нәтиже де float.
Басымдық (жоғарыдан төменге): жақшалар () → ** → унарлы минус -x → *, /, //, % → +, - → салыстырулар <, >, ==, !=, <=, >= → not → and → or. Басымдығы бірдей амалдар солдан оңға қарай орындалады, тек ** оңнан солға қарай: 2 ** 3 ** 2 = 2 ** 9 = 512. Сондай-ақ -2 ** 2 = -4, себебі дәреже минустан бұрын орындалады.
Есептеу мысалы: 2 + 3 * 4 ** 2 // 5 → алдымен 4 ** 2 = 16, содан кейін солдан оңға 3 * 16 = 48, 48 // 5 = 9, соңында 2 + 9 = 11.
Типті түрлендіру: int('12') = 12; int(3.99) = 3 және int(-3.99) = -3 — бөлшек бөлігі жай ғана алынып тасталады (нөлге қарай); float('2.5') = 2.5; str(7) = '7'; round(3.5) = 4, бірақ round(2.5) = 2 (Python «жартыларды» жұп санға қарай дөңгелектейді). bool(0), bool(''), bool([]) — False, кез келген нөлден өзге сан және бос емес жол (тіпті '0') — True.
Жолдарды да «қосуға» және «көбейтуге» болады: '2' + '3' = '23' (біріктіру), 'ab' * 3 = 'ababab'. Ал '2' + 3 — TypeError қатесі: жол мен санды қосуға болмайды.
Пайдалы кірістірілген функциялар: abs(x) — модуль, max(a, b, c) және min(...), round(x, 2) — 2 таңбаға дейін дөңгелектеу, len(s) — ұзындық. math модулі: import math, math.sqrt(16) = 4.0, math.ceil(2.1) = 3, math.floor(2.9) = 2.
Тармақталу: if, elif, else; логикалық амалдар 7 сынып
Құрылымы: if шарт: кейін қос нүкте қойылады, дене 4 бос орын шегініспен жазылады. elif (әйтпесе егер) тармағы алдыңғы шарттардың бәрі жалған болғанда ғана тексеріледі; else барлығы жалған болса орындалады. Бүкіл тізбектен дәл бір тармақ орындалады (else болмаса, бірде-бірі орындалмауы мүмкін).
if score >= 90:
grade = 5
elif score >= 75:
grade = 4
elif score >= 50:
grade = 3
else:
grade = 2elif реті маңызды: score = 95 болғанда бірінші тармақ орындалады, дегенмен 95 >= 75 те ақиқат. Егер тексерулер кішіден үлкенге қарай жүрсе (алдымен >= 50), барлық жақсы бағалар қате түрде «3» болып кетер еді.
Салыстыру амалдары: == (тең; жалғыз = — меншіктеу!), != (тең емес), <, >, <=, >=. Python тізбектерге рұқсат береді: 0 < x < 10 дегеніміз 0 < x and x < 10.
Логикалық амалдар: and (ЖӘНЕ) — екі шарт та ақиқат болғанда ғана ақиқат; or (НЕМЕСЕ) — кем дегенде біреуі ақиқат болса ақиқат; not (ЕМЕС) — мәнді қарама-қарсыға ауыстырады. Басымдық: not, содан кейін and, содан кейін or. Мысал: x % 2 == 0 and x > 10 — x жұп және 10-нан үлкен. Бөлінгіштікті тексеру: n % k == 0.
Кірістірілген шарттар — if ішіндегі if; тармаққа тиесілілік шегініспен анықталады. Құрама шарттар көбіне кірістіруді алмастырады: екі кірістірілген if орнына if a > b and a > c:.
Тернарлы жазба: m = a if a > b else b — бір жолдағы қысқа тармақталу.
while циклі және сан цифрларын өңдеу 8 сынып
while шарт: — алғышартты цикл: шарт әр итерация алдында тексеріледі; ол бірден жалған болса, дене бірде-бір рет орындалмайды. Дененің ішінде шартты өзгертетін бір нәрсе міндетті түрде болуы керек, әйтпесе цикл шексіз болады.
n = 4728
s = 0
while n > 0:
s += n % 10 # соңғы цифрды қостық
n //= 10 # оны алып тастадық
print(s) # 21Цифрларға арналған стандарт есептер: цифрлар саны (әр итерацияда k += 1), цифрлар қосындысы (s += n % 10), цифрлар көбейтіндісі (p *= n % 10, бастапқы p = 1), ең үлкен цифр, кері сан (r = r * 10 + n % 10), жұп цифрлар саны (if n % 10 % 2 == 0: k += 1).
Маңызды: цикл n-ді «бұзады» (соңында n = 0), сондықтан бастапқы сан кейін керек болса, көшірмесін сақтаңыз: m = n. n = 0 үшін while n > 0 циклі бірде-бір рет орындалмайды — цифрлар саны 1 емес, 0 болып шығады.
while қайталау саны алдын ала белгісіз болғанда ыңғайлы: «қосынды 100-ден кіші болғанша», «0 енгізілгенше», Евклид алгоритмі: while a != b: if a > b: a -= b else: b -= a (немесе тезірек while b: a, b = b, a % b), ЕҮОБ шығады.
Санды екілік жүйеге аудару да while арқылы жасалады: while n > 0: s = str(n % 2) + s; n //= 2.
for циклі, range функциясы, break, continue, else 8 сынып
for i in range(...) — параметрлі цикл: i айнымалысы ауқымдағы мәндерді кезекпен қабылдайды. range түрлері: range(n) — 0, 1, ..., n-1 (n сан); range(a, b) — a-дан b-1-ге дейін; range(a, b, k) — a-дан k қадаммен, b-ға жетпей.
Оң шекара ешқашан кірмейді: range(1, 5) → 1, 2, 3, 4. Теріс қадам — кері санау: range(10, 0, -3) → 10, 7, 4, 1. Бос ауқымдар: range(5, 1) (қадам +1, ал төмен жүру керек) және range(1, 5, -1) — цикл бірде-бір рет орындалмайды.
for тек сандарды ғана емес, жолдың немесе тізімнің элементтерін де аралайды: for ch in 'abc': — ch = 'a', 'b', 'c'; for x in [3, 8, 1]: — x = 3, 8, 1. Цикл аяқталғаннан кейін i айнымалысы соңғы мәнді сақтайды (range(5) үшін ол 4).
break — бүкіл циклді бірден тоқтатады. continue — ағымдағы итерацияның қалған бөлігін өткізіп жіберіп, келесісіне көшеді. Екеуі де өздері тұрған ең ішкі циклге ғана әсер етеді.
Циклдің else бөлігі цикл break-сіз, «табиғи» аяқталса орындалады. Классика — жай санға тексеру:
n = 29
for d in range(2, n):
if n % d == 0:
print('құрама')
break
else:
print('жай')break арқылы шығатын шексіз цикл: while True: ... if шарт: break — тексеру дененің ортасында керек болғанда ыңғайлы.
Типтік алгоритмдер, кірістірілген циклдер және трассировка 8–9 сынып
Санауыш: цикл алдында k = 0, ішінде if шарт: k += 1. Қосындылағыш (жинақтауыш): s = 0, ішінде s += x. Көбейтінді: бастапқы мән p = 1 (0 емес, әйтпесе әрқашан 0 болады!). Факториал: f = 1; for i in range(1, n + 1): f *= i.
Ең үлкенін іздеу: бастапқы мән ретінде бірінші элементті аламыз mx = a[0] (0 емес — барлық сандар теріс болуы мүмкін), содан кейін if x > mx: mx = x. Ең кішісі үшін — < белгісі. Ең үлкенінің индексі: imax сақтаймыз, a[i] > a[imax] салыстырамыз. Қатаң > бірінші максимумды, қатаң емес >= соңғысын береді.
Кірістірілген циклдер: ішкі цикл сыртқы циклдің әр итерациясында толық өтеді. for i in range(3): for j in range(4): — дене 3 · 4 = 12 рет орындалады. Ішкі цикл сыртқысына тәуелді болса (for j in range(i, 4)), жолдар бойынша санаңыз: i = 0, 1, 2, 3 болғанда 4 + 3 + 2 + 1 = 10 қайталау.
for i in range(1, 4):
for j in range(1, 4):
print(i * j, end=' ')
print() # кестенің әр жолынан кейін жаңа жолТрассировка — «программа не шығарады» тапсырмаларының басты құралы. Кесте саламыз: бағандар — айнымалылар және тексерілетін шарт, жолдар — қадамдар. Әр командадан кейін жаңа мәндерді жазамыз. Ереже: тек мән меншіктелетін айнымалыны өзгертеміз; цикл шартын денеге кірмес бұрын тексереміз.
Трассировка мысалы s = 0; for i in range(1, 6, 2): s += i * i: i = 1 → s = 1; i = 3 → s = 10; i = 5 → s = 35. Жауабы 35.
Қателер синтаксистік (қос нүкте ұмытылған, шегініс дұрыс емес — программа іске қосылмайды), орындау қателері (нөлге бөлу ZeroDivisionError, тізім шегінен шығу IndexError, тип дұрыс емес TypeError) және логикалық (программа жұмыс істейді, бірақ жауабы дұрыс емес — оларды трассировка мен тестілеу арқылы іздейді) болады.
Тізімдер (бір өлшемді массивтер) және екі өлшемді тізімдер (матрицалар) 9 сынып
Тізім — элементтердің реттелген жиыны: a = [5, 3, 8, 1]. Индекстер нөлден: a[0] = 5, a[3] = 1, a[-1] = 1 (соңғысы), a[-2] = 8. len(a) = 4, рұқсат етілген индекстер 0..3; a[4]-ке жүгіну — IndexError қатесі. Элементті өзгертуге болады: a[1] = 10.
Қиықтар a[start:stop:step] — range сияқты: stop кірмейді. a[1:3] → индекстері 1 және 2 элементтер; a[:2] — алғашқы екеуі; a[2:] — 2-индекстен соңына дейін; a[::2] — біреуін аттап; a[::-1] — кері тізім. Қиық жаңа тізім құрады және ешқашан IndexError тудырмайды.
Әдістер: a.append(x) — соңына қосу; a.insert(i, x) — x-ті i орнына қою (қалғандары оңға жылжиды); a.pop() — соңғысын жойып, қайтару, a.pop(i) — i индексті элементті; a.remove(x) — x мәнінің бірінші кездесуін жою; a.index(x) — бірінші x-тің индексі; a.count(x) — x неше рет кездеседі; a.sort() — өсу бойынша сұрыптау (reverse=True — кему бойынша), a.reverse() — кері айналдыру. Функциялар: len(a), sum(a), max(a), min(a), sorted(a) (жаңа сұрыпталған тізім), x in a тексеруі.
Құру: [0] * 5 → [0, 0, 0, 0, 0]; list(range(1, 6)) → [1, 2, 3, 4, 5]; енгізу: a = list(map(int, input().split())). Тізім генераторы (list comprehension): [i * i for i in range(1, 6)] → [1, 4, 9, 16, 25]; шартпен: [x for x in a if x > 0] — тек оң сандар.
for i in range(len(a)): индекстер бойынша аралау орын маңызды болғанда немесе элементтерді өзгерту керек болғанда қажет; for x in a: мәндер бойынша аралау — тек мәндер керек болғанда. Екі элементті алмастыру: a[i], a[j] = a[j], a[i].
Екі өлшемді тізім — тізімдердің тізімі: m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]. m[i][j] — i жолы мен j бағанындағы элемент: m[1][2] = 6. Жолдар саны len(m), бағандар саны len(m[0]). Аралау — i және j бойынша екі кірістірілген цикл.
for i in range(len(m)):
for j in range(len(m[0])):
print(m[i][j], end=' ')
print()n×n квадрат матрицада: бас диагональ — m[i][i] элементтері (i == j), қосалқы диагональ — m[i][n-1-i] (i + j == n - 1); бас диагональдан жоғары i < j, төмен — i > j. i жолының қосындысы: sum(m[i]); j бағанының қосындысы: sum(m[i][j] for i in range(n)). Нөлдер матрицасын дұрыс құру: [[0] * m for i in range(n)]; [[0] * m] * n жазбасы бір жолға n сілтеме жасайды, сонда бір элементті өзгерту бүкіл бағанды өзгертеді.
Шешімі бар есеп мысалдары
print(2 + 3 * 4 ** 2 // 5 - 7 % 3)
print(-17 // 5, -17 % 5)- Бірінші жол, басымдық бойынша: алдымен дәреже
4 ** 2= 16. - Содан кейін
*,//,%солдан оңға:3 * 16= 48,48 // 5= 9 (9 · 5 = 45, 3 қалдығын тастаймыз),7 % 3= 1. - Соңында қосу мен азайту: 2 + 9 − 1 = 10.
- Екінші жол: −17 / 5 = −3,4;
//төменге, кіші санға қарай, яғни −4-ке дөңгелектейді. - Қалдық: −17 − 5 · (−4) = −17 + 20 = 3. Тексеру: 5 · (−4) + 3 = −17.
n = 4728
s = 0
r = 0
while n > 0:
d = n % 10
s = s + d
r = r * 10 + d
n = n // 10
print(s, r)- Басы: n = 4728, s = 0, r = 0. n > 0 шарты ақиқат.
- 1-итерация: d = 8, s = 8, r = 0 · 10 + 8 = 8, n = 472.
- 2-итерация: d = 2, s = 10, r = 8 · 10 + 2 = 82, n = 47.
- 3-итерация: d = 7, s = 17, r = 827, n = 4.
- 4-итерация: d = 4, s = 21, r = 8274, n = 0.
- Шартты тексеру: 0 > 0 жалған — циклден шығу. Цикл 4 рет орындалды (цифрлар саны бойынша). s — цифрлар қосындысы, r — кері сан.
s = 0
for i in range(10, 0, -3):
s = s + i
print(s, i)- Қадам теріс, демек 10-нан төмен қарай 0-ге жетпей жүреміз: 10, 7, 4, 1 (келесісі −2 болар еді, ол 0 шекарасынан тыс).
- Формула бойынша итерациялар саны: ⌈(10 − 0) / 3⌉ = ⌈3,33⌉ = 4.
- Трассировка: i = 10 → s = 10; i = 7 → s = 17; i = 4 → s = 21; i = 1 → s = 22.
- Циклден кейін i соңғы мәнді сақтайды — 1.
a = 8
b = 3
if a % b == 0 or a > 10:
print(1)
elif not (a < b) and b % 2 == 1:
print(2)
else:
print(3)- Бірінші шарт:
8 % 3= 2, демекa % b == 0— False;a > 10— False. False or False = False, if тармағы өткізіледі. - elif шарты:
a < b→ 8 < 3 → False,not False= True;b % 2 == 1→ 3 % 2 = 1 → True. - True and True = True — elif тармағы орындалып, 2 басылады. else тармағы енді тексерілмейді.
a = [4, 7, 1, 9]
a.append(a[1] + a[2])
a.insert(0, a.pop())
a.remove(7)
print(a[1:3], a[-1], len(a))a[1] + a[2]= 7 + 1 = 8, append соңына қосады: [4, 7, 1, 9, 8].a.pop()соңғы 8 элементін жойып, қайтарады: тізім [4, 7, 1, 9]; содан кейінinsert(0, 8)8-ді басына қояды: [8, 4, 7, 1, 9].remove(7)7 мәнін (индексті емес!) жояды: [8, 4, 1, 9].a[1:3]— 1 және 2 индекстер: [4, 1];a[-1]= 9; ұзындығы 4.
k = 0
for i in range(1, 4):
for j in range(i, 4):
k = k + i * j
print(k)- Ішкі цикл i-ге тәуелді, сондықтан сыртқы циклдің жолдары бойынша трассировка жасаймыз.
- i = 1: j = 1, 2, 3 → 1 + 2 + 3 = 6 қосамыз, k = 6.
- i = 2: j = 2, 3 → 4 + 6 = 10 қосамыз, k = 16.
- i = 3: j = 3 → 9 қосамыз, k = 25.
- Барлығы дене 3 + 2 + 1 = 6 рет орындалды.
Күрделі есептер: қадам-қадаммен
x = 0
y = 1
while y < 50:
x = x + 1
y = y * 2 + x
print(x, y)Идея: Итерациялар саны алдын ала белгісіз — трассировка кестесін құрып, шартты әр итерация алдында тексереміз. Маңыздысы: y жаңа x арқылы есептеледі.
- Трассировка кестесіБасы: x = 0, y = 1; 1 < 50 — кіреміз.1-итерация: x = 1, y = 1 · 2 + 1 = 3.2-итерация: x = 2, y = 3 · 2 + 2 = 8.3-итерация: x = 3, y = 8 · 2 + 3 = 19.4-итерация: x = 4, y = 19 · 2 + 4 = 42; 42 < 50 — тағы бір рет.5-итерация: x = 5, y = 42 · 2 + 5 = 89.
- Шығу89 < 50 тексеруі жалған, цикл аяқталады. Циклден кейінгі мәндер бір рет басылады.
s = 0
for i in range(1, 20, 2):
if i % 3 == 0:
continue
if s > 20:
break
s = s + i
print(i, s)Идея: continue тек ағымдағы i мәнін өткізіп жібереді, break бүкіл циклді аяқтайды; s > 20 тексеруі қосудан бұрын тұр.
- i мәндеріrange(1, 20, 2) тақ сандарды береді: 1, 3, 5, ..., 19.
- Трассировкаi = 1: 3-ке еселі емес, s = 0 ≤ 20 → s = 1.i = 3: 3-ке еселі → continue.i = 5: s = 6. i = 7: s = 13.i = 9: 3-ке еселі → continue.i = 11: s = 13 ≤ 20 → s = 24.i = 13: 3-ке еселі емес, бірақ s = 24 > 20 → break. Қосу орындалмады.
- Нәтижеbreak-тен кейін i айнымалысы 13-ке тең болып қалды, s = 24.
m = [[i * 3 + j for j in range(3)] for i in range(3)]
s = 0
for i in range(3):
for j in range(3):
if i > j:
s = s + m[i][j]
print(s, m[2][::-1])Идея: Алдымен генератор бойынша матрицаны құрамыз, содан кейін бас диагональдан төмен жатқан элементтерді (i > j) іріктейміз.
- Матрицаны құрамызm[i][j] = 3i + j элементі. 0-жол: [0, 1, 2], 1-жол: [3, 4, 5], 2-жол: [6, 7, 8].
- Бас диагональдан төмен элементтерi > j шарты (1,0), (2,0), (2,1) үшін орындалады: бұлар m[1][0] = 3, m[2][0] = 6, m[2][1] = 7.s = 3 + 6 + 7 = 16.
- Жол қиығыm[2] = [6, 7, 8], [::-1] қиығы оны кері айналдырады: [8, 7, 6].
ҰБТ-дағы жиі қателіктер
/әрқашан float береді:6 / 2= 3.0, 3 емес. Бүтін бөлінді — тек//.- Теріс сандарда
//төменге дөңгелектейді:-7 // 2= -4,-7 % 2= 1. Алint(-3.5)= -3 — нөлге қарай алып тастау. Шатастырмаңыз. - range пен қиықтың оң шекарасы кірмейді:
range(1, 5)— 1..4,a[1:3]— екі элемент. Теріс қадамсызrange(5, 1)бос. input()жол қайтарады:int()-сіз'2' + '3'= '23' болады. Сондай-ақ2 ** 3 ** 2= 512 (дәреже оңнан солға),-2 ** 2= -4.a.remove(x)мән бойынша,a.pop(i)индекс бойынша жояды. Индекстер 0-ден басталады, соңғы элемент —a[len(a) - 1]немесеa[-1];a[len(a)]— қате.
Есте сақта
// — төменге, % — бөлгіштің таңбасымен, range пен қиықтар оң шекарасыз, индекстер нөлден, input — жол; күмәндансаң — трассировка кестесін жаса.
Өзіңді тексер
print(17 // 5, 17 % 5, 2 ** 4)3 2 163.4 2 163 2 82 3 16
Жауабын көрсету
3 2 16 17 // 5 = 3 (бүтін бөлігі), 17 % 5 = 2 (қалдық), 2 ** 4 = 16.
print(-7 // 2, -7 % 2)-3 -1-4 1-3 1-4 -1
Жауабын көрсету
-4 1 −3,5 төменге қарай −4-ке дөңгелектенеді; қалдық −7 − 2 · (−4) = 1.
s = 0
for i in range(2, 11, 3):
s += i
print(s)26181510
Жауабын көрсету
15 i = 2, 5, 8 (11 кірмейді): 2 + 5 + 8 = 15.
a = [3, 8, 1, 6, 4]
print(a[1:4], a[-2])[3, 8, 1] 4[8, 1, 6, 4] 6[8, 1] 6[8, 1, 6] 6
Жауабын көрсету
[8, 1, 6] 6 [1:4] қиығы — 1, 2, 3 индекстер: [8, 1, 6]; a[-2] — соңғысының алдындағы 6 элементі.
print(1, 2, 3, sep='-', end='!')
print(4)1 2 3!41-2-3!41-2-3-!41-2-3!және жаңа жолда4
Жауабын көрсету
1-2-3!4 sep='-' мәндер арасына сызықша қояды, end='!' жаңа жолды алмастырады, сондықтан 4 сол жолда басылады.
n = 2024
s = 0
while n > 0:
s += n % 10
n //= 10
print(s)8420220244
Жауабын көрсету
8 Цикл цифрларды қосады: 4 + 2 + 0 + 2 = 8.