# Initialize the counter
i = 1

# Loop while printing out and incrementing the values of the counter
while i <= 10:
    print(i)
    # Increment the counter inside the loop
    i = i + 1 

"""
Explanation: U programiranju, često se javlja potreba da se neki delovi koda izvrše više puta. U tim situacijama, koriste se petlje.
Petlja <i>while</i>
Za petlju tipa <i>while</i>, u Pajtonu se koristi ključna reč <b>while</b>. Kod ovog tipa petlje, telo petlje se izvršava dok god je uslov koji smo zadali zadovoljen.
U sledećem primeru, uslov će biti da je vrednost promenljive <i>i</i> manja od 10, a u telu petlje ćemo prikazivati trenutnu vrednost promenljive <i>i</i> i uvećavati je za 1.
End of explanation
"""


# Obtain the required number of passes from the user
num_passes = int(input("How many rows would you like printed?\n"))

# Initialize the counter
i = 1

# Loop and print the required number of rows
while i <= num_passes:
    if (1 == i):
        print("Here is the first row.")
    elif (num_passes == i):
        print("Here is the last (%dth) row." % i)
    else:
        print("Here is another row.")
    
    # Increment the counter inside the loop
    i += 1 # "i += x" is equivalent to "i = i + x"

"""
Explanation: U sledećem primeru, broj ponavljanja zavisiće od broja koji korisnik unese s tastature, a prvi i poslednji prolazak kroz petlju razlikovaće se od ostalih.
End of explanation
"""


# Obtain the required number of passes from the user
num_passes = int(input("How many rows would you like printed?\n"))

# Print the first row BEFORE entering the loop
print("Here is the first row.")

# Initialize the counter to 2, because the first row has already been printed
i = 2

# Print the "middle rows" - all rows except the first and the last one
while (i <= num_passes - 1):
    print("Here is another row.")
    i += 1

# Print the last row AFTER finishing the loop
print("Here is the last (%dth) row." % i)

"""
Explanation: Realizovaćemo istu funkcionalnost iz prethodnog primera na drugačiji način, tako što ćemo štampanje prvog i poslednjeg reda izmestiti iz petlje. Prvi red ćemo štampati pre petlje, a poslednji posle petlje.
End of explanation
"""


for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    print(i)

"""
Explanation: Petlja <i>for</i>
Još jedan tip petlje u Pajtonu je petlja <i>for</i>, koja se realizuje korišćenjem ključnih reči <b>for</b> i <b>in</b>. Sledi primer u kojem se na ekranu štampaju prirodni brojevi od 1 do 10, kao u prvom primeru petlje <i>while</i>.
Osim ključnih reči <b>for</b> i <b>in</b>, još nešto što koristimo kod petlji tipa <i>for</i> jeste tip podataka koji se naziva listom (eng. <i>list</i>). Lista se obeležava otvorenom uglastom zagradom, listom njenih elemenata razdvojenih zapetama i zatvorenom uglastom zagradom, tim redosledom. Listom zadajemo vrednosti kroz koje petlja prolazi u svojim ponavljanjima - u svakom ponavljanju Pajton će uzimati naredni unos iz liste. Ovakav način rada petlje <i>for</i> razlikuje se od tradicionalnih programskih jezika, i više liči na ono što se naziva <i>for each</i> ili <i>foreach</i> u mnogim programskim jezicima koji su u vreme nastajanja Pajtona bili popularni.
End of explanation
"""


my_list = range(10) # starting from 0, 10 not included
for i in my_list:
    print(i)

"""
Explanation: Funkcija <i>range</i>
Kako ne bismo svaki put prilikom korišćenja petlje <i>for</i> eksplicitno navodili elemente liste, možemo koristiti funkciju <i>range</i>, koja služi za generisanje liste.
Ukoliko funkciji <i>range</i> prosledimo jedan argument, ona će generisati listu svih brojeva od 0 do datog broja, <b>ne uključujući dati broj</b>. Kada funkciji <i>range</i> prosledimo broj <i>N</i> kao argument, ona će generisati listu od ukupno <i>N</i> elemenata.
End of explanation
"""


for i in range(8, 13): # 8 included, 13 not included
    print(i)

"""
Explanation: Možemo joj proslediti i dva argumenta, koje će ona tumačiti kao početni i krajnji broj u intervalu zatvorenom s leve strane (prvi broj pripada intervalu, dok poslednji broj ne pripada intervalu).
End of explanation
"""


for i in range(10, 20, 2):
    print(i)

"""
Explanation: Ukoliko funkciji <i>range</i> prosledimo tri argumenta, ona će prvi tumačiti kao početak, a drugi kao kraj intervala zatvorenog s leve strane. Treći argument je korak kojim će niz brojeva u ovom intervalu napredovati (aritmetički).
End of explanation
"""


# Prints the ith element of a list of integers
def print_ith_element(input_list, i):
    print("The %dth element of the list is %d" % (i, input_list[i]))

# Define a list
my_list = [10, 20, 30, 40, 50]

# Print out a few elements of the list
print_ith_element(my_list, 0)
print_ith_element(my_list, 2)
print_ith_element(my_list, 4)

"""
Explanation: Neke operacije nad listama
Za pristupanje elementu liste koriste se uglaste zagrade. Između uglastih zagrada navodi se pozicija elementa kojem želimo da pristupimo - njegov <i>indeks</i>. U listi od <i>N</i> elemenata, prvom elementu liste odgovara indeks 0 (nula), a poslednjem - indeks <i>N</i> - 1.
End of explanation
"""


my_list = [100, 200, 300, 400, 500, 600, 700, 800]

my_list[3] = -1

print(my_list) # The print function can take a list as an argument and print out all of its elements

"""
Explanation: Korišćenjem uglastih zagrada možemo promeniti sadržaj liste, odnosno vrednost nekog njenog elementa.
End of explanation
"""


list1 = [1, 2, 3]
list2 = range(10)

len1 = len(list1)
len2 = len(list2)

print("The length of the first list is %d and the length of the second list is %d" % (len1, len2))

"""
Explanation: U Pajtonu postoji mnogo funkcija za rad s listama, poput funkcije <i>len</i> koja računa dužinu liste.
End of explanation
"""


my_str = "My string"

print(my_str[0])
print(my_str[3])
print(my_str[8])

"""
Explanation: Petlje i stringovi
String se može shvatiti kao niz karaktera, pa možemo koristiti petlje sa stringovima na sličan način na koji ih koristimo s listama.
Indeksiranje
End of explanation
"""


my_str = "My string"

print("String length is %d" % len(my_str))

"""
Explanation: Dužina stringa
End of explanation
"""


my_str = "My string"

# Initialize counter
cnt = 0

while cnt < len(my_str):
    print("Character number %d is %s" % (cnt, my_str[cnt]))
    cnt += 1

"""
Explanation: Iteriranje petljom <i>while</i>
End of explanation
"""


my_str = "My string"

for character in my_str:
    print(character)

"""
Explanation: Iteriranje petljom <i>for</i>
End of explanation
"""


columns = ["A", "B", "C", "D", "E", "F", "G", "H"]
rows = [1, 2, 3, 4, 5, 6, 7, 8]

for c in columns:
    for r in rows:
        # Print a column-row combination
        #
        # Set print function's optional argumnt end to an
        # empty string to avoid going to a new line after each print
        print("%s%s " % (c, r), end="")
    
    # After each printed rown, print a newline to make it look like a chess board
    print("\n")

"""
Explanation: Ugnježdene petlje
U telu petlje mogu se naći bilo koje instrukcije koje Pajton prepoznaje, pa se tako može naći i zaglavlje nove petlje. Ovo se naziva ugnježdenim petljama. Sledeći primer prikazaće sva polja na šahovskoj tabli. Polje na šahovskoj tabli određeno je kolonom i redom. Kolone se obeležavaju slovima od A do H, a redovi brojevima od 1 do 8.
End of explanation
"""


columns = ["A", "B", "C", "D", "E", "F", "G", "H"]
rows = [1, 2, 3, 4, 5, 6, 7, 8]

# The length of the lists
len_c = len(columns)
len_r = len(rows)

# Initialize the column counter
cnt_c = 0

while cnt_c < len_c:
    # Initialize the row counter
    # The row counter needs to be re-initialized to zero each time
    # we move to a new column. That's why we t inside the column loop
    cnt_r = 0
    
    while cnt_r < len_r:
        # Print a column-row combination
        #
        # Set print function's optional argumnt end to an
        # empty string to avoid going to a new line after each print
        print("%s%s " % (columns[cnt_c], rows[cnt_r]), end="")
        
        # Increment the row counter
        cnt_r += 1
        
    # Increment the columnt counter
    cnt_c += 1
        
    # After each printed rown, print a newline to make it look like a chess board
    print("\n")

"""
Explanation: Isto se može postići korišćenjem petlje <i>while</i>.
End of explanation
"""


