Shanraq.org Shanraq.org
Алғашқы бағдарлама: сандар, жолдар және шығыс
IT

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 // 23. Теріс сандарда ереженің басқа екені байқалады: -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 — разрядтар қойылды, үтірден кейін бір де таңба жоқ.

Соңғы жол — Қазақстанның бүкіл ақша массасы. Разрядсыз оны оқу мүмкін емес; есептерде бұл бөлек тақырып болады.

Сабақ картасы

Сабақ картасы: сандар, жолдар және шығыс

Өз сөзіңізбен айтыңыз

Қарамай, дауыстап немесе қағазға жауап беріңіз. Жауаптар — сабақтың соңында.

  1. 7 / 2 7 // 2-ден несімен өзгеше — тек нәтижесімен бе?
  2. " Нан ".strip() неге жолдың өзін өзгертпейді?
  3. 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-ке тең емес.

Қарыздар. Жолды кесіп, тізім алдық, бірақ онымен не істеу керегін білмейміз: бұл — тізімдер сабағы. Сандарды бастық, бірақ сақтаған жоқпыз: айнымалылар — келесі сабақ. Оның үстіне чекті талдау әзірге қолмен, жол-жолмен істеледі — циклдерге дейін бес сабақ бар.

Жауаптар

Жауаптарды көрсету

Сұрақтарға

  1. Нәтижесімен де, типімен де: 7 / 2 — бұл 3.5, жылжымалы нүктелі сан; 7 // 2 — бұл 3, бүтін. / бөлуі тіпті тегіс бөлінгенде де әрқашан float қайтарады; //-та тип операндтардан алынады, сондықтан 7.0 // 2 — бұл 3.0.
  2. Өйткені Python-да жолдар өзгермейді: кез келген әдіс жаңа жол қайтарады, ал бастапқысы сол күйінде қалады. Нәтижені сақтау үшін оны меншіктеу керек.
  3. Пішімді береді: үтірден кейін неше таңба (.2f), разрядтар керек пе (,), қалай туралау керек. Санның өзі бұл кезде өзгермейді — тек оның қалай көрсетілгені өзгереді.

Жаттығуға

  1. 3.5 3 1. / әрқашан бөлшек береді, // төмен қарай дөңгелектейді, % қалдықты қайтарады. Бір «қанша» деген сұраққа үш түрлі жауап.
3.5 3 1
  1. .2f. Нүкте мен сан — үтірден кейінгі таңба саны, f — ғылыми жазумен емес, кәдімгі санмен басу керек дегені.
print(f"{1 / 3:.2f}")
0.33
  1. Жол мен санның арасындағы +-ты Python түсінбейді: TypeError: can only concatenate str (not "int") to str. Сандарды мәтінмен print ішіндегі үтірмен немесе f-жолмен қосады — ол санды өзі мәтінге айналдырады:
print(f"барлығы: {780}")
барлығы: 780

Дереккөздер

Мәтінде қате не теру қатесі кездессе, бізге айтыңыз

Тапсырманы тексеру

Алдымен VS Code-та шешіп, іске қосыңыз — редактор қатені сол жерде көрсетеді. Дайын шешімді осында қойыңыз. Тексеретін — модель: ол қатені атап көрсетеді, бірақ дайын жауапты бермейді.

Тексеру үшін кіру керек. Кіру

Пікірлер (0)

Әзірге пікір жоқ. Бірінші болыңыз.