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.136 pregleda

Najnovija ↓

Re: Zadaci za wannabe pythoniste 24.12.2019. u 11:36 · pre 83 meseca #101
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.
Re: Zadaci za wannabe pythoniste 24.12.2019. u 12:10 · pre 83 meseca #102
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
Re: Zadaci za wannabe pythoniste 24.12.2019. u 17:23 · pre 83 meseca #104
E dobro, logiku smo pretresli do u sitna crevca.
Vreme je za relaksaciju, to jest kartanje :D

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?

Re: Zadaci za wannabe pythoniste 24.12.2019. u 22:01 · pre 83 meseca #105
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
Potpis
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
Sviđa mi se1
Re: Zadaci za wannabe pythoniste 24.12.2019. u 22:57 · pre 83 meseca #106
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']]
Re: Zadaci za wannabe pythoniste 25.12.2019. u 05:32 · pre 83 meseca #107
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']
Re: Zadaci za wannabe pythoniste 25.12.2019. u 10:38 · pre 83 meseca #108
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.
Re: Zadaci za wannabe pythoniste 25.12.2019. u 11:44 · pre 83 meseca #109
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?
Re: Zadaci za wannabe pythoniste 25.12.2019. u 15:35 · pre 83 meseca #110
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.

Re: Zadaci za wannabe pythoniste 25.12.2019. u 16:57 · pre 83 meseca #112
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.
Re: Zadaci za wannabe pythoniste 25.12.2019. u 17:11 · pre 83 meseca #113
Code:
random.choice(['12', '17', '28', '93', '4', '6', '24', '19', '32', '9', '54', '63', '6', '24',][4:10])
'19'
Re: Zadaci za wannabe pythoniste 25.12.2019. u 19:05 · pre 83 meseca #115
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')]
Re: Zadaci za wannabe pythoniste 26.12.2019. u 08:16 · pre 83 meseca #116
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')]


Re: Zadaci za wannabe pythoniste 26.12.2019. u 10:17 · pre 83 meseca #117
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']
 
Re: Zadaci za wannabe pythoniste 27.12.2019. u 03:05 · pre 83 meseca #118
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 :D

Eto, rešismo još jedan zadatak.
Uskoro postavljam novi. Stay tuned :)
Re: Zadaci za wannabe pythoniste 27.12.2019. u 05:48 · pre 83 meseca #119
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


Re: Zadaci za wannabe pythoniste 28.12.2019. u 01:56 · pre 83 meseca #120
Evo i rešenja:

Code:

for i in range(6):
      for x in range(i):
          print (i, end=" ")
      print("\n")
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme