Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 629 odgovora
  • 108.675 pregleda

Najnovija ↓

Re: Zadaci za wannabe pythoniste 23.04.2020. u 06:20 · pre 79 meseci #521
Nije u zadatku tj. u tekstu predviđeno da bude brojeva sa + i -.

Nego, probao sam nešto sa pozitivnim/negativnim brojevima u listi
i sabiranjem onih sa parnim indeksom,
pa mi nije jasno zašto petlja preskače jedan index. Na primer:

lista = [-37, -36, -19, -99, 29, 20, 3, -7, -64, 84, 36, 62, 26, -76, 55, -24, 84, 49, -65, 41]

Code:
for i in lista:
     if lista.index(i) % 2 == 0:
             print(lista.index(i), i)


i dobijem ovaj ispis, sa preskočenim indeksom [16]:

0 -37
2 -19
4 29
6 3
8 -64
10 36
12 26
14 55
18 -65


Hteo sam sve te brojeve da gurnem u nova_lista i uradim sum(nova_lista)
ali stalno sam dobijao pogrešan rezultat. Nije mi bilo jasno zašto, sve dok nisam napravio ispis.
Re: Zadaci za wannabe pythoniste 23.04.2020. u 06:37 · pre 79 meseci #522
To je zato sto index f-ja vraca prvi index elementa u nizu, a taj broj se vec nalazi na prethodnoj pozijiciji.
Da li postoji nacin da for vraca i index i broj kao sto recimo u Rustu to radis sa funkcijom enumerate?
Re: Zadaci za wannabe pythoniste 23.04.2020. u 07:16 · pre 79 meseci #523
Citat:
Da li postoji nacin da for vraca i index i broj kao sto recimo u Rustu to radis sa funkcijom enumerate

Da, sa enumerate funkcijom. ;) for i, v in enumerate(lista):...itd
Re: Zadaci za wannabe pythoniste 23.04.2020. u 07:34 · pre 79 meseci #524
Ovo je za mene vrlo čudno.
Očekivao sam da funkcija ide element po element i vraća index jedan za drugim.
Kakve veze ima što je isti element već bio u listi!?

Re: Zadaci za wannabe pythoniste 23.04.2020. u 11:32 · pre 79 meseci #525
Citat:
index() is an inbuilt function in Python, which searches for given element from start of the list and returns the lowest index where the element appears.

Dakle, index vraća poziciju PRVE pojave vrednosti u listi.

Ti u for petlji zaista dobijaš sve elemente liste, ali sa index dobijaš gde se element pojavio prvi put.

Da si napisao

for i in range(len(lista)):

dobio bi ono što si želeo, a to je indeks tekućeg elemnta u listi.

To je problem sa svakim programskim jezikom, obično dobiješ tačno ono što si napisao, a malo ređe ono što si želeo...
Re: Zadaci za wannabe pythoniste 23.04.2020. u 12:50 · pre 79 meseci #526
Jel tebi to logično?
Da petlja ide element po element redom, ali index ide samo do prvog pojavljivanja.
Očekivao bih da daje element i njegov index.

Da li se zna zašto je uzeto takvo rešenje?
Re: Zadaci za wannabe pythoniste 23.04.2020. u 13:51 · pre 79 meseci #527
Jedno je šta ti očekuješ, drugo je šta je NAPISANO u dokumentaciji.

Ono što je meni nelogično je što uopšte for petlja ide REDOM kroz listu.

U awk jeziku, recimo, foreach konstrukcija ide slučajnim redosledom kroz listu. Vraća sve elemente, ali ne onim redom kojim su uneti.
U SQL jeziku SELECT vraća redove u slučajnom rasporedu.

Ovo slučajno, treba čitati, onako kako je najbrže.
Generalno, hash tabele (a tako je implementirana lista u pythonu) elemente raspoređuju tako što je indeks elementa dobijen nekakvom transformacijum ključa.
Recimo da je indeks integer podatka dobijen tako što se radi mod 7 nad vrednošću.

Tako, kada upisuješ niz 1, 3, 5, 7, 8 tada su ti hash vreendosti 1, 3, 5, 0, 1
Ako bi hash tabelu čitao po redosledu ključeva, dobio bi niz 7, 1, 8, 3, 5
Re: Zadaci za wannabe pythoniste 23.04.2020. u 14:12 · pre 79 meseci #528
Citat:
a1234567:
Ovo je za mene vrlo čudno.
Očekivao sam da funkcija ide element po element i vraća index jedan za drugim.
Kakve veze ima što je isti element već bio u listi!?



To je zato sto funkcija ide redom kroz niz i vraca indeks prvog lelemnta cija se vrednost poklapa
sa parametrom.
Re: Zadaci za wannabe pythoniste 23.04.2020. u 14:25 · pre 79 meseci #529
Citat:
djoka_l:

Ono što je meni nelogično je što uopšte for petlja ide REDOM kroz listu.



Isti je i u Haskell-u, samo sto je u Haskellu u pitanju prava lista,
pa se indeks operacija retko koristi zato sto je O(n).
E sad da li se ovde uopste radi o listi ili je to zapravo niz,
kao u Rustu?
Re: Zadaci za wannabe pythoniste 23.04.2020. u 16:56 · pre 79 meseci #530
Citat:
Branimir Maksimovic:
Citat:
a1234567:
Ovo je za mene vrlo čudno.
Očekivao sam da funkcija ide element po element i vraća index jedan za drugim.
Kakve veze ima što je isti element već bio u listi!?



To je zato sto funkcija ide redom kroz niz i vraca indeks prvog lelemnta cija se vrednost poklapa
sa parametrom.


Onda su ga mogli nazvati i findex (od first index) :))
Re: Zadaci za wannabe pythoniste 23.04.2020. u 17:40 · pre 79 meseci #532
Nikako da ti zašrafimo glavu na pravo mesto?

Šta misliš da treba da vrati komanda:

'alabama'.index('a')

Code:

py
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 'alabama'.index('a')
0
>>>


Ti bi da ti index jednom vrati 0, pa 2, pa 4, pa 6.
A, ono, uvek vrati 0!
Re: Zadaci za wannabe pythoniste 23.04.2020. u 17:45 · pre 79 meseci #533
Da su me pitali, ja ne bih to komplikovao.
Koji je element, njegov i index i da te bog vidi:


Code:
lista = [37, 36, 19, 99, 36]

for i in lista:
    print(lista.index(i), i)

0 37
1 36
2 19
3 99
4 36


Zato sam pitao koja je logika postojećeg rešenja.
Koja je situacija kad je bolje da imaš indeks prvog istog elementa u nizu, a ne tekućeg?
Meni je to kontraintuitivno, ali bože moj, nije smak sveta. Guido tako rešio, nek mu je alal :)
Re: Zadaci za wannabe pythoniste 24.04.2020. u 06:31 · pre 79 meseci #536
Zanimljiv zadatak za početnike

Dat je string:
Code:
rečenica sa viškom       razmaka

koju treba ispisati inverzno, ali da svaka reč (kao i razmak) ostane na svom mestu.
Code:
acinečer as mokšiv       akamzar
Re: Zadaci za wannabe pythoniste 24.04.2020. u 10:03 · pre 79 meseci #537
Code:

s="recenica sa viskom       razmaka"
#s="  recenica sa viskom       razmaka"
#s="  "
#s=""
#s="r e c e n i ca"
#s="recenica"

i=0
s2=""
while ( i<len(s) ):
    if ( s[i] != " "):
        index = i
        length = 0
        while (i<len(s) and s[i] != " "):
            length+=1
            i+=1
        i-=1
        for j in range(length):
            s2+=s[index+length-1-j]
    else:
        s2+=" "
    i+=1
print(s)
print(s2)

Pazi, ja ne znam Python, sem baš elementarnog. Ovo je neko rešenje, ne baš skroz elegantno, da se još optimizovati.

Ako je ovi školski zadatak, onda treba videti šta je profesor zapravo želeo da vidi u rešenju (ugrađene funkcije, posebne funkcije, sintaksni slice, ...)
Re: Zadaci za wannabe pythoniste 24.04.2020. u 10:32 · pre 79 meseci #538
Pozdrav, Vladimire, supermoderatoru,
doborodošao na temu :)

Nije to zadatak za profesora, već sam ja pod stare dane rešio da sam sebe nešto naučim o programiranju, od kojeg pre dva meseca nisam znao ni "p".
A evo pomaže mi i nekoliko "profesora" ovde, dovoljno ljubaznih da priskoče u pomoć kad mi zapne. A zapne često :)

Dakle, kad nađem neki meni zanimljiv zadatak, ja ga ovde okačim.
Ovaj sam našao na https://checkio.org/, gde sam krenuo da rešavam gomilu zadataka od početka. Pa dokle stignem.

Moje rešenje za ovaj zadatak je (tamo traže da bude u formi funkcije):

Code:
import re

def string_unazad(text: str) -> str:
    reci = re.split(r'(\s+)', text)
    nove_reci = [rec[::-1] for rec in reci]
    nova_recenica = "".join(nove_reci)
    return nova_recenica

if __name__ == '__main__':
    print("Primer:")
    print(string_unazad('recenica sa viskom       razmaka')) 
Re: Zadaci za wannabe pythoniste 24.04.2020. u 10:48 · pre 79 meseci #539
Evo i Rusta ;)
Code:

fn main() {
    let s = "rečenica sa viškom       razmaka";
    println!("{}",rev_words(s));
}

fn rev_words(words:&str)->String {
    words.to_string().split(' ').fold("".to_string(),|v,x| v +
                   &x.to_string().chars().rev().collect::<String>()+" ")
}

Re: Zadaci za wannabe pythoniste 24.04.2020. u 11:49 · pre 79 meseci #540
Citat:
a1234567:
Zadatak 34:
Napisati funkciju koja će u datom engleskom tekstu izračunati zbir brojeva.
Računaju se samo posebni brojevi. Ako je broj deo reči, ne ulazi u zbir.
'Petersen between 1845 and 1910 year') == 3755
'2020-02-20' == 2062

Ima vise resenja, koja se svode na isto: sve sto nije cifra zameniti razmkom, pa onda udariti split() i sabrati. Osnovacko reesnje:
Code (python):

def sum_numbers(text):
    sum = 0
    newtext = ''
    text = text.lower()
    text = text.replace('1st', ' ')
    text = text.replace('2nd', ' ')
    text = text.replace('3rd', ' ')
    for ch in text:
        newtext += ch if ch.isdigit() else ' '
    for n in newtext.split():
        sum += int(n)
    return sum
 


Resenje sa regularnim izrazima:
Code (python):

import re

def sum_numbers(text):
    sum = 0
    for n in re.sub('\D', ' ', re.sub('1st|2nd|3rd', ' ', text.lower())).split():
        sum += int(n)
    return sum
 


ili, da bude jasnije:

Code (python):

import re

def sum_numbers(text):
    sum = 0
    text = re.sub('1st|2nd|3rd', ' ', text.lower())  # Zameni 1st, 2nd i 3rd razmaknicom
    text = re.sub('\D', ' ', text)                         # Zameni sve non-digit znakove razmaknicom
    for n in text.split():
        sum += int(n)
    return sum
 


U ovom gornjem reesnju smo najpre zamenili stringove '1st', '2nd' i '3rd' razmakom. Slucaj radi i za '1ST', '2nD' i tome slicno, za sta se pobrinuo lower(). Potom u takvom stringu zamenimo sve znake koji nisu cifre (regexp '\D'). Ostatak je identican - split() to pretvori u niz kontinualnih karaktera (npr. ' 4 55 6666 ' daje ['4', '55', '6666']), sto onda saberemo.

Ako treba uzeti u obzir i znake + i -, tada je prica malcice slozenija, ali ne preterano. Najpre treba razdvojiti + i - znake koji stoje uz cifre i one koji ne stoje uz cifre. Npr. '-G' i '+A' s uobicni stringovi, dok su '-3' i '+123' brojevi. Najlakse je primeniti:
text = text.replace('-', ' -0').replace('+', ' +0')

Primer:
Code (python):

>>> text='44, is - -G 2002-02+02'
>>> text = text.replace('-', ' -0').replace('+', ' +0')
>>> text
'44, is  -0  -0G 2002 -002 +002'
 

Potom zamenimo sve sto nije cifra, + ili -:
Code (python):

>>> re.sub('[^\d+-]', ' ', text)
'44      -0  -0  2002 -002 +002'
 

Nadalje je lako, split() ce ovo gore da pretvori u niz, a int(-0) i int(+0) je uvek 0.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme