Python: деректен өз есебіңізге дейін 3-сабақ (барлығы 56)
Алғашқы бағдарлама: сандар, жолдар және шығыс
Python курсының үшінші сабағы. Дүкен чегінде санаймыз: бірдің орнына екі бөлу, қалдық, дәреже, содан кейін жолдар — қиып алу, ауыстыру, кесу, жабыстыру. Оның үстіне санды мәтін ішіне қоятын f-жолдар: 52 751 740 084 727 ₸ разрядпен, 11,4% үтірден кейінгі бір таңбамен.
Не үшін керек
Курста әрі қарай болатынның бәрі — кестелер, графиктер, модельдер — екі нәрсеге сүйенеді: сандар мен жолдарға. Дерек жолмен келеді, ал жауап санмен шығады, олардың арасында күнде істелетін жұмыс жатыр.
Қалтаңыздағыдан бастайық: дүкен чегінен.
Бірден тұтас
Жоба қалтасындағы chek.py файлы. Іске қосу: ортадан python chek.py.
"""3-сабақ: сандар, жолдар және шығыс — дүкен чегінің бір жолында.
Жаңа ештеңе орнатудың қажеті жоқ: бұл таза Python. Басында тор белгісі тұрған
жол — түсініктеме, оны машина емес, адам оқиды.
"""
# Чектің бір жолы: атауы, нешеу алынды, данасының бағасы.
LINE = " Нан ; 2 ; 260 "
print("== сандар")
print("данасының бағасы:", 260)
print("екі дана:", 260 * 2)
print("мыңнан қайтым:", 1000 - 260 * 2)
print("мыңды үшке бөлсек:", 1000 / 3)
print("мыңға неше бүтін нан:", 1000 // 260)
print("қанша теңге қалады:", 1000 % 260)
print("мың квадратта:", 1000 ** 2)
print()
print("== жолдар")
print("қалай келді:", repr(LINE))
print("шеттегі бос орынсыз:", repr(LINE.strip()))
print("кіші әріппен:", LINE.strip().lower())
print("басқа бөлгіш:", LINE.strip().replace(";", "|"))
print("нүктелі үтірмен кесілді:", LINE.strip().split(";"))
print("қайта жабыстырылды:", " / ".join(("нан", "сүт", "май")))
print()
print("== f-жолдар: мәтін ішіндегі сан")
name = "нан"
count = 2
price = 260
print(f"{name}: {count} дана × {price} ₸ = {count * price} ₸")
print(f"жылдық инфляция: {11.3879454675914:.1f}%")
print(f"тиынға дейінгі дана бағасы: {1890 / 3:.2f} ₸")
print(f"елдегі бүкіл ақша массасы: {52751740084726.9:,.0f} ₸")
print()
print("== екі бөлу, әрі бұл екі түрлі нәрсе")
print("кәдімгісі:", 7 / 2, type(7 / 2))
print("бүтіндей:", 7 // 2, type(7 // 2))
Шығатыны:
== сандар
данасының бағасы: 260
екі дана: 520
мыңнан қайтым: 480
мыңды үшке бөлсек: 333.3333333333333
мыңға неше бүтін нан: 3
қанша теңге қалады: 220
мың квадратта: 1000000
== жолдар
қалай келді: ' Нан ; 2 ; 260 '
шеттегі бос орынсыз: 'Нан ; 2 ; 260'
кіші әріппен: нан ; 2 ; 260
басқа бөлгіш: Нан | 2 | 260
нүктелі үтірмен кесілді: ['Нан ', ' 2 ', ' 260']
қайта жабыстырылды: нан / сүт / май
== f-жолдар: мәтін ішіндегі сан
нан: 2 дана × 260 ₸ = 520 ₸
жылдық инфляция: 11.4%
тиынға дейінгі дана бағасы: 630.00 ₸
елдегі бүкіл ақша массасы: 52,751,740,084,727 ₸
== екі бөлу, әрі бұл екі түрлі нәрсе
кәдімгісі: 3.5 <class 'float'>
бүтіндей: 3 <class 'int'>
Талдау
print — сыртқа шығатын жалғыз терезе
Бағдарлама ештеңе баспай тұрғанда, ол сіз үшін жоқ. print үтір арқылы қанша мән болса, сонша қабылдайды да, олардың арасына бос орын қояды.
# таңбасынан басталатын жол — түсініктеме: оны адам оқиды, машина өткізіп жібереді. Файлдың басындағы үш тырнақшадағы жолдар да түсіндірме, бірақ ерекше түрі: бұл — docstring, модульдің сипаттамасы; оған функциялар сабағында жетеміз.
Екі бөлу, және оларды шатастыру қымбат
Шығыстың соңғы блогына қараңыз:
кәдімгісі: 3.5 <class 'float'>
бүтіндей: 3 <class 'int'>
/ әрқашан бөлшек сан береді, тіпті бүтіндей бөлінгенде де: 4 / 2 — бұл 2.0, 2 емес. // төмен қарай дөңгелектейді — нөлге емес, кіші санға қарай. Оң сандарда бұл «бөлшек бөлігін тастау» сияқты көрінеді: 7 // 2 — 3. Теріс сандарда ереженің басқа екені байқалады: -7 // 2 — -3 емес, -4.
Дөңгелектеу мен тип — екі бөлек нәрсе. Нәтиженің типі операндтардан алынады: 7 // 2 — бүтін 3, ал 7.0 // 2 — бөлшек 3.0. Бөлшек бөлігі екеуінде де тасталды, бірақ float бүтіндей бөлінгеннен бүтін болып кетпейді.
Бұл ұсақ нәрсе емес. «Мыңға 260 теңгеден неше нан сыяды» — бұл 1000 // 260, үшеу, ешқандай «3,84 нан» жоқ. Ал % қалғанын береді: 220 теңге. // мен % қосағы — «нешеуі бүтін, қаншасы қайтым» деген сұрақтың жауабы; ол бетте де, уақытта да керек болады.
** — дәрежеге шығару: 1000 ** 2 — миллион.
Елестетіп көріңіз. Нанды адамдарға бөлу.
/— бухгалтердің жауабы: «үш жарымнан».//— үй иесінің жауабы: «үштен, біреуі артық». Екеуі де дұрыс, бірақ дастарқанда екіншісі керек.
Жол — ондағы жазылған нәрсемен бірдей емес
repr(LINE) жолды тырнақшамен және барлық бос орнымен көрсетеді: ' Нан ; 2 ; 260 '. Бұл маңызды: шеттегі бос орындар көзге көрінбейді, бірақ салыстыруды бұзады да, санды қоқысы бар мәтінге айналдырады.
Бөтен деректе күнде қолданатын төрт әдіс:
.strip()— шеттегі бос орындарды алып тастау. Ол жолды өзгертпейді, жаңасын қайтарады: Python-да жолдар өзгермейді, бұл қателердің бүтін бір тобынан құтқарады;.lower()— кіші әріпке келтіру, «Нан» мен «нан» бір нәрсеге айналсын деп;.replace(ескісі, жаңасы)— ауыстыру;.split(бөлгіш)— бөліктерге кесу.['Нан ', ' 2 ', ' 260']қайтты — бұл тізім, ал ол келесі сабақ. Назар аударыңыз: бөліктердің ішіндегі бос орындар қалды,splitоларды қозғамайды.
Әрі .join() — кері әрекет: " / ".join(...) бөліктерді бөлгіш арқылы бір жолға жинайды. Мұндағы рет үйреншікті емес: бөлгіш соңында емес, бірінші тұр.
f-жолдар: мәтін ішіндегі сан
Санды мәтінге плюспен қосуға болмайды — Python не айтқыңыз келгенін болжамайды. Жақсырақ жолы бар:
print(f"{name}: {count} дана × {price} ₸ = {count * price} ₸")
Тырнақшаның алдындағы f әрпі мынаны білдіреді: жолдың ішінде фигуралық жақшалар тұра алады, олардың ішіндегісі есептеледі. Ішінде тек ат емес, өрнек те болады: count * price сол жерде саналды.
Қос нүктеден кейін санды қалай көрсету керегін жазады:
{11.3879454675914:.1f}→11.4— үтірден кейін бір таңба;{1890 / 3:.2f}→630.00— ақшаға арналған екі таңба;{52751740084726.9:,.0f}→52,751,740,084,727— разрядтар қойылды, үтірден кейін бір де таңба жоқ.
Соңғы жол — Қазақстанның бүкіл ақша массасы. Разрядсыз оны оқу мүмкін емес; есептерде бұл бөлек тақырып болады.
Сабақ картасы
Өз сөзіңізбен айтыңыз
Қарамай, дауыстап немесе қағазға жауап беріңіз. Жауаптар — сабақтың соңында.
7 / 27 // 2-ден несімен өзгеше — тек нәтижесімен бе?" Нан ".strip()неге жолдың өзін өзгертпейді?- f-жолдағы фигуралық жақшаның ішіндегі қос нүкте не істейді?
Жаттығу
Тапсырмаға дейінгі үш қысқа қадам: болжау, толықтыру, жөндеу. Жауаптары — сабақтың соңында, бірақ алдымен өзіңіз жауап беріңіз.
1. Болжаңыз. Бұл жол не басып шығарады?
print(7 / 2, 7 // 2, 7 % 2)
2. Бос орынды толтырыңыз. ... орнына үтірден кейін екі таңба қалатын пішімді қойыңыз.
print(f"{1 / 3:...}")
3. Жөндеңіз. Бағдарлама құлайды. Қатені оқып, жол басылатындай етіңіз.
print("барлығы: " + 780)
Тапсырма
Міндетті. Берілгені:
price = 260
count = 3
paid = 1000
Бес жол басып шығарыңыз: тауар тұтас алғанда қанша тұрады; төленген сомадан қанша қайтым; төленген сомаға неше бүтін нан сыяды және қаншасы қалады; біреуінің 540 бағамымен доллармен бағасы екі таңбамен; және атауы, саны мен сомасы f-жолмен жиналған жол.
Күтілетін шығу:
тауар үшін: 780 теңге
1000-нан қайтым: 220 теңге
1000 теңгеге бүтін нан: 3, қалатыны 220
біреуінің доллармен бағасы: 0.48
жол мен сан бірге: нан × 3 = 780
Дайын болғаны: шығу жол-жолмен сәйкес келеді; «бүтіні мен қайтымы» дөңгелектеумен емес, // мен % арқылы саналған; сан ешбір жерде мәтінге + таңбасымен жабыстырылмаған.
Өз деректеріңізде. Дүкеннен алған нақты чегіңізді алыңыз. Мынаны басып шығаратын бағдарлама жазыңыз: бір тауардың сомасы (баға × саны), дөңгелек сомадан қайтым, мың теңгеге ондай тауардың нешеуін алуға болатыны және сонда қанша теңге қалатыны. Барлық санды үтірден кейін екі таңбамен f-жолмен шығарыңыз.
Қалауыңызша.
- Сол чек 2010 жылы қанша тұратынын санаңыз: әр бағаны 3,48-ге бөліңіз — бірінші сабақтағы көбейткішке.
- Бір санды үш түрлі етіп шығарыңыз:
{x},{x:.2f},{x:,.0f}. Қайсысы жақсы оқылатынын қараңыз. " БАҒА ; 1 200,50 ; тг "жолын алып, оныбаға;1200.50;тгтүріне келтіріңіз — циклсіз, тек жол әдістерімен.
Жобада бұл қайда тұрады
Бүгінгі — әрі қарайғының бәрінің іргетасы: бағалар қосылады, индекстер бөлінеді, ал әлемнен келген дерек тазалауды қажет ететін жолмен келеді. Келесі сабақта типтермен айналысамыз: "260" мен 260 неге әртүрлі және 0.1 + 0.2 неге 0.3-ке тең емес.
Қарыздар. Жолды кесіп, тізім алдық, бірақ онымен не істеу керегін білмейміз: бұл — тізімдер сабағы. Сандарды бастық, бірақ сақтаған жоқпыз: айнымалылар — келесі сабақ. Оның үстіне чекті талдау әзірге қолмен, жол-жолмен істеледі — циклдерге дейін бес сабақ бар.
Жауаптар
Жауаптарды көрсету
Сұрақтарға
- Нәтижесімен де, типімен де:
7 / 2— бұл3.5, жылжымалы нүктелі сан;7 // 2— бұл3, бүтін./бөлуі тіпті тегіс бөлінгенде де әрқашанfloatқайтарады;//-та тип операндтардан алынады, сондықтан7.0 // 2— бұл3.0. - Өйткені Python-да жолдар өзгермейді: кез келген әдіс жаңа жол қайтарады, ал бастапқысы сол күйінде қалады. Нәтижені сақтау үшін оны меншіктеу керек.
- Пішімді береді: үтірден кейін неше таңба (
.2f), разрядтар керек пе (,), қалай туралау керек. Санның өзі бұл кезде өзгермейді — тек оның қалай көрсетілгені өзгереді.
Жаттығуға
3.5 3 1./әрқашан бөлшек береді,//төмен қарай дөңгелектейді,%қалдықты қайтарады. Бір «қанша» деген сұраққа үш түрлі жауап.
3.5 3 1
.2f. Нүкте мен сан — үтірден кейінгі таңба саны,f— ғылыми жазумен емес, кәдімгі санмен басу керек дегені.
print(f"{1 / 3:.2f}")
0.33
- Жол мен санның арасындағы
+-ты Python түсінбейді:TypeError: can only concatenate str (not "int") to str. Сандарды мәтінменprintішіндегі үтірмен немесе f-жолмен қосады — ол санды өзі мәтінге айналдырады:
print(f"барлығы: {780}")
барлығы: 780
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.