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

Zadaci za wannabe pythoniste

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

Strane: < .. 1 2 3 4 5 6 7 8 9 ... Dalje > >>

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste20.12.2019. u 16:04 - pre 52 meseci
Ova tema, od kada sam je otvorio pre deset dana ima skoro 2500 pregleda.
Izgleda ima dosta onih koji gledaju sa strane, ali se ne hvataju tastature
Ne stidite se, slobodno se uključite, od mene sigurno više znate. Ja učim python eto cele dve nedelje

I zato evo nova šansa i novi zadatak za ove što vole da šifriraju i hakerišu!

Zadatak broj 5: Cezarova šifra

Jedan od prvih poznatih primera šifriranja koristio je Julije Cezar. Slao je pisana naređenja svojim generalima, ali nije želeo da ona padnu u neprijateljske ruke. Zato je razvio sistem koji će kasnije biti nazvan Cezarova šifra. A ideja je bila sasvim jednostavna (i zato je ovako kodiran tekst lako dešifrovati savremenim tehnikama), a sastojala se u tome da se svako slovo u originalnoj poruci pomeri za tri mesta u abecedi. Tako A postaje D, B postaje E, C postaje F itd. Poslednja tri slova abecede se tako pomeraju na početak, pa X postaje A, Y postaje B, a Z postaje C. Znakovi interpunkcije su ostajali nepromenjeni. Naravno, mi ćemo koristiti našu latinicu:

abcčćddžđefghijklljmnnjoprsštuvzž

Napiši program koji rešava Cezarovu šifru. Korisnik unosi poruku i broj slova za koliko će biti pomeranje kod šifriranja. Program zatim ispisuje šifriranu poruku. Vodi računa da program šifrira i velika i mala slova. Tvoj program bi takođe trebalo da podržava pomeranje za negativan broj, tako da može i da kodira i da dekodira poruke.

Ajde sad. Lako je )

[Ovu poruku je menjao a1234567 dana 20.12.2019. u 18:14 GMT+1]
 
Odgovor na temu

BogOtac

Član broj: 341568
Poruke: 5
*.dynamic.vipmobile.rs.



+1 Profil

icon Re: Zadaci za wannabe pythoniste20.12.2019. u 16:22 - pre 52 meseci
Mene zanima (da vi mene kažete) zašto, kad kompajliram program u .exe jako sporo se pokreće.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste20.12.2019. u 16:39 - pre 52 meseci
Imam i ja jedno pitanje za tebe.

Što ne otvoriš posebnu temu, pa pitaš, ko što je red?
Ova je za zadatke, kao što piše na ulazu :)
 
Odgovor na temu

BogOtac

Član broj: 341568
Poruke: 5
*.dynamic.vipmobile.rs.



+1 Profil

icon Re: Zadaci za wannabe pythoniste20.12.2019. u 16:45 - pre 52 meseci
Pa zgodno mi je ovde, pre će da vide ljudi. :)
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste21.12.2019. u 16:25 - pre 52 meseci
Evo izborih se nekako sa ovim zadatkom, doduše polovično.


Code:
# Cezarova šifra
poruka = input('Unesi poruku: ')
pomeranje = input('Za koliko mesta pomeriti slova? ')

abc = ['a', 'b', 'c', 'č', 'ć', 'd', 'dž',
       'đ', 'e', 'f', 'g', 'h', 'i', 'j',
       'k', 'l', 'lj', 'm', 'n', 'nj', 'o',
       'p', 'r', 's', 'š', 't', 'u', 'v', 'z', 'ž']

for i in poruka:
    if i in abc:
        ind = abc.index(i)
        ind2 = ind + int(pomeranje)
        if ind2 > 26:
            ind2 = ind2 - 30
        else:
            ind2 = ind2
        slovo = abc[ind2]
        print(slovo, end='')

    else:
         i == i
         slovo = i
         print(slovo, end='')

Ispis na ekranu:


>>> Unesi poruku: Ovo je poruka.
>>> Za koliko mesta pomeriti slova? 4
Obš mi tšuanć.

>>> Unesi poruku: Obš mi tšuanć.
>>> Za koliko mesta pomeriti slova? -4
Ovo je poruka.


Radi i šifrovanje i dešifrovanje.
Ali postoji problem sa našim slovima koja imaju dva znaka: lj, nj, dž.
Jer petlja ide slovo po slovo, pa ih tretira odvojeno kod dešifrovanja.
Jedino da se dopisujemo na engleskom :=))
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste22.12.2019. u 14:48 - pre 52 meseci
Ovaj tvoj program je loš po toliko mnogo osnova, da će objašnjenje šta je loše biti mnogo duže od samog programa.
Nemoj ovo da shvatiš kao napad na tvoju ličnost, nadam se da ćeš iz ovoga nešto da naučiš

Da krenem redom:

Code:
ind2 = ind + int(pomeranje)


je bezveze, jer u svakom prolazu kroz petlju ponovo radiš konvertovanje u int. Umesto toga, dovoljno je da to uradiš jednom, pre petlje

Code:
pomeranje = int(input('Za koliko mesta pomeriti slova? '))

Code:
else:
  ind2 = ind2

je besmisleno, uopšte ti ne treba taj else. if može da bude i bez else dela

Code:
        ind = abc.index(i)
        ind2 = ind + int(pomeranje)
        if ind2 > 26:
            ind2 = ind2 - 30
        else:
            ind2 = ind2
        slovo = abc[ind2]
        print(slovo, end='')


je višestruko loše. Bezveze koristiš varijable ind, ind2 slovo. Koristiš ono što se zove "magični brojevi". Imaš 26 i 30, a na oba mesta treba da bude 30. Python oprašta greške i dozvoljava negativne vrednoste indeksa, ali samo pukim slučajem program radi.

Code:
    else:
         i == i
         slovo = i
         print(slovo, end='')


Uh, "i==i" - ZAŠTO TO PIŠEŠ??? čak i da si hteo da napišeš i=i to ti ne treba. Zar nije jednostavnije da samo staviš print(i, end='')

Evo tvog programa, bez ulaženja u ispravku logike, koji radi isto što i tvoj kod, samo malo ispravnije:

Code:

# Cezarova šifra
poruka = input('Unesi poruku: ')
pomeranje = int(input('Za koliko mesta pomeriti slova? '))

abc = 'abcčćdđefghijklmnoprsštuvzž'
n=len(abc)

for i in poruka:
    if i in abc:
        print(abc[(abc.index(i)+pomeranje) % n], end='')
    else:
         print(i, end='')


Problem sa slovima lj, nj i dž je REŠEN. Tretiraju se kao dva slova.
Uzmi reči nadživeti, konjunkcija, injekcija. Ovo su slučajevi kada znaci dž i nj predstavljaju DVA slova. Ne mogu da se setim primera da je nekada i lj dva slova.

Sada još samo da rešiš problem velikih slova, pa si rešio zadatak...
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste22.12.2019. u 15:21 - pre 52 meseci
Evo ti varijanta programa koja zna da radi i sa velikim slovima.

Code:
# Cezarova šifra
poruka = input('Unesi poruku: ')
pomeranje = int(input('Za koliko mesta pomeriti slova? '))

abc = 'abcčćdđefghijklmnoprsštuvzž'
n=len(abc)

for i in poruka:
    c=i.lower()
    up=i.isupper()
    if c in abc:
        s=abc[(abc.index(c)+pomeranje) % n]
        print(s.upper() if up else s, end='')
    else:
        print(i, end='')
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste22.12.2019. u 16:13 - pre 52 meseci
Pozdrav Đoko,
Veliko hvala na trudu. Upravo mi to treba, povratna informacija i komentar za moj program, kako bih nešto naučio i ispravio greške.
Jer ja u stvari još ništa ne znam. Više nagađam i guglujem, nego što sam siguran kako treba. Ali valjda je to tako uvek u početku.

Dakle, uopšte ne shvatam tvoje komentare kao napad na ličnost, već sam zahvalan što si se uopšte potrudio da pogledaš šta sam uradio.
To mu dođe kao kad nastavnik ispravi domaći zadatak crvenom olovkom, pa iz grešaka učenik nešto nauči. :)

Proučiću pažljivo prvo tvoje komentare, a onda i rešenje koje si ponudio.
Ako budem imao dodatnih pitanja, šaljem i njih.

HVALA JOŠ JEDNOM ZA TRUD!
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste22.12.2019. u 17:29 - pre 52 meseci
Proučio sam primedbe. Uglavnom su mi jasne i vidim gde sam grešio.
Suviše mnogo koraka tamo gde je moguće pojednostaviti.

Nisam se setio da za oduzimanje iskoristim modulo.
Valjda zato što mi je ostalo u glavi da je on za deljenje.

Novost je za mene i da if ne mora da ima else.
Zato sam i pisao to što sam pisao, da nešto bude i u else :))
I naravno to je višak.

Najviše mi se od svega sviđa abc string bez lj, nj, i dž.
Odlična ideja. Ja sam video problem tamo gde ga nema.

Stavio sam i moju (apdejtovanu) i tvoju verziju programa ovde, ako nekom zatreba.

 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2699



+698 Profil

icon Re: Zadaci za wannabe pythoniste22.12.2019. u 17:52 - pre 52 meseci
Sledeći korak: napraviti rešenje koje koristi chr() i ord() funkcije, a radi i za naša slova - za engleski alfabet može da se realizuje jednom linijom koda :)
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste23.12.2019. u 05:02 - pre 52 meseci
Bolje uradi rot13 to se bar koristi.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste23.12.2019. u 16:48 - pre 52 meseci
Idemo dalje.
Za opuštanje jedan sasvim lak zadatak, čak i meni :)

Zadatak broj 6

Treba zvezdicama iscrtati pravougaonik.
Jedan način je naravno ovako, ali je tada veličina fiksirana.
Code:
print('************')
print('*          *')
print('*          *')
print('*          *')
print('************')

Napravi programčić gde korisnik može da unese željenu širinu i visinu budućeg pravougaonika/kvadrata.

Ja sam svoje rešenje sačuvao ovde.
 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2699



+698 Profil

icon Re: Zadaci za wannabe pythoniste23.12.2019. u 23:56 - pre 52 meseci
Else blok može u jednoj liniji (doduše, manje jasno, ali zanimljivo za razmišljanje):
Code:
    for i in range (y):
        print('*' + ('*' * (x-2) if (i == 0 or i == y-1) else ' ' * (x-2)) + '*')

Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 01:51 - pre 52 meseci
ja sam ovo tvoje ('*' + ('*' * (x-2) malo pojednostavio
Code:
for i in range (y):
        print('*' * x) if (i == 0 or i == y-1) else print('*' + ' ' * (y+2) + '*')


E sad mi je bilo zanimljivo da sam morao da stavim print i posle else, inače ne radi program kako treba.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 08:30 - pre 52 meseci
Citat:
E sad mi je bilo zanimljivo da sam morao da stavim print i posle else, inače ne radi program kako treba.


Obrati pažnju na zagrade!!

mjanjic je napisao izraz

print ( NEŠTO if USLOV else NEŠTODRUGO )

ti si napisao

print ( NEŠTO ) if USLOV else print ( NEŠTODRUGO )

 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 08:47 - pre 52 meseci
Aha, dobro.
Sad i moja verzija radi bez drugog print,
kad sam uklonio višak zagrada

Code:
x = 10
y = 6

for i in range (y):
        print('*' * x if i == 0 or i == y-1 else '*' + ' ' * (y+2) + '*')
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 09:02 - pre 52 meseci
To što si ti napisao nije greška.

U tom primeru, if-else konstrukcija je TERNARNI operator, odnosno operator koji računa sa tri izraza.
Kao što je "+" BINARNI operator i <izraz> + <izraz> je BINARNA operacija koja kao rezultat vraća <izraz>, tako i

<izraz> if <logicki_izraz> else <izraz>

ternarna operacija koja vraća vrednost.
Ti sada možeš da koristiš povratnu vrednost za nešto drugo, recimo za print:

print( <izraz> if <logicki_izraz> else <izraz> )

a može i sam izraz da bude print() ili neka druga funkcija.

Dakle ispravno je i
print( <izraz> if <logicki_izraz> else <izraz> )
i
print( <izraz> ) if <logicki_izraz> else print( <izraz> )

Samo treba da znaš zašto se to dešava.
A da je i print() funkcija, vidi se jasno jer sve funkcije se pozivaju kao ime_funkcije( argumenti ) (bitno je da stoji zagrada posle imena). Tako je, bar u pythonu 3.
Da je print funkcija, koja vraća neku vrednost, možeš i sam da proveriš sa:

print( print ('x') )
 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2699



+698 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 09:19 - pre 52 meseci
Ja sam hteo još "komplikovanije" da napravim koristeći product() ili neki drugi način da izbegnem petlje, nego da na neki drugi način realizujem iscrtavanje karaktera u formi pravougaonika, ali sam odustao. Moglo bi kao dvostruki niz pa da posle odštampa samo elemente niza, ali da bi se taj niz formirao treba poprilično koda.

Drugi problem, koji mi je bio interesantniji, jeste da se detektuje rezolucija ekrana i/ili broj karaktera koji može da se ispiše horizontalno i vertikalno pa da se zvezdice odštampaju samo uz ivicu, međutim tu je potrebna dodatna biblioteka, čija primena se dodatno komplikuje ako je uključeno skaliranje (obično kod 2k displeja sa malim ekranima i većine 4k displeja), ali nigde nisam našao mogućnost da se detektuju dimenzije "output" box-a (npr. kod onlih online interpretera), tj. moramo ih znati unapred.
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
82.117.201.26



+1064 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 09:45 - pre 52 meseci
Na Linux-u imas environment variable LINES i COLUMNS...
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 10:24 - pre 52 meseci
Citat:
mjanjic:
Ja sam hteo još "komplikovanije" da napravim koristeći product()...

Janjiću samo bez komplikovanja... ovo je kindergarten. Ne obeshrabruj poletarce
 
Odgovor na temu

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

Strane: < .. 1 2 3 4 5 6 7 8 9 ... Dalje > >>

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

Postavi temu Odgovori

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