Čo sú Snippety?
Z anglického slova "snippet" - útržok. V tejto sekcii si ukážeme takmer celý kód časti programu a útržky z neho vám vysvetlím. Keď pôjdete kurzorom na obrázok, zväčší sa, ak ste na telefóne podržte obrázok. Vysvetlenia sú písané v programátorskom slangu.
Install.sh
Na začiatok by som predstavil script "Install.sh". Bol to nenahraditeľný skript tohto programu, bez jeho vykonania nebolo možné používať kalkulačku SmartCalc avšak nedávno som ho nahradil inštalačným balíkom .deb (Slúžia na inštalaćiu programov v Debiane - distribúcia Linuxu).
#!/bin/bash
clear
echo Installing
echo
chmod +x terms_of_use.py
python3 terms_of_use.py
read -p "[Agree/Disagree]" tou #tou = terms of use
if [[ $tou == "Agree" ]]; then
sudo apt-get install python3
sudo apt-get install python3-pip
sudo pip3 install colorama
sudo pip3 install math
chmod +x *
sudo mkdir /etc/SmartCalc/
sudo cp * /etc/SmartCalc/
sudo cp SmartCalc /bin
sudo chmod 777 /etc/SmartCalc/
sudo cp SmartCalc.desktop /usr/share/applications
clear
Ako môžete vidieť, dal som ifovník ktorý sa vás pýta či šúhlasíte s podmienkamy používania, ak požívatel súhlasí script nainštaluje potrebné balíky ktoré sú potrebné na správne fungovanie programu a nasledne spusti menu.sh.
echo
echo "Done, calculator will be launched after 3 sec."
echo "3"
sleep 1
echo "2"
sleep 1
echo "1"
sleep 1
echo "0"
bash menu
elif [[ $tou == "Disagree" ]]; then
echo "Sad :/"
fi
A ak nesúhlasíte s podmienkami používania, program vám napíše "Sad :/". Else by tam nemohlo byť lebo keby používatel zadal napríklad "dfjbjk" bralo by to ako "Disagree".
Menu.sh
Ako ďalšie by som predstavil script Menu.sh
#!/bin/bash
cd SmartCalc/
clear
python3 Scb.py
python3 menu_list.py
read -p "Function? " func #výber funkcie
if [[ $func == "1" ]]; then
clear
python3 calc.py #spustenie
elif [[ $func == "2" ]]; then
clear
python3 square.py
elif [[ $func == "3" ]]; then
clear
python3 rectangle.py
elif [[ $func == "4" ]]; then
clear
python3 triangle.py
Menu.sh slúži ako menu vštkých skriptov, preto sa to tak volá. Keď spustíte SmartCalc pomocou ikony tak sa vykoná práve tento skript, funguje ako srdce programu a spája všetky skripty dokopy. Usúdil som že na túto funkciu bude Bash najlepší. Banner.py vám 'vyprintuje' všetky možnosti. Zvyšok je 'ifovník' pri ktorom je každý elif jeden skript.
elif [[ $func == "5" ]]; then
clear
python3 circle.py
elif [[ $func == "6" ]]; then
clear
python3 par.py
elif [[ $func == "8" ]]; then
clear
elif [[ $func == "9" ]]; then
clear
python3 ohms_law.py
elif [[ $func == "10" ]]; then
clear
python3 resistor.py
fi
echo
echo
echo
echo
echo
Koniec skriptu teda 5 krát echo je zbytočné lebo si to všimnete iba keď zle zadáte možnosť (nie ako else), teda by vás ifovník nehodil do ďalšieho skriptu. Pokiaľ by ste dali správnu možnosť, tých 5 prázdnych riadkov by ste nevydeli lebo by skript spravil ešte pred tým "clear".
Calc.py
Prvý napísaný skript programu SmartCalc
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
import os
from colorama import init, Fore, Back, Style
from definitions import eoc
from banner import bo
print(bo)
o = input("Operation? [+,-,*,/]")
if str(o) == "-":
print(Fore.RED+("Difference u can do with summary of negative number"))
elif str(o) == "/":
dividend = input("Enter dividend: ")
denominator = input("Enter denominator: ")
division = (float(dividend) / float(denominator))
print(division)
eoc()
Importoval som "os" aby som mohol vykonávať príkazy konkrétne vykonať funkciu eoc() ktorá sa vás spýta či ste skončili, ak áno program skončí, inak sa znova spustí Menu.sh. Potom sa vás Menu.sh spýta akú operáciu chcete vykonať.
print (Fore.BLUE+("Enter numbers, to end press Enter without inserting number")+Fore.WHITE)
total = 0
difference = 0
multiply = 1
count = 0
Operácia | + | - | * | / |
---|---|---|---|---|
Spôsob vykonania | += | += | *= | divident/denominator |
Komentár | používateľ vkladá záporné čísla |
Toto je tabulka operácii a ako som to vpísal do skriptu.
while True:
line = input("Number:")
if line:
try:
number = float(line)
except ValueError as verr:
print(Fore.RED+str(verr))
print(Fore.WHITE)
continue
except TypeError as terr:
print(Fore.RED+str(terr))
print(Fore.WHITE)
continue
else:
break
Teraz tu máme srdce kalkulačky, táto časť (tento while) spracováva operácie (okrem delenia, to sa nachádza na predošlom obrázku). Po while tu máme ďalší ifovník ktorý určuje čo chcete vyprintovať.
total += number
count += 1
multiply *= number
if str(o) == "+":
print("Summary is: ",total)
elif str(o) == "-":
print("Difference is: ", total)
elif str(o) == "*":
print("Multiply is: ", multiply)
elif str(o) == "/":
print(float(division))
else:
print("Invalid operation")
eoc()
V tejto časi máme koniec ifovníku a zvolanie funkcie "eoc". Funkcia eoc je použitá vo všetkých skriptoch kalkulačky.
Ohms_law.py
Ďalej by som predstavil najnovší script "Ohms_law.py". Je to funkcia kalkulačky ktorá vám na základe Ohmovho zákonu vypočíta neznámu veličinu plus vám vypočíta výkon.
#!/usr/bin/python3
Import os
From definitions import eoc
From banner import ol
Print(ol)
Print (" ")
Print ("""If value is unknown, type "?" """)
Print (" ")
While True:
try:
R = input("Resistence = ")
U = input("Voltage = ")
I = input("Current = ")
print(" ")
Importoval som "os" aby som mohol vykonávať príkazy, konkrétne dostať sa do zložky SmartCalc a znova spustiť Menu.sh následne vyprintujem banner Ohmovho zákona, ďalej definujem funkciu "eoc" (koniec kalkulačky) ktorú neskôr zvolám na konci skriptu. eoc(): (import time sa v najnovšej verzii nemá žiadny zmysluplný efekt) Kalkulačka sa vás bude pýtať či ste skončili alebo nie, až do vtedy do kedy jej neodpoviete. V tomto bode začína tok programu, napíše vám, že pokiaľ je vám veličina neznáma napíšte "?".
if R == "?":
R = float(U)/float(I)
print("Resistence is:", R ,"Ω")
elif U =="?":
U = float(R)*float(I)
print("Voltage is:", U ,"V")
elif I =="?":
I = float(U)/float(R)
print("Current is:", I ,"A")
P = float(U)*float(I)
print("Perfomance is:",P,"W")
except ValueError as verr:
print(verr)
continue
break
eoc()
Druhá a tá hlavná časť skriptu spočíva v tom, že sa vás program spýta na hodnoty veličín, ako som spomínal vyššie pre neznámu veličinu uveďte "?". Cyklus while zabespečí to, že jeho obsah sa bude opakovať dovtedy dokedy neuvedieťe hodnoty ktoré spĺňajú podmienky. Ak zadáte neplatné hodnoty vykoná sa výnimka ktorá obsah while zopakuje. Ako vydíte while sa vás spýta na hodnoty a vypočíta na základe ohmovho zákona.