3.7. Санды енгізу және шығару — Информатика 6 сынып, Қадырқұлов: талдау және жауаптар
Ookul.kz · сабақ талдау
Орысша

Кез келген есепті бірге талдайық!

3.7. Санды енгізу және шығару

Информатика, 6 сынып. Оқулық: Қадырқұлов Р. А., Нұрмұханбетова Г. К. (Алматыкітап баспасы, 2023). 3 бөлім: Python тілінде программалау. 93–96-беттер.

Нені үйренесің

  • Пернетақтадан бір санды да, бір жолға бірнеше санды да енгізуді.
  • Жолды split() әдісімен бөліктерге бөліп, бөліктерді map функциясымен санға айналдыруды.
  • print() функциясының sep және end параметрлері арқылы шығаруды басқаруды.
  • Енгізілген кез келген деректер бойынша санайтын шағын программалар жазуды.

Ой қозғау

  • Деректерді енгізудің қандай екі әдісін білесің? Біріншісі: мәнді программа кодына тікелей жазу, мысалы, a = 4.45. Екіншісі: оны input() арқылы пайдаланушыдан сұрау.
  • Екінші әдіс неліктен ыңғайлы? Бір программа кез келген сандармен жұмыс істейді, тек кодқа жазылған сандармен ғана емес. Мұны алгоритмнің әмбебаптық қасиеті дейді.
  • print() не істейді? Деректерді экранға шығарады.
  • input() мәтін емес, сан қайтаруы үшін не істеу керек? Оны int(...) (бүтін сан) немесе float(...) (бөлшек сан) ішіне алу керек.

Тақырыпты талдаймыз

input() әрқашан мәтін береді

Досыңа хабарлама жазып жатырсың деп елестет. Не терсең де, 1000 болсын, «сәлем» болсын, мессенджер үшін бұл — жай таңбалар жолы. input() те дәл солай: ол жол қайтарады. Сан керек болса, жолды санға өзің айналдырасың.

# санды сұраймыз және бірден бүтін санға айналдырамыз
K = int(input("engiz: "))
print(K)

Программаны іске қосып, 1000 енгіз, сонда экранда 1000 шығады. input() ішіндегі тырнақшадағы сөздер — адамға арналған ескерту, ол енгізер алдында басылып шығады.

split(): жолды бөліктерге бөлеміз

Ал егер бір жолға бірден бірнеше санды енгізу керек болса ше? Мысалы, 1 2 3 4 5 6 7. split() әдісі жолды бөлгіш бойынша бөліктерге бөледі. Жақшаның ішінде ештеңе болмаса, бөлгіш ретінде әдетте бос орын алынады.

K = input().split()      # енгіземіз: 1 2 3 4 5 6 7
print(K)                 # ['1', '2', '3', '4', '5', '6', '7']

Цифрлардың айналасындағы тырнақшаға назар аудар. Бұлар әлі де жолдар, тек тізімнің ішінде тұр.

Егер сандар сызықша арқылы жазылса, бөлгішті жақшаның ішіне тырнақшамен көрсету керек:

K = input().split('-')   # енгіземіз: 1-2-3-4-5-6-7
print(K)                 # ['1', '2', '3', '4', '5', '6', '7']

📕 Оқулықтағы кестеде (93-бет) екінші мысалда input().split(−) деп тырнақшасыз басылған. Олай жазсаң, программа іске қосылмайды: дұрысы input().split('-'). Бөлгішті әрқашан жол ретінде, яғни тырнақшамен жазады.

map(int, ...): жолдарды санға айналдырамыз

Бөліктер нағыз санға айналуы үшін әрқайсысын int арқылы өткізу керек. Мұны map функциясы істейді: ол int-ті тізімнің барлық бөліктеріне қолданады.

K = map(int, input().split())   # енгіземіз: 1 2 3 4 5 6 7
print(list(K))                  # [1, 2, 3, 4, 5, 6, 7]

Енді тырнақша жоқ: бұлар сандар, олармен есептеуге болады. map нәтижесін экранда тізім ретінде көру үшін list(K) керек.

a, b = map(int, input().split())   # енгіземіз: 10 20
print(a + b)                       # 30

💡 Үш санды бірден енгізгің келе ме? Сол жағына үш айнымалы жаза сал: a, b, c = map(int, input().split()). Айнымалылар саны енгізілген сандар санымен сәйкес болуы керек, әйтпесе Python қате туралы хабарлайды.

print(): sep және end

print() функциясы жай басып шығарумен шектелмейді. Оның екі пайдалы параметрі бар.

  • sep (ағыл. separator — бөлгіш): шығарылатын мәндердің арасына не қою керек. Әдепкі бойынша бос орын.
  • end: шығаруды немен аяқтау керек. Әдепкі бойынша '\n', яғни келесі жолға өту.
P = int(input())      # 25
K = int(input())      # 5
print(P * K, P + K, P - K, sep='<==>')
# шығарады: 125<==>30<==>20

Енді екі ұқсас кодты салыстыр. 20 және 30 енгіземіз.

# 2-мысал: end=' ' — келесі шығару сол жолдан жалғасады
P = int(input())
K = int(input())
print(P + K, end=' ')
print(P * K, end=' s!!!')
# 50 600 s!!!
# 3-мысал: end='\n' — әр шығару жаңа жолдан басталады
P = int(input())
K = int(input())
print(P + K, end='\n')
print(P * K, end=' s!!!')
# 50
# 600 s!!!

📌 end=' ' шығарылған мәндерді бір жолға біріктіреді, end='\n' оларды жолдарға бөледі. end параметрі көрсетілмесе, Python өзі '\n' қояды.

👨‍👩‍👧 Ата-анаға. Баласынан сабақтағы кез келген программаны Thonny, IDLE немесе online-python.com сайтында іске қосуын сұраңыз, бірақ алдымен нәтижені болжап көрсін, содан кейін тексерсін. Нәтижені болжап, өзін тексеру әдеті бөтен кодты оқуға ең тез үйретеді.

Түсінгеніңді тексер

Өзіңді тексер

  • input() функциясындағы әдістердің қандай маңызы бар? Олар енгізілген жолды өңдейді. split() оны бөліктерге бөледі, ал map бөліктерді санға айналдырады.
  • print() функциясында end='\n' не үшін қолданылады? Әр шығару жаңа жолда болуы үшін. Оны end=' ' деп ауыстырсаң, бәрі бір жолға шығады.
  • Алгоритмнің қай қасиеті input() функциясын қолдануға мүмкіндік береді? Әмбебаптық қасиеті: бір алгоритм кез келген жарамды бастапқы деректер үшін есепті шығарады.

Жаттығуларды шығарамыз

№ 1

(Практикада қолдану, «Тапсырма».) Дидар 4-сыныпта оқиды. Оған математика сабағында үйге төрт амалмен (+, −, *, /) орындалатын тапсырмалар берілді. Дидардың ағасы (әпкесі) ретінде оған программа жазып көмектес. Есептерді математикадағы жазылу ережесімен экранға шығар. Экрандағы мысал: 659 + 985 = 1644, 654 - 586 = 68, 145 * 556 = 80620, 200 / 25 = 8.0.

Қалай ойлаймыз. Амал белгісімен бөлінген сандар жұптарын енгізу керек (659+985). Амал белгісінің өзі split() үшін бөлгіш болады. Әр амалға өз енгізу жолы бар.

Шешуі.

# сандар жұбын амал белгісі арқылы енгіземіз, мысалы 659+985
k, p = map(int, input().split('+'))
m, h = map(int, input().split('-'))
t, w = map(int, input().split('*'))
c, d = map(int, input().split('/'))

# print әр шығаруды өзі жаңа жолға қояды
print(k, '+', p, '=', k + p)
print(m, '-', h, '=', m - h)
print(t, '*', w, '=', t * w)
print(c, '/', d, '=', c / d)

Енгізу: 659+985, 654-586, 145*556, 200/25. Шығару:

659 + 985 = 1644
654 - 586 = 68
145 * 556 = 80620
200 / 25 = 8.0

/ бөлуі әрқашан бөлшек сан береді, сондықтан 8 емес, 8.0 шығады.

📕 Оқулықтағы кодта (95-бет) азайту мен көбейту үшін бір ғана h айнымалысы қолданылған: алдымен m, h = ..., кейін t, h = .... Төрт енгізу жолы да басып шығарудан бұрын орындалады, сондықтан азайту кезінде h-та көбейтуден қалған сан (556) тұрады да, 654 − 586 = 68 орнына программа 654 − 556 = 98 деп басады. Жоғарыдағы шешімдегідей, әртүрлі аттар керек.

Жауабы: жоғарыдағы программа барлық төрт мысалды дұрыс нәтижелерімен шығарады.

№ 2

(Практикада қолдану, «Талдау».) Практикалық тапсырмадағы input() және print() функцияларының қолданылуына талдау жасай отырып, төмендегі өрнектерді орындау үшін программа құрастыр: 1) 352 · 985 · 25 · 3; 2) 362 + 1206 + 215554 + 6957 + 628.

Қалай ойлаймыз. Өрнектерді тікелей print() ішіне жазуға болады: Python өзі санайды. Көбейту — *.

Шешуі.

print(352 * 985 * 25 * 3)                    # 26004000
print(362 + 1206 + 215554 + 6957 + 628)      # 224707

Программаны «әмбебап» еткің келсе, сандарды пернетақтадан енгіз:

a, b, c, d = map(int, input().split())       # енгіземіз: 352 985 25 3
print(a * b * c * d)

Жауабы: 1) 26 004 000; 2) 224 707.

№ 3

(Ойлануға берілген сұрақтар, № 1.) input() функциясындағы әдістердің қандай маңызы бар?

Қалай ойлаймыз. input() бір жол әкеледі. Сандар алу үшін онымен не істеуге болады?

Жауап үлгісі. Әдістер енгізілген жолды өңдейді. split() оны бөлгіш бойынша (әдепкіде бос орын бойынша) бөліктерге бөледі, ал map пен int әр бөлікті санға айналдырады. Осының арқасында бір енгізумен бірден бірнеше сан алуға болады.

Жауабы: әдістер енгізілген жолды бөліктерге бөліп, бөліктерді қажетті деректер типіне айналдырады.

№ 4

(Ойлануға берілген сұрақтар, № 2.) print() функциясында end='\n' әдісі қандай мақсатта қолданылады?

Қалай ойлаймыз. print() функциясын қатарынан бірнеше рет шақырсаң, не болады?

Жауап үлгісі. '\n' келесі жолға өтуді білдіреді. Осылай бірнеше print() нәтижесі әрқайсысы өз жолында шығады, 50 және 600 шығарылған мысалдағыдай. Оны end=' ' деп ауыстырсаң, олар бір жолда тұрады.

Жауабы: әр нәтиже жаңа жолда шығуы үшін.

№ 5

(Ойлануға берілген сұрақтар, № 3.) Программалау кезінде input() функциясын қолдану алгоритмнің қай қасиетін орындауға мүмкіндік береді?

Қалай ойлаймыз. Ойланшы: неге бір программа кез келген сандар үшін есептей алады?

Жауап үлгісі. Бұл — әмбебаптық қасиеті: алгоритм бір ғана нақты санға емес, есептердің тұтас класына арналған. Деректер программа іске қосылғанда input() арқылы беріледі.

Жауабы: әмбебаптық.

№ 6

(Ойлануға берілген сұрақтар, № 4.) input() және print() функцияларының қандай айырмашылығы бар?

Қалай ойлаймыз. Біреуі «программаға» жұмыс істейді, екіншісі «программадан».

Жауап үлгісі. input() деректерді енгізеді: пернетақтадан жол қабылдап, программаға береді. print() деректерді шығарады: нәтижені экранда көрсетеді (немесе файлға жазады). Біріншісі айнымалыға сақтауға болатын мән қайтарады, екіншісі тек көрсетеді.

Жауабы: input() программаға деректерді енгізеді, print() программадан нәтижені шығарады.

№ 7

(Ойлануға берілген сұрақтар, № 5.) '548 + 895 + 1000 + 5012' жолынан сандарды ажыратып, оларды бір-біріне қосу үшін input() функциясы қалай жазылады?

Қалай ойлаймыз. Сандар + белгісімен бөлінген. Демек, split() үшін бөлгіш — '+'.

Шешуі.

s = input()                        # енгіземіз: 548 + 895 + 1000 + 5012
sandar = map(int, s.split('+'))    # плюс бойынша бөліп, жолдарды санға айналдырамыз
print(sum(sandar))                 # sum барлық сандарды қосады: 7455

Сандардың айналасындағы бос орындар кедергі жасамайды: int(' 895 ') бәрібір 895 береді.

Жауабы: жолды енгізу, split('+') арқылы бөлу, бөліктерді map(int, ...) арқылы санға айналдыру және қосу. Нәтиже — 7455.

№ 8

(Тапсырма, 1-тапсырма, бір жұлдызша.) $x$ сандар осінде $x_1$ және $x_2$ бүтін сан нүктелері берілген. Осы нүктелер арасындағы арақашықтықты табатын программа құрастыр. Мысалы: енгізу 4 -8, жауабы 12.

Қалай ойлаймыз. Нүктелер арасындағы арақашықтық — кесіндінің ұзындығы, ол теріс болмайды. Демек, айырманың модулі керек: S = |x₂ − x₁|.

Шешуі.

# бір жолға екі санды енгіземіз: 4 -8
x1, x2 = map(int, input().split())
print(abs(x2 - x1))      # abs — санның модулі

Тексеру: 4 және −8. Айырма −8 − 4 = −12, модулі 12-ге тең.

Жауабы: жоғарыдағы программа; 4 -8 үшін 12 шығарады.

№ 9

(Тапсырма, 2-тапсырма, бір жұлдызша.) $x$-тің мәні берілген. Өрнектегі $y$-тің мәнін есепте: $y = 3(x - 2)^3 + 5(x - 4)^2 - 7$. Мысалы: x = 5, жауабы 79.

Қалай ойлаймыз. Python-да дәреже ** арқылы жазылады. Жақшалар мен көбейту белгілерін барлық жерге қою керек, * жоқ 3(x-2) жазбасын Python түсінбейді.

Шешуі.

x = int(input())                        # енгіземіз: 5
y = 3 * (x - 2) ** 3 + 5 * (x - 4) ** 2 - 7
print(y)                                # 79

Қолмен тексеру: 3 · 3³ = 81, 5 · 1² = 5, 81 + 5 − 7 = 79.

Жауабы: жоғарыдағы программа; x = 5 болғанда 79 шығады.

№ 10

(Тапсырма, 3-тапсырма, екі жұлдызша.) Марат пен Еркін аулада кірпіштерді тасиды. Марат $P$ кірпіш, ал Еркін оған қарағанда $K$ кірпіш кем тасыған болса, екі бала барлығы неше кірпіш тасыған? Есептің программасын жаз. Мысалы: енгізу 150 50, жауабы 250.

Қалай ойлаймыз. Мараттың кірпіші — P. Еркінде одан K кем, яғни P − K. Бірге: P + (P − K).

Шешуі.

P, K = map(int, input().split())     # енгіземіз: 150 50
erkin = P - K                        # Еркін осынша тасыды
print(P + erkin)                     # 150 + 100 = 250

Жауабы: P + (P − K) = 2P − K; 150 50 үшін 250 шығады.

№ 11

(Тапсырма, 4-тапсырма, екі жұлдызша.) Әселдің $a$ теңге ақшасы бар. Бір өшіргіштің құны $k$-ға және бір қаламсаптың құны $c$-ға тең. Әсел қолындағы барлық ақшасына қанша өшіргіш немесе қанша қаламсап сатып алады? Есептің программасын жаз. Мысалы: 100 10 15 нәтижесі 10 6; 10 10 15 нәтижесі 1 0.

Қалай ойлаймыз. Баға қомақтың ішіне неше рет толық сияды? Бұл — қалдықты тастайтын бүтін санға бөлу //. Қарапайым / бөлу 6.66… берер еді.

Шешуі.

A, K, C = map(int, input().split())   # енгіземіз: 100 10 15
print(A // K, A // C)                 # 10 6

Екінші мысалды тексеру: 10 // 10 = 1 өшіргіш, 10 // 15 = 0 қаламсап: нәтиже 1 0.

Жауабы: print(A // K, A // C).

№ 12

(Үй тапсырмасы.) input() және print() функцияларын пайдаланып, күнделікті тұрмыстағы мәселені шешуге бағытталған (3-тапсырма) сызықтық алгоритмге негізделген тапсырманың мәтінін құрастыр. Құрастырған тапсырманы шешудің алгоритмін көрсетіп, программа кодын құр.

Қалай ойлаймыз. Деректер өзгеріп тұратын жағдайды таңда: баға мен саны, уақыт пен жылдамдық, достар саны мен кәмпиттер. Пайдаланушы қандай сандарды енгізетінін және нені табу керегін ойла.

Жауап үлгісі. Шарты. Сыныпта N оқушы бар. Мұғалім M дәптер сатып алып, оларды теңдей бөліп берді. Әр оқушы нешеуден алды және неше дәптер қалды?

Алгоритмі. 1) N және M енгізу. 2) M // N табу, бұл — әр оқушыға тиетін дәптер. 3) M % N табу, бұл — қалдық. 4) Екі санды шығару.

N, M = map(int, input().split())   # мысалы: 25 80
print(M // N, M % N)               # 3 5

Тексеру: 25 · 3 = 75 және 80 − 75 = 5, бәрі дұрыс.

Жауабы: программа деректерді енгізіп, есептеп, нәтижені шығаратын кез келген өз есебің; мысалы, жоғарыда — дәптер үлестіру.

Жадынама

  • a, b = map(int, input().split()) бір жолдан екі санды енгізеді.
  • Басқа бөлгіш керек болса, оны тырнақшамен жаз: split('+').
  • // — бүтін санға бөлу, % — қалдық, abs() — санның модулі.
  • Кез келген деректер үшін бірдей жұмыс істейтін алгоритмді әмбебап алгоритм дейді.

Шағын тест

← 3.5–3.6. Практикалық тапсырмалар · 3.8. Сызықтық алгоритмді программалау →