Operacje logiczne

In [1]:
# zacznijmy od porownań 

# czy zero jest mniejsze niż jeden

print('0 < 1 : ',0 < 1)  #True

# czy zero jest większe niż jeden

print('0 > 1 : ',0 > 1)  #False

# czy zero jest mniejsze lub równe jeden

print('0 <= 1 : ',0 <= 1) #True

# czy zero jest większe lub równe jeden

print('0 >= 1 : ',0 >= 1) #False

# czy jeden jest równe zero

print('1 == 0 : ',1 == 0) #False

# czy jeden jest rowne jeden

print('1 == 1 : ',1 == 1) #True

# czy jeden jest różne od zera

print('1 != 0 : ',1 != 0) #True

# czy jeden jest rózne od jeden

print('',1!= 1) #False
0 < 1 :  True
0 > 1 :  False
0 <= 1 :  True
0 >= 1 :  False
1 == 0 :  False
1 == 1 :  True
1 != 0 :  True
 False

Typ logiczny True/False

In [2]:
# typ logiczny traktowany jako całkowity  True =1, False =0

print('True + True = ',True + True, type(True + True))

print('True - False = ',True - False,type(True + True))

print('True * False = ',True * False,type(True + True))

print('True / False =',True / False,type(True + True)) # ZeroDivisionError: division by zero
True + True =  2 <class 'int'>
True - False =  1 <class 'int'>
True * False =  0 <class 'int'>
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-2-6b7cbeb8d79f> in <module>()
      7 print('True * False = ',True * False,type(True + True))
      8 
----> 9 print('True / False =',True / False,type(True + True)) # ZeroDivisionError: division by zero

ZeroDivisionError: division by zero
In [3]:
# typ logiczny traktowany jako całkowity  True =1, False =0

print('True and True = ',True and True, type(True and True))

print('True or False = ',True or False,type(True or True))

print('not False = ',not False,type(not False))

print('not True =',not True,type(not True))
True and True =  True <class 'bool'>
True or False =  True <class 'bool'>
not False =  True <class 'bool'>
not True = False <class 'bool'>

Instrukcja warunkowa

In [4]:
# instrukcja warunkowa if

# wykona się jeśli wartość logiczna warunku jest prawdziwa
if True:
  print('Prawda jest najważniejsza\n')

# nie wykona się jeśli wartość logiczna warunku jest fałszywa

   
if False:
  print('Ta instrukcja się nie wykona.')
    
    
# wykonanie polecenia1 jeśli warunek jest prawdziwy a polecenie2 jeśli falszywy

'''
if ( warunek ):
    polecenie1
else:
    polecenie2
'''

a=100

if a<50:
  print('a jest mniejsze niż 50')
else:
  print('a jest większe lub równe 50')
    
    

    
Prawda jest najważniejsza

a jest większe lub równe 50
In [5]:
a=53

# instrukcja warunkowa z elif i else
if a > 50:
    # to się wykona jeśli  warunek jest prawdziwy
    print("a jest większe niż 50")
elif a == 50:
    # w przeciwnym przypadku, jeśli warunek jest prawdziwy
    print("a jest równe 50")
else:
    # w pozostałych przypadkach
    print("a jest mniejsze niż 50")
    
    
a=50
# instrukcja warunkowa z elif i else
if a > 50:
    # to się wykona jeśli  warunek jest prawdziwy
    print("a jest większe niż 50")
elif a == 50:
    # w przeciwnym przypadku, jeśli warunek jest prawdziwy
    print("a jest równe 50")
else:
    # w pozostałych przypadkach
    print("a jest mniejsze niż 50")
    
a=47
# instrukcja warunkowa z elif i else
if a > 50:
    # to się wykona jeśli  warunek jest prawdziwy
    print("a jest większe niż 50")
elif a == 50:
    # w przeciwnym przypadku, jeśli warunek jest prawdziwy
    print("a jest równe 50")
else:
    # w pozostałych przypadkach
    print("a jest mniejsze niż 50")  
a jest większe niż 50
a jest równe 50
a jest mniejsze niż 50
In [6]:
# wykorzystanie  funkcji input

print("Podaj liczbę:", end=' ')

raw_x = input() # pobieramy napis z wejścia standardowego (klawiatury)
x = eval(raw_x) #  próba interpretacji napisu tak jak wyrażenia języka Python

print('Wprowadzona liczba w stanie surowym: ',raw_x,type(raw_x),' Po ewaluacji :',x, type(x))

if x<10:
    print('Wprowadzona liczba jest mniejsza niż 10')
elif x == 10:
    # w przeciwnym przypadku, jeśli warunek jest prawdziwy
    print("Wprowadzona liczba jest równa 10")
else:
    # w pozostałych przypadkach
    print("Wprowadzona liczba jest większa niż 10")  
Podaj liczbę: 11
Wprowadzona liczba w stanie surowym:  11 <class 'str'>  Po ewaluacji : 11 <class 'int'>
Wprowadzona liczba jest większa niż 10

Petle

Petla for

In [7]:
# iteracja po liczbach całkowitych
for licznik in (1,2,3,4):
    print('liczni k= ',licznik)

    
# iteracja po elementach napisu

napis1='Ala ma kota'    
for litera in (range(len(napis1))):
    print ('Litera = ', napis1[litera])
                
# iteracja po liście

owoce = ['gruszka', 'jabłko',  'śliwka']

for owoc in range(len(owoce)):
    print ('Owoc =',owoce[owoc] )
        
# petla for z dodatkowa klauzula else: na koncu

for licznik in range(1,11):
    print('licznik =',licznik)
else:
    print('Koniec i bomba!')       
    
    
    
for licznik in range(10) :
        print('licznik = ',licznik,' ',end='\n')
else:
        print('Koniec i bomba!')       
liczni k=  1
liczni k=  2
liczni k=  3
liczni k=  4
Litera =  A
Litera =  l
Litera =  a
Litera =   
Litera =  m
Litera =  a
Litera =   
Litera =  k
Litera =  o
Litera =  t
Litera =  a
Owoc = gruszka
Owoc = jabłko
Owoc = śliwka
licznik = 1
licznik = 2
licznik = 3
licznik = 4
licznik = 5
licznik = 6
licznik = 7
licznik = 8
licznik = 9
licznik = 10
Koniec i bomba!
licznik =  0  
licznik =  1  
licznik =  2  
licznik =  3  
licznik =  4  
licznik =  5  
licznik =  6  
licznik =  7  
licznik =  8  
licznik =  9  
Koniec i bomba!
In [8]:
# figura 1
for i in range(10):
    print(str(i) * i)
1
22
333
4444
55555
666666
7777777
88888888
999999999
In [9]:
# https://www.w3resource.com/python-exercises/python-conditional-exercise-17.php

# małe ćwiczenie nd dwie petle for wraz z instrukcjami warunkowymi

result_str="";    
for row in range(0,7):    
    for column in range(0,7):     
        if (((column == 1 or column == 5) and row != 0) or ((row == 0 or row == 3) and (column > 1 and column < 5))):    
            result_str=result_str+"*"    
        else:      
            result_str=result_str+" "    
    result_str=result_str+"\n"    
print(result_str);
  ***  
 *   * 
 *   * 
 ***** 
 *   * 
 *   * 
 *   * 

Petla while

In [10]:
# wykonuj blok instrukcji dopóki warunek jest spełniony

#while warunek:
#   instrukcje

i=0
while i<5: # dopoki warunek jest prawdziwy
    print('Iteracja : ',i)
    i=i+1
Iteracja :  0
Iteracja :  1
Iteracja :  2
Iteracja :  3
Iteracja :  4
In [11]:
# z dodaniem else:

i=0
while i<5: # dopoki warunek jest prawdziwy
    print('Iteracja : ',i)
    i=i+1
else:  # wykona się na koncu petli 
    print('Koniec pętli.') 
Iteracja :  0
Iteracja :  1
Iteracja :  2
Iteracja :  3
Iteracja :  4
Koniec pętli.
In [12]:
# działa nawet dla pustej petli

i=0
while i>5: # dopoki warunek jest prawdziwy, w tym przypadku nigdy
    print('Iteracja : ',i)
    i=i+1
else:  # wykona się na koncu petli 
    print('Koniec pustej pętli.')
Koniec pustej pętli.

Dodatkowe sterowanie w petli

break - przerwij pętlę

continue - przerwij obecną iterację

pass - nie rób nic

else - wykonuj jeśli pętla zakończyła się inaczej niż break

break

In [13]:
for i in range(1,6): # od 1 do 5
    if i>3: # nie wykona się Iteracja dla i : 4,5
       break
        
    print('Iteracja dla i :',i)
    
Iteracja dla i : 1
Iteracja dla i : 2
Iteracja dla i : 3

continue

In [14]:
for i in range(1,6): # od 1 do 5
    if i%2==0:
      continue # pomijamy parzyste i
    print('Iteracja dla i :',i)   
Iteracja dla i : 1
Iteracja dla i : 3
Iteracja dla i : 5

pass

In [15]:
for i in range(1,6): # od 1 do 5
    if i%2==0:
      pass # nic nie rób
    print('Iteracja dla i :',i)   
Iteracja dla i : 1
Iteracja dla i : 2
Iteracja dla i : 3
Iteracja dla i : 4
Iteracja dla i : 5
In [16]:
for i in range(1,11): # od 1 do 10
    if i%2==0:
      pass # nic nie rób
    else: # wykona się dla nieparzystych i
      print('Iteracja dla i :',i)   
Iteracja dla i : 1
Iteracja dla i : 3
Iteracja dla i : 5
Iteracja dla i : 7
Iteracja dla i : 9

else

In [17]:
#  wykonanie instrukcji na końcu pętli

for i in range(1,6): # od 1 do 5
    if i%2==0:
      pass # nic nie rób
    print('Iteracja dla i :',i)  
else:
    print('Koniec pętli.')
Iteracja dla i : 1
Iteracja dla i : 2
Iteracja dla i : 3
Iteracja dla i : 4
Iteracja dla i : 5
Koniec pętli.
In [18]:
# Przyklad petli for z else, który nie zostanie wykonany . 

for i in range(1,11): # od 1 do 10
    if i%2==0:
      pass # nic nie rób
    print('Iteracja dla i :',i)  
    if i%5==0: # konczymy na i=5
        break
else: #  ta czesc nie wykona się 
    print('Koniec pętli.')
Iteracja dla i : 1
Iteracja dla i : 2
Iteracja dla i : 3
Iteracja dla i : 4
Iteracja dla i : 5

Pakiety

In [19]:
# importowanie pakietu

import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
In [20]:
#  Dokumentacja danego pakietu/modułu

help(this)
Help on module this:

NAME
    this

MODULE REFERENCE
    https://docs.python.org/3.6/library/this
    
    The following documentation is automatically generated from the Python
    source files.  It may be incomplete, incorrect or include features that
    are considered implementation detail and may vary between Python
    implementations.  When in doubt, consult the module reference at the
    location listed above.

DATA
    c = 97
    d = {'A': 'N', 'B': 'O', 'C': 'P', 'D': 'Q', 'E': 'R', 'F': 'S', 'G': ...
    i = 25
    s = "Gur Mra bs Clguba, ol Gvz Crgref\n\nOrnhgvshy vf o...bar ubaxvat ...

FILE
    /home/nbuser/anaconda3_501/lib/python3.6/this.py


In [21]:
# lista obiektów, które zawiera dany pakiet 
dir(this)
Out[21]:
['__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'c',
 'd',
 'i',
 's']
In [22]:
# wyswietlenie zawartości jednego z nich

# odwołanie w formacie nazwapa_pkietu.nazwa_obiektu

print('this.c = ',this.c,' type :', type(this.c))
this.c =  97  type : <class 'int'>

Aliasy

In [23]:
# Podczas importu pakietu można uzyc aaliasu
import this as zp
# dostep do zmiennej c  formacie nazwa_aliasu.nazwa_obiektu
print('zp.c = ',zp.c,' type :', type(zp.c))
# dostep z poprzedniego importu bez aliasu
print('this.c = ',this.c,' type :', type(this.c))
zp.c =  97  type : <class 'int'>
this.c =  97  type : <class 'int'>
In [24]:
import sys
# usuwamy załadowany pakiet math
del sys.modules['math']
# importujemy go ponownie
import math as m
# dostep do wartości PI i E
print('m.pi = ',m.pi,' type :', type(m.pi)) #m.pi =  3.141592653589793  type : <class 'float'>
print('m.e = ',m.e,' type :', type(m.e)) # m.e =  2.718281828459045  type : <class 'float'>
# dostep bez podania aliasu 

print('this.c = ',math.pi,' type :', type(math.pi)) # NameError: name 'math' is not defined
m.pi =  3.141592653589793  type : <class 'float'>
m.e =  2.718281828459045  type : <class 'float'>
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-24-c4f65d516bdb> in <module>()
      9 # dostep bez podania aliasu
     10 
---> 11 print('this.c = ',math.pi,' type :', type(math.pi)) # NameError: name 'math' is not defined

NameError: name 'math' is not defined

Często stosowane pakiety

In [25]:
# czesto wykorzystujemy aliasy przy imporcie znanych pakietow

import pandas as pd

# wersja pakietu pd

print (pd.__version__) # 0.20.3
# gdzie został zainstalowany pakiet

print(pd) # <module 'pandas' from '/home/nbuser/anaconda3_501/lib/python3.6/site-packages/pandas/__init__.py'>

import numpy as np

# wersja pakietu np
print (np.__version__) # 1.15.1

# gdzie został zainstalowany
print(np)

# import podmodułu pyplot z pakietu patplotlib jako alias plt

import matplotlib.pyplot as plt
%matplotlib inline

# Proste demo 

# generowanie 100 pseudolosowych liczb 

liczby=np.random.rand(100,1)

# budowa histogramu

plt.hist(liczby)

# wyswietlenie 

plt.show()
0.20.3
<module 'pandas' from '/home/nbuser/anaconda3_501/lib/python3.6/site-packages/pandas/__init__.py'>
1.15.1
<module 'numpy' from '/home/nbuser/anaconda3_501/lib/python3.6/site-packages/numpy/__init__.py'>

Importowanie obiektów do globalnej przestrzeni nazw

In [26]:
# importowanie z pakietu this wyłącznie zmiennej c

from this import c

print('c = ',c,' type :', type(c))

# importowanie z pakietu this wszystkich obiektow
# nie jest to polecane, gdzyż skutecznie zaśmieci 
# nam globalna przestrzeń nazw

c=15.0
print('c = ',c,' type :', type(c))

from this import *

# zmienna c została nadpisana wartością 97 z pakietu
print('c = ',c,' type :', type(c))
c =  97  type : <class 'int'>
c =  15.0  type : <class 'float'>
c =  97  type : <class 'int'>
In [29]:
# co jeśli brakuje nam zainstalowanego pakietu
# importujemy pakiet folium do wizualizacji map

import folium   # ModuleNotFoundError: No module named 'folium'

# pakiet nie został zainstalowany 
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-29-e188466ce0bb> in <module>()
      2 # importujemy pakiet folium do wizualizacji map
      3 
----> 4 import folium

ModuleNotFoundError: No module named 'folium'
In [30]:
# instalacja pakietu folium

# wykorzystujemy instalato pip dostepny z poziomu Pythona

!pip install folium 
Collecting folium
  Using cached https://files.pythonhosted.org/packages/88/89/8186c3441eb2a224d2896d9a8db6ded20ddd225f109e6144494a9893a0c1/folium-0.6.0-py3-none-any.whl
Requirement already satisfied: requests in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from folium) (2.19.1)
Requirement already satisfied: six in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from folium) (1.11.0)
Requirement already satisfied: numpy in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from folium) (1.15.1)
Requirement already satisfied: branca>=0.3.0 in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from folium) (0.3.0)
Requirement already satisfied: jinja2 in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from folium) (2.9.6)
Requirement already satisfied: certifi>=2017.4.17 in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from requests->folium) (2017.7.27.1)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from requests->folium) (3.0.4)
Requirement already satisfied: idna<2.8,>=2.5 in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from requests->folium) (2.6)
Requirement already satisfied: urllib3<1.24,>=1.21.1 in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from requests->folium) (1.23)
Requirement already satisfied: MarkupSafe>=0.23 in /home/nbuser/anaconda3_501/lib/python3.6/site-packages (from jinja2->folium) (1.0)
Installing collected packages: folium
Successfully installed folium-0.6.0
In [32]:
'''pojdzmy krok dalej i zbudujmy prosty mechanizam wykrywający 
ze dany pakiet nie jest zainstalowany '''

import sys
# sprawdzenie czy dany pakiet został zainstalowany
if  not 'folium' in sys.modules:
 # instalujemy pakiet
  !pip install folium

# importujemy pakietu
import folium
# sprawdzamy jego wersje 
print ('Folium version :',folium.__version__)
Folium version : 0.6.0