Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zadaci za wannabe pythoniste

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 22 23 24 25 26 27 28 29 30 31 ... Dalje > >>

[ Pregleda: 51771 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 05:20 - pre 48 meseci
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.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 05:37 - pre 48 meseci
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?
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 06:16 - pre 48 meseci
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
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 06:34 - pre 48 meseci
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!?

 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 10:32 - pre 48 meseci
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...
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 11:50 - pre 48 meseci
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?
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 12:51 - pre 48 meseci
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
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 13:12 - pre 48 meseci
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.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 13:25 - pre 48 meseci
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?
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 15:56 - pre 48 meseci
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) :))
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 16:18 - pre 48 meseci
Pa ajde razmisli kako bi ti implementirao. Ulazni parametri su niz i vrednost elementa.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 16:40 - pre 48 meseci
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!
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 16:45 - pre 48 meseci
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 :)
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste23.04.2020. u 16:52 - pre 48 meseci
"a ne tekućeg?"

Takvog parametra nema. Imas samo vrednost i niz. f-ja index ni ne zna da se for vrti...
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste24.04.2020. u 01:49 - pre 48 meseci
Vidim da nema i to mi je čudno.
A bilo bi i korisno da ima :)
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste24.04.2020. u 05:31 - pre 48 meseci
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
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.static.isp.telekom.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Zadaci za wannabe pythoniste24.04.2020. u 09:03 - pre 48 meseci
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, ...)
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
65.18.117.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste24.04.2020. u 09:32 - pre 48 meseci
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')) 
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste24.04.2020. u 09:48 - pre 48 meseci
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>()+" ")
}

 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 803



+634 Profil

icon Re: Zadaci za wannabe pythoniste24.04.2020. u 10:49 - pre 48 meseci
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.
 
Odgovor na temu

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 22 23 24 25 26 27 28 29 30 31 ... Dalje > >>

[ Pregleda: 51771 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.