Python Data Science
domenica 12 aprile 2020
sabato 21 marzo 2020
venerdì 6 dicembre 2019
Gioco dell'orso - Parte 2
Qui di seguito qualche riga di commento sulla seconda versione a caratteri del gioco che potete trovare qui:
Il gioco è sempre giocabile con un po' di sforzo ma quello che conta qui è la trasformazione delle istruzioni al paradigma Object Oriented, ovvero ad oggetti.
Tutto sarà più chiaro quando Maria Teresa lo spiegherà.
Viene creata una sola classe Board, che nel costruttore definisce le posizioni iniziale e alcune "costanti" utili per il gioco; tutti gli attributi sono privati (per questo hanno il prefisso __ ) e dall'esterno possono essere acceduti tramite metodi "getters" come ad esempio (get_bear_moves() / get_bear_position() ma anche is_hunter_turn() )
I metodi display(), possible_moves(posizione), update(pos_iniziale, pos_finale) e is_winner() servono rispettivamente a mostrare la tavola di gioco (a caratteri), a restituire le mosse possibili data una posizione, ad aggiornare le posizioni del gioco e a controllare se c'è un vincitore.
La logica del gioco è implementata nella parte di codice "main" (ovvero fuori dalla classe) tramite un ciclo while.
La gestione degli input, che potrebbero essere errati, è "protetta" dal costrutto:
try:
inserisci la mossa
se non valida, rilancia eccezione
except:
messaggio all'utente richiedendo una mossa valida
Sicuramente anche questo tema sarà oggetto di un prossimo approfondimento di Maria Teresa.
giovedì 5 dicembre 2019
Produzione di tutti i modi in cui posso riporre in due borse tre oggetti
def power_set (it):
for i in range(2**len(it)):
yield [it[j] for j in range (len(it)) if (i>>j) & 1]
def yieldAllCombos(items):
""" use power_set to generate its set of all two bags, then for each bag
take the remaining items &split them into a set of all two remainder bags
for each set of two remainder bags return the first + the two bags
"""
for bag1 in power_set(items):
remain =[i for i in items if i not in bag1]
for bag2 in power_set(remain):
yield bag1, bag2
ls=['a','b','c']
ps=power_set(ls)
for p in ps:
print(p)
ps=yieldAllCombos(ls)
for p in ps:
print(p)
for i in range(2**len(it)):
yield [it[j] for j in range (len(it)) if (i>>j) & 1]
def yieldAllCombos(items):
""" use power_set to generate its set of all two bags, then for each bag
take the remaining items &split them into a set of all two remainder bags
for each set of two remainder bags return the first + the two bags
"""
for bag1 in power_set(items):
remain =[i for i in items if i not in bag1]
for bag2 in power_set(remain):
yield bag1, bag2
ls=['a','b','c']
ps=power_set(ls)
for p in ps:
print(p)
ps=yieldAllCombos(ls)
for p in ps:
print(p)
codice Python propedeutico per affrontare il problema dello zainetto detto knapsack
#programma che produce tutti i sottoinsiemi di un insieme dato in input
def Powerset(myset):
subsets=[]
noComb=2**len(myset) #numero di combinazioni di 2 oggetti su n posti 2^n
#https://it.wikipedia.org/wiki/Insieme_delle_parti
for ci in range (0,noComb):
subset=[]
for ei in range (0,len(myset)):
if ci & 1 << ei: #operazione di and sui bit -spostamento a sinistra dei bit
subset.append(myset[ei])
subsets.append(subset)
return subsets
print (Powerset(['a','b','c']) )
def Powerset(myset):
subsets=[]
noComb=2**len(myset) #numero di combinazioni di 2 oggetti su n posti 2^n
#https://it.wikipedia.org/wiki/Insieme_delle_parti
for ci in range (0,noComb):
subset=[]
for ei in range (0,len(myset)):
if ci & 1 << ei: #operazione di and sui bit -spostamento a sinistra dei bit
subset.append(myset[ei])
subsets.append(subset)
return subsets
print (Powerset(['a','b','c']) )
domenica 1 dicembre 2019
Gioco dell'orso - Parte 1
Realizzare il "Gioco dell'Orso" in Python è stato per me un esercizio divertente, tanto che l'ho realizzato in diverse versioni.La storia, la descrizione e le regole del gioco potete trovarle al link che aveva fornito Maria Teresa:
https://vallecervobiella.wordpress.com/il-gioco-dellorso
Questo primo articolo descrive la versione "procedurale" classica, con interfaccia utente semplicissima, a caratteri. Nei prossimi articoli descriverò la versione ad oggetti, quella grafica e se ci riuscirò, quella giocabile contro l'intelligenza artificiale.
Il codice sorgente commentato può essere trovato a questo link:
https://bitbucket.org/Burlesco/bear-and-hunter-s-board-game/src/master/Procedural/bear2players.py
La prima decisione che ho dovuto affrontare, decisione che poi è rimasta inalterata in tutte le versioni successive, era quella di come modellare la "scacchiera"/la tavola del gioco:
La mia scelta è stata quella di assegnare dei numeri da 0 a 20 (dall'alto verso il basso e poi da sinistra a destra) per ogni punto di intersezione dove le pedine potevano essere posizionate.
Per ogni posizione poi il carattere "_" indica l'assenza di pedine; "1" indica la presenza di un "cacciatore", "2" la presenza dell'orso.
Fatta questa premessa penso possiate capire il codice e attendo i vostri suggerimenti.
Burlesco (PythonGroupBiella)
giovedì 28 novembre 2019
Iscriviti a:
Post (Atom)
