2.3 Matemātika un f-strings
Stundas uzdevums: Lietot paplašinātus matemātikas operatorus spēles mehānikas radīšanai un formatēt rezultātu izvadi, izmantojot modernu un lasāmu f-string sintaksi.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - izmēģini //, % un ** · 2. uzdevums (~25 min) - uzraksti inventāra kalkulatoru · 3. uzdevums (~20 min) - pārraksti izvadi ar f-string un noapaļo. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver VS Code un izveido failu matematika.py. Šajā stundā katru operatoru vispirms izmēģināsi atsevišķi un tikai tad liksi programmā.
Teorija: Matemātikas operatori un teksta formatēšana
- f-strings (Formatētas virknes): Mūsdienīgs un ērts veids, kā Python valodā ievietot mainīgo vērtības tieši tekstā. To dara, pirms pēdiņām pierakstot burtu
f, un pašu mainīgo ieliekot{figūriekavās}. - Integer division (Veselā dalīšana)
//: Dalīšanas operācija, kas ignorē skaitļus aiz komata (decimāldaļu) un atgriež tikai veselo daļu kāintdatu tipu. - Modulo (Atlikums)
%: Matemātiska operācija, kas atgriež tikai to vērtību, kas "paliek pāri" pēc veselās dalīšanas. Bieži izmanto spēļu loģikā, piemēram, inventāra vietu aprēķināšanai. - Exponentiation (Kāpināšana)
**: Skaitļa reizināšana pašam ar sevi norādīto reižu skaitu. (piem.,2 ** 3ir tas pats kas $2^3$).
Praktiskie uzdevumi
1. uzdevums -
Izmēģini //, % un **
Beigās tu zināsi, ar ko dalīšana ar // atšķiras no parastās dalīšanas.
- Ieraksti rindu
print(17 / 5)un palaid. - Ieraksti rindu
print(17 // 5)un palaid. - Ieraksti rindu
print(17 % 5)un palaid. - Pieraksti visus trīs rezultātus README.md failā.
- Ieraksti rindu
print(2 ** 3)un pieraksti rezultātu. - Paskaidro sev: 17 dalīts ar 5 ir 3 pilnas reizes un 2 pāri.
Gatavs, kad: tu vari pateikt, ka // dod 3, % dod 2, bet ** dod 8.
2. uzdevums -
Uzraksti inventāra kalkulatoru
Beigās programma pateiks, cik pilnu somu vajag un cik mantu paliks pāri.
- Ieraksti
mantas = int(input("Cik mantu ir? ")). - Ieraksti
somas_ietilpiba = int(input("Cik mantu ietilpst somā? ")). - Izrēķini pilnās somas:
pilnas = mantas // somas_ietilpiba. - Izrēķini atlikumu:
pari = mantas % somas_ietilpiba. - Izdrukā abus skaitļus divās atsevišķās rindās.
- Palaid ar 17 mantām un somu, kurā ietilpst 5.
Gatavs, kad: programma pateiks, ka pilnas somas ir 3 un pāri paliek 2 mantas.
3. uzdevums -
Pārraksti izvadi ar f-string un noapaļo
Beigās izvade būs viens skaidrs teikums, nevis atsevišķi skaitļi.
- Nomaini izvadi uz
print(f"Vajag {pilnas} somas un {pari} mantas paliks pāri."). - Palaid un pārbaudi, vai teikums salasās.
- Pievieno rindu
videji = mantas / somas_ietilpiba. - Izdrukā to ar
print(f"Vidēji {videji} somas")un pieraksti, cik ciparu ir aiz punkta. - Nomaini uz
print(f"Vidēji {videji:.1f} somas")un palaid vēlreiz. - Pieraksti vienu secinājumu: ko dara
:.1ffigūriekavās.
Gatavs, kad: pirms labojuma skaitlis ir garš, piemēram 3.4000000000000004, bet pēc tā - tieši 3.4.
Papildu uzdevums - Pievieno kāpināšanu spēles formulā
Ja pamatdarbs ir gatavs, izmanto ** kā spēles specialā gājiena formulu.
- Ieraksti
limenis = int(input("Varoņa līmenis: ")). - Izrēķini
speks = limenis ** 2. - Izdrukā to ar f-string vienā teikumā.
- Palaid ar līmeņiem 2, 5 un 10 un pieraksti rezultātus.
- Pieraksti, cik reizes spēks pieaug, kad līmenis pieaug divas reizes.
Gatavs, kad: ar līmeni 5 spēks ir 25, bet ar līmeni 10 - 100, un tu vari to izskaidrot.
Biežākās kļūdas (un kā tās labot):
- Aizmirsts
fprefikss: Ja pirms pēdiņām neuzrakstīsi burtuf, terminālis izvadīs tekstu, neatpazīstot mainīgos:"Ar spēku {speks} tu...". - ZeroDivisionError (Dalīšana ar nulli): Parādās, ja 2. uzdevumā lietotājs ievada, ka spēlētāju skaits ir 0. Matemātiski dalīt ar nulli nav iespējams, un programmas izpilde apstāsies.
- Drukas kļūdas figūriekavās: Figūriekavās
{}ievietotajam mainīgā nosaukumam ir precīzi jāsakrīt ar iepriekš definēto. Ja deklarējibojajums, bet iekavās raksti{Bojajums}(ar lielo burtu), saņemsi NameError.
Koda piemērs: f-strings un operatori
# Mainīgo sagatavošana
vards = "Zibens"
limenis = 5
# Izvade ar mainīgajiem un tiešu matemātiku figūriekavās
print(f"Spēlētājs {vards} ir {limenis} līmenī.")
# ** ir kāpināšana. Tātad limenis ** 2 nozīmē 5 kvadrātā (5 * 5).
print(f"Tava speciālā gājiena spēks ir {limenis ** 2}!")
Tava speciālā gājiena spēks ir 25!