# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# + [markdown] id="758bd470-c690-42fc-a07a-37b57c123590"
# ## Instrukcje warunkowe 
#
# Często naszym celem jest wykonywanie instrukcji tylko w określonych przypadkach. Język Pythonk podobnie jak w arkuszach Excel umożliwia wykorzystanie instrukcji *if*. 
#
# Podobnie jak w przypadku pętli kod takiej wewnątrz takiej instrukcji wymaga wcięcia. Ma ona następującą składnie:

# + id="247668d6-fea8-4ca1-8c6c-39f648ccd1ca"
a = input("Wybierz liczbę")
print("\n")

if int(a)> 5:
    print("Wybrałeś", a)

# + [markdown] id="90871a6a-ef25-4a4d-89a1-2a91da69a167"
# Dla każdej instrukcji możemy też określić działania jakie zostaną podjęte, kiedy warunek nie zostanie spełniony. Służy do tego instrukcja *else*.
#
# Składnia prezentowana jest w bloku na dole:

# + id="830692c9-59e8-43c7-a6d5-94fd74a1365b"
a = input("Wybierz liczbę")
print("\n")

if int(a)> 5:
    print("Wybrałeś", a)
else:
    print("Ta liczba jest za mała")

# + [markdown] id="e519faf6-a06b-4841-b916-7cfb05e657e7"
# Możemy określić także kilka warunków. Aby to wykonać wykorzystujemy instrukcje *elif*:

# + id="0c4fa672-f4d2-4df3-ab0f-58c44d9335df"
a = input("Wybierz liczbę")
print("\n")

if int(a)> 5:
    print("Wybrałeś", a)
elif int(a)>= 0 and int(a) < 5:
    print (a, " to za mało.")
else:
    print("Ta liczba jest ujemna")

# + [markdown] id="34ae0f00-1818-45f2-b4da-e8dce474a471"
# ## Filtrowanie list
#
# W pracy z danymi będziemy wykorzystywać instrukcje warunkowe, wspólnie z pętlami, aby odpowiednio przetwarzać dane. Spójrzmy na przykład poniżej: 

# + id="a69446df-51c0-40eb-88fd-7f65ed75452e"
players = [ ("Lewandowski", "PL"),
            ("Mbappe", "FR"),
            ("Ronaldo", "PT"),
            ("Zieliński", "PL"),
            ("Locatelli", "IT"),
            ("Szczesny", "PL")]

polishPlayers = []

for element in players:
    if element[1] == "PL":
        polishPlayers.append(element)
        
print(polishPlayers)

# + [markdown] id="76fc9f37-884c-402e-b163-4b2ed22b30e7"
# **Pytanie**: Jak rozbudować ten kod, aby stworzyć drugą listę z zagranicznymi piłkarzami?

# + [markdown] id="f4b23ac5-5a38-4feb-b734-4de4553fd4e1"
# ### Szybki zapis pętli
#
# Podobnie jak w przypatku pętli *for*, także dołożenie takiego warunku ma swój szybki wariant. Wystarzy dodać na końcu instrukcję *if* z odpowiednim warunkiem. Przykład poniżej:

# + id="cfc7fd15-3369-4196-876b-601153f59253"
players = [ ("Lewandowski", "PL"),
            ("Mbappe", "FR"),
            ("Ronaldo", "PT"),
            ("Zieliński", "PL"),
            ("Locatelli", "IT"),
            ("Szczesny", "PL")]

polishPlayers = [element for element in players if element[1] == "PL"]
print(polishPlayers)

# + [markdown] id="H9SF47ZA2q3J"
# ### Przykład - rozpoznawanie języka

# + [markdown] id="Y32nmc-K5Ds6"
# Pora pokazać przykład. Chcemy przeszukać i pobrać filmy Youtube z wielojęzycznego serwisu [Serie A](https://www.youtube.com/channel/UCBJeMCIeLQos7wacox4hmLQ) (ligi włoskiej). Interesują nas tylko filmy po angielsku, bo nie znamy włoskiego. 
#
# Ma to też duże znaczenie pragmatyczne: Nawet po takim ograniczeniu pojedynczy sezon to 20GB danych. Ściąganie wszystkiego szybko zapcha dysk twardy.
#
# Rozpoznanie języka można wykonać przy pomocy dwóch algorytmów od Google CLD2 i CLD3. Każdy z nich ma w Python paczkę, która zrobi to jedną komendą. Przykłady wykonamy na CLD2:

# + id="NF2fCZ6w2qls"
pip install pycld2

# + [markdown] id="AWO6cvMD2_yU"
# Na początku przyjrzymy się wydrukom z paczki CLD2. Przy okazji zobaczycie pewne ograniczenia algorytmów rozpoznawania tekstu. Inspirację stanowi ten [film](https://www.youtube.com/watch?v=DaWkSAsBdU4)   

# + id="Mg4JWSUB3AF5"
import pycld2 as cld2

isReliablePOL, textBytesFound, detailsPOL = cld2.detect("Wojciech Szczęsny obronił trudny strzał")
isReliableITA, textBytesFound, detailsITA = cld2.detect("La parata di Szczesny")

#Wydruk tekstu z polskiego
print(isReliablePOL)
print(detailsPOL)

#Wydruk tekstu z Włoskiego:
print(isReliableITA)
print(detailsITA)


# + [markdown] id="2P2wnpYnAh0_"
# Połączymy pętle *for* i instrukcje *if*, aby rozpoznać tylko filmy z angielskim tytułem. Zwróccie uwagę, że poza wykorzystaniem CLD2 wszystkie działania zostały omówione wcześniej na kursie:

# + id="ANFm5d6J6YdJ"
#Lista zawiera ID filmu z Youtube na pozycji 0 oraz tytuł na pozycji 1. Wykorzystamy paczkę CLD2 do wyfiltrowania tekstów 
listReplaysSerieA = [("BoZul5gp74Y",	"The race for Champions League hots up! | EVERY Goal | Round 33 | Serie A TIM"),
                     ("ceTWKWJhs0M",	"Lazio 3-0 Milan | Doppio Correa e Immobile! | Serie A TIM"),
                     ("jn9N72zCMFE",	"Lazio 3-0 Milan | Inzaghi & Pioli Post Match Press Conference | Serie A TIM"),
                     ("YCw4G1hWxbc",	"Lazio 3-0 Milan | Correa Hits Brace in HUGE Win!  | Serie A TIM"),
                     ("aHBx-Hyhllk",	"Torino 0-2 Napoli | Bakayoko e Osimhen agganciano la Juve | Serie A TIM")]

#Zaczynamy od pustej listy
EnglishReplaysSerieA = []

for element in listReplaysSerieA:
    print("Sprawdzam język elemmentu", listReplaysSerieA.index(element), ":")
    #Wykorzystujemy w petli instrukcję cld2.detect aby rozpoznawać język kolejnych tytłów - robie wydruki:
    isReliable, textBytesFound, details = cld2.detect(element[1])    
    print("Czy dopasowanie jest wiarygodne:", isReliable, sep = "\t")
    print("Wyniki:", details, sep = "\t")
    print("\n")

    #Jezyk filmu to pierwszy element pierwszej krotki z listy - zapiszmy to do osobnej zmiennej.
    filmLanguageInfo = details[0]
    filmLanguageText = filmLanguageInfo[0] 

    #Jezeli algorytm zwrócic język angielski dodajmy element do listy:
    if filmLanguageText == "ENGLISH":
        EnglishReplaysSerieA.append(element)

print("Końcowa zawartość listy angielskich filmów:")
print(*EnglishReplaysSerieA, sep = "\n")


# + [markdown] id="LyyCH2_ABYZv"
# ## Instrukcje continue i break
#
#

# + [markdown] id="bL0cEKvYB5Cf"
# Czasami potrzebujemy odwrotnej logiki - jeżeli warunek jest spełniony to nie chcemy wykonywać określonych instrukcji. W takim przypadku pomagają dwie instrukcje *continue* oraz *break*.
#
# Instrukcja *continue* spowoduje, że pętla przejdzie do następnego obiektu bez wykonywania linijek kodu, które nastąpiły po niej. 

# + id="icHYUF_wBdPW"
listaLiczb = [5, 6, 10, 2, 22, 3 ]

liczbyMniejszeOd10 = []

for element in listaLiczb:
  print("\n")
  print("Sprawdzam wartość: ", element)
  
  if element >= 10:
    continue
  
  # Ten kod nie zostanie wykonany w momencie, gdy wartość elementu jest większa lub rónwa 10.   
  print("Dodaje wartość: ", element)
  liczbyMniejszeOd10.append(element)

print("\n", "Finalny kształt listy:", sep="")
print(liczbyMniejszeOd10)

# + [markdown] id="TbRh9vWtC_Jf"
# Instrukcja *break* calkowicie zawiesi wykonanie pętli:

# + id="ccy2YB9bDDUc"
listaLiczb = [5, 6, 10, 2, 22, 3]

liczbyDoPierwszejDwucyfrowej = []

for element in listaLiczb:
  print("\n")
  print("Sprawdzam wartość: ", element)
  
  if element >= 10:
    break
  
  # Ten kod nie zostanie wykonany w momencie, gdy wartość elementu jest większa lub rónwa 10.   
  print("Dodaje wartość: ", element)
  liczbyDoPierwszejDwucyfrowej.append(element)

print(liczbyDoPierwszejDwucyfrowej)

StarcoderdataJupyterScriptsDedupFiltered