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 10 ... Dalje > >>

[ Pregleda: 51022 | 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 pythoniste24.12.2019. u 10:36 - pre 51 meseci
Citat:
djoka_l:
Dakle ispravno je i
print( <izraz> if <logicki_izraz> else <izraz> )
i
print( <izraz> ) if <logicki_izraz> else print( <izraz> )


Ali je zanimljivo da ovo ne radi

Code:
print('*' * x if i == 0 or i == y-1) else ('*' + ' ' * (y+2) + '*')


Po meni bi i ovo imalo logike jer je if uslov za prvi izraz bude štampan, dakle ide uz njega, a else mu dođe obaška, kao alternativa.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 11:10 - pre 51 meseci
Nije logično.

Po istom principu, trebalo bi da bude ispravno i

print( a + b )
i
print( a + ) b

A ovo drugo sigurno nije ispravno.

Tebi je if ostalo u prvoj zagradi (od print) a else si stavio van zagrade, a one je deo istog izraza sa if.
Dakle, treba

( if ... else )
a ne
( if ... ) else
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 15:39 - pre 51 meseci
OK, shvatam, if... else su par i ne može taraba između njih.
I to mi ima logike :))
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 16:23 - pre 51 meseci
E dobro, logiku smo pretresli do u sitna crevca.
Vreme je za relaksaciju, to jest kartanje

Zadatak broj 7: Mešanje karata

Standarni špil karata sadrži 52 karte. Svaka karta ima jednu od četiri boje: pik (♠), herc (), karo () i tref (♣). Karte su po hijerarhiji poređane: 2, 3, 4, 5, 6, 7, 8, 9, 10, J (Jack), Q (Queen), K (King), A (Ace).

Svaka karta može se predstaviti sa dva karaktera. Prvi karakter je vrednost karte, gde su vrednosti od 2 do 9 direktno predstavljene. Karakteri “T”, “J”, “Q”, “K” i “A” se koriste da predstave 10, Jack, Queen, King i Ace. Drugi karakter se koristi da predstavi boju karte. To je obično malo slovo: „p“ (pik), „h“ (herc), „k“ (karo) i „t“ (tref). Evo nekoliko primera kako su karte predstavljene sa dva karaktera:


Jack pik = Jp
dva tref = 2t
deset karo = Tk
Ace herc = Ah
devet pik = 9p

Počni tako što ćeš napisati funkciju napraviShpil. Ona će koristiti petlju da napravi ceo špil sortirajući dvoslovne oznake za sve 52 karte u listu. Return listu karata kao jedini rezultat te funkcije. Tvoja funkcija ne zahteva nikakve parametre.

Napiši drugu funkciju i nazovi je meshanje, koja randomizuje redosled karata u listi. Jedna tehnika za ovakvo mešanje karata je da prođeš svaki elemenat u listi i zameniš mu mesto sa nekim drugim, nasumično odabranim elementom liste. Moraš napisati sopstvenu petlju za mešanje karata. Ne možeš koristiti pythonovu izvornu shuffle funkciju

Sada iskoristi obe funkcije da napraviš glavni program koji prikaže ceo špil pre i posle mešanja.

Ajmo da krenemo. Ko meša?

 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2679



+690 Profil

icon Re: Zadaci za wannabe pythoniste24.12.2019. u 21:01 - pre 51 meseci
A baš mora "prosta" petlja za kreiranje špila, ja bih da koristim product() da naučimo i nešto novo, obične petlje smo valjda savladali?

Evo funkcije za kreiranje špila pomoću product():

Code:
from itertools import product

def createDeck():
    cardList = product(['2','3','4','5','6','7','8','9','T','J','Q','K','A'], ['p','t','k','h'])
    cards = []
    for card in cardList:
        cards.append(''.join(card))
    return cards

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 pythoniste24.12.2019. u 21:57 - pre 51 meseci
haskell:
Code:

   let cards = [(face,sign)|face<-['2','3','4','5','6','7','8','9','T','J','Q','K','A'],
                  sign <- ['p','t','k','h']]
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste25.12.2019. u 04:32 - pre 51 meseci
Evo i mog rešenja na ovom linku.

Ispis na ekranu je ovakav:

Početni špil:
['2p', '3p', '4p', '5p', '6p', '7p', '8p', '9p', 'Tp', 'Jp', 'Qp', 'Kp', 'Ap', '2h', '3h', '4h', '5h', '6h', '7h', '8h', '9h', 'Th', 'Jh', 'Qh', 'Kh', 'Ah', '2k', '3k', '4k', '5k', '6k', '7k', '8k', '9k', 'Tk', 'Jk', 'Qk', 'Kk', 'Ak', '2t', '3t', '4t', '5t', '6t', '7t', '8t', '9t', 'Tt', 'Jt', 'Qt', 'Kt', 'At']

Promešane karte:
['Kt', 'Kp', '3p', 'Jt', '9t', 'Tt', '2t', 'Jp', '6p', 'Kk', '7k', '5k', '4k', '8p', '9k', 'Ah', '6k', 'Ak', '8t', '5t', '5p', '3h', '7p', 'Qp', 'Jk', '7h', '7t', 'Qk', 'Kh', 'Ap', '2p', '8h', '6h', '6t', 'At', '3k', '8k', '9p', 'Qh', '2h', '2k', '3t', '5h', 'Th', 'Tk', 'Tp', '9h', '4t', 'Jh', '4p', '4h', 'Qt']
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste25.12.2019. u 09:38 - pre 51 meseci
Da li ti sam smišljaš ove zadatke?
Pitam zato što je ovo loš način da se predstavi špil karata. Koristiš dvoslovne oznake, a to je pogrešno.

Tako ti je, na primer, sedmica pik predstavljena kao string '7p'. Zar ti nije logičnije da bude predstavljena kao ['7', 'pik']?
Ovo je greška koju često vidim kod početnika - prave nekakve "samogovoreće" šifre za predstavljanje entiteta iz modela.

Špil karata može i da se predstavi i kao niz cifara od 0 - 51, tako da je za kartu n vrednost v=n % 13 a boja b=n // 4
Posebno držiš niz oznaka za karte 0-12, posebno boje za vrednosti 0-3.

Zamisli, recimo, da je ovo mešanje samo uvod u neki program za igranje bridža. Tada ti odjednom zatreba da karatama dodeliš honor poene, (A=4, K=3, Q=2, J=1), a boje treba poređati u redosledu tref, karo, herc, pik.
Zato je bolje kartu predstaviti kao neki objekat ili strukturu podataka, tako da modifikacija bude jednostavna.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste25.12.2019. u 10:44 - pre 51 meseci
Ne smišljam ja, nisam tako talentovan, već kad naiđem na neki zadatak koji mi je zanimljiv, postavim ga ovde.
A ovaj mi je bio zanimljiv po ovom random premeštanju elemenata skupa, koje se može primeniti u različitim igrama.

No, u pravu si, ovo je samo bio uvod. Ima i nastavak zadatka

Zadatak broj 8

Sad kad smo promešali karte, najprirodniji sledeći potez je da ih i podelimo.
Dakle, treba napisati novu funkciju, koja se nadovezuje na prethodne dve i radi sledeće:

* podeli po 6 karata četvorici igrača,
* ispiše koje karte ko od njih ima i
* naravno, ukloni te karte iz preostalog špila.
* pa onda i njega izlista, čisto da proverimo da nije neka od karata u opticaju ostala u njemu.

Ko deli?
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste25.12.2019. u 14:35 - pre 51 meseci
Dok ne vidimo ko deli, imam jedno praktično pitanje:

lista = ['12', '17', '28', '93', '4', '6', '24', '19', '32', '9', '54', '63', '6', '24',]

imali li random modul neki metod koji bi vraćao nasumični element niza, ali unutar određenog raspona njegovih indeksa, recimo [4:10]?
U slučaju ove liste, to bi značilo da metod vraća ili jedan od ovih elemenata: '4', '6', '24', '19', '32', '9' ili njegov index.

 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste25.12.2019. u 15:02 - pre 51 meseci
Ima, random.choice.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste25.12.2019. u 15:57 - pre 51 meseci
Panto, gledao sam i njega.
Ali koliko sam razumeo on vraća bilo koji član liste, ne vidim da može da se suzi izbor.

Dokumentacija kaže:

random.choice(seq)
Return a random element from the non-empty sequence seq. If seq is empty, raises IndexError.
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste25.12.2019. u 16:11 - pre 51 meseci
Code:
random.choice(['12', '17', '28', '93', '4', '6', '24', '19', '32', '9', '54', '63', '6', '24',][4:10])
'19'
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste25.12.2019. u 16:23 - pre 51 meseci
Bravo majstore!
Pa piši im da dopune dokumentaciju, to uopšte tamo ne piše :)
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste25.12.2019. u 18:05 - pre 51 meseci
evo haskell-a:

Code:

import Data.Random.Source.DevRandom
import Data.Random.RVar
import Data.Random.Extras
import Data.Maybe
dealCard :: [(a,b)] -> RVar ([(a,b)],(a,b))
dealCard l = do
    fromJust $ choiceExtract l
main = do
    let cards = [(face,sign)|face<-['2','3','4','5','6','7','8','9','T','J','Q','K','A'],
                  sign <- ['p','t','k','h']]
        dealHand :: [(a,b)] -> IO ([(a,b)],[(a,b)])
        dealHand cards =  do
          (l',card1) <- runRVar (dealCard cards) DevRandom
          (l'',card2) <- runRVar (dealCard l') DevRandom
          (l''',card3) <- runRVar (dealCard l'') DevRandom
          (l'''',card4) <- runRVar (dealCard l''') DevRandom
          (l''''',card5) <- runRVar (dealCard l'''') DevRandom
          (ret,card6) <- runRVar (dealCard l''''') DevRandom
          return (ret,card1:card2:card3:card4:card5:card6:[])

    (l',hand1) <- dealHand cards
    (l'',hand2) <- dealHand l'
    (l''',hand3) <- dealHand l''
    (l'''',hand4) <- dealHand l'''
    print hand1
    print hand2
    print hand3
    print hand4
    print l''''


i izlaz:
Code:

~/examples/haskell >>> ./cards                                                                              
[('4','p'),('J','k'),('K','k'),('8','p'),('T','p'),('4','k')]
[('Q','p'),('3','h'),('7','h'),('A','p'),('Q','k'),('8','t')]
[('7','k'),('3','p'),('2','t'),('4','t'),('9','k'),('5','k')]
[('K','p'),('8','h'),('Q','t'),('A','k'),('2','h'),('5','t')]
[('2','p'),('2','k'),('3','t'),('3','k'),('4','h'),('5','p'),('5','h'),('6','p'),('6','t'),('6','k'),('6','h'),('7','p'),('7','t'),('8','k'),('9','p'),('9','t'),('9','h'),('T','t'),('T','k'),('T','h'),('J','p'),('J','t'),('J','h'),('Q','h'),('K','t'),('K','h'),('A','t'),('A','h')]
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste26.12.2019. u 07:16 - pre 51 meseci
Citat:
djoka_l:
Da li ti sam smišljaš ove zadatke?
Pitam zato što je ovo loš način da se predstavi špil karata. Koristiš dvoslovne oznake, a to je pogrešno.

Tako ti je, na primer, sedmica pik predstavljena kao string '7p'. Zar ti nije logičnije da bude predstavljena kao ['7', 'pik']?
Ovo je greška koju često vidim kod početnika - prave nekakve "samogovoreće" šifre za predstavljanje entiteta iz modela.

Špil karata može i da se predstavi i kao niz cifara od 0 - 51, tako da je za kartu n vrednost v=n % 13 a boja b=n // 4
Posebno držiš niz oznaka za karte 0-12, posebno boje za vrednosti 0-3.

Zamisli, recimo, da je ovo mešanje samo uvod u neki program za igranje bridža. Tada ti odjednom zatreba da karatama dodeliš honor poene, (A=4, K=3, Q=2, J=1), a boje treba poređati u redosledu tref, karo, herc, pik.
Zato je bolje kartu predstaviti kao neki objekat ili strukturu podataka, tako da modifikacija bude jednostavna.

Đoko, pokušao sam da napravim ovo što si predložio i izgleda da mi je uspelo.
A najviše mi se dopada što sam pojednostavio staru for petlju.

Code:
boja = ['p', 'h', 'k', 't']
vrednost = ['2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A']

print('Početni špil je:')
for x in range(0, 13):
    karte = [(i, j) for i in vrednost[x] for j in boja]
    print(karte)

ali sam napravio jednu drugu for petlju da bude lepši ispis karata

Početni špil je:
[('2', 'p'), ('2', 'h'), ('2', 'k'), ('2', 't')]
[('3', 'p'), ('3', 'h'), ('3', 'k'), ('3', 't')]
[('4', 'p'), ('4', 'h'), ('4', 'k'), ('4', 't')]
[('5', 'p'), ('5', 'h'), ('5', 'k'), ('5', 't')]
[('6', 'p'), ('6', 'h'), ('6', 'k'), ('6', 't')]
[('7', 'p'), ('7', 'h'), ('7', 'k'), ('7', 't')]
[('8', 'p'), ('8', 'h'), ('8', 'k'), ('8', 't')]
[('9', 'p'), ('9', 'h'), ('9', 'k'), ('9', 't')]
[('T', 'p'), ('T', 'h'), ('T', 'k'), ('T', 't')]
[('J', 'p'), ('J', 'h'), ('J', 'k'), ('J', 't')]
[('Q', 'p'), ('Q', 'h'), ('Q', 'k'), ('Q', 't')]
[('K', 'p'), ('K', 'h'), ('K', 'k'), ('K', 't')]
[('A', 'p'), ('A', 'h'), ('A', 'k'), ('A', 't')]


 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste26.12.2019. u 09:17 - pre 51 meseci
Code (python):

from random import sample
cards = [value+color for value in "23456789TJQKA" for color in "ptkh"]
for player in range(1,5):
    hand = sample(cards, k=6)
    print(f"Player {player}: {hand}")
    for i in hand:
        cards.remove(i)
print(f"Remaining cards: {cards}")

Player 1: ['5h', '3t', '9k', '8p', '5p', '5t']
Player 2: ['4k', '6t', 'Ah', '9p', '6h', '6k']
Player 3: ['Ap', '7k', '2p', 'Qh', '9t', '2k']
Player 4: ['Jt', 'Tp', 'Jh', 'Tt', 'Jp', '7p']
Remaining cards: ['2t', '2h', '3p', '3k', '3h', '4p', '4t', '4h', '5k', '6p', '7t', '7h', '8t', '8k', '8h', '9h', 'Tk', 'Th', 'Jk', 'Qp', 'Qt', 'Qk', 'Kp', 'Kt', 'Kk', 'Kh', 'At', 'Ak']
 
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste27.12.2019. u 02:05 - pre 51 meseci
Panta ga slupao u tri reda!
Ali si vidim jednu stvar zaboravio i to vrlo važnu!
Posle mešanja karata, a pre deljenja, moraju karte da se precepe, naravno.
Zato sam pitao za random.choice.

Panto ako ne znaš kako da precepiš karte, nije problem,
pogledaj moj kod ovde

Eto, rešismo još jedan zadatak.
Uskoro postavljam novi. Stay tuned
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste27.12.2019. u 04:48 - pre 51 meseci
Evo jedan lak

Zadatak broj 9:
Ubedi python da odštampa nešto ovako:

1
2 2
3 3 3
4 4 4 4
5 5 5 5 5


 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste28.12.2019. u 00:56 - pre 51 meseci
Evo i rešenja:

Code:

for i in range(6):
      for x in range(i):
          print (i, end=" ")
      print("\n")
 
Odgovor na temu

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

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

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

Postavi temu Odgovori

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