Snippety

Časti zdrojového kódu

Č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".

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.