Topic: Aiuto con questo esercizio?  (Letto 268 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Alenjiu

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Aiuto con questo esercizio?
« il: Maggio 03, 2021, 19:59 »
Ciao a tutti!
Ho iniziato a leggere qualcosa di Python praticamente da un mese e mezzo partendo da zero.
Qui sotto vi incollo il testo di un esercizio che ho provato a svolgere.
Il problema  è che la consegna mi dice di non usare la funzione 'if', eppure io la uso perché altrimenti non saprei come giungere alla risoluzione del problema.
Vi incollo anche la soluzione che ho trovato io (che credo sia molto sempliciotta).
Quello che chiedo a voi è:
- il codice che ho scritto io è concettualmente giusto, anche se uso 'if'?
- qualcuno riesci a risolvermi l'esercizio esattamente come lo richiede la consegna, quindi considerando soltanto valori booleani, operatori booleani, operatori di comparazione e NON la funzione 'if'?

Grazie mille

-----------------------------------------------------------------------------

Qui sotto la consegna:

Sfida - Space mining
✪✪ Un robot è atterrato sul pianeta Zorbon 5, con il compito di trivellare il terreno per estrarre il prezioso metallo Tiberium. La zona di ricerca ha lato d ed è divisa in settori, con l’origine (0,0) al centro. I colori nella mappa rappresentano la densità di Tiberium:

rosso: 3
arancione: 2
giallo: 1

Link della pagina dell'esercizio se si vuole vedere la mappa >>> https://it.softpython.org/basics/basics4-chal.html
La mappa è fondamentalmente un quadrato con lato (d) pari a 30,  diviso in una griglia da 3 colonne e 3 righe.

Il robot conosce le proprie coordinate x e y: scrivi del codice che stampa la densità di Tiberium corrispondente alla posizione del robot.

NON usare l’istruzione if.

SUGGERIMENTO: usa la funzione abs(x) per calcolare il valore assoluto

-----------------------------------------------------------------------------



d = 30

x = float(input('Inserisci la coordinata x del robot tra (-15, 15): '))
y = float(input('Inserisci la coordinata x del robot tra (-15, 15): '))
print('La coordinata x del robot è: ', x)
print('La coordinata y del robot è: ', y)

if (-5 <= x <= 5) and (-5 <= y <= 5):
    print('Densità tiberium dove si trova il robot è pari a 3')
elif ((-5<y<5) and ((-15<=x<=-5) or (5<=x<=15))) or ((-5<x<5) and ((-15<=y<=-5) or (5<=y<=15))):
    print('Densità tiberium dove si trova il robot è pari a 2')

# esercizio non concluso, ma il succo è questo. Mancherebbe una riga 'elif'



-----------------------------------------------------------------------------

Risoluzione?

Grazie ancora!
« Ultima modifica: Maggio 03, 2021, 20:08 da Alenjiu »

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 479
  • Punti reputazione: 0
    • Mostra profilo
Re:Aiuto con questo esercizio?
« Risposta #1 il: Maggio 04, 2021, 17:30 »
beh, non mi son fermato a pensarci molto, comunque, per evitare l'utilizzo degli "if" la prima soluzione che mi è venuta in mente è utilizzare i dizionari.
Se ci pensi, tutte le coordinate ricadenti nel quadrato +/- 5x5 hanno densità 3, tutte le coordinate ricadeinti negli altri quadrati +/-65x6-15 e +/- +-15/6 hanno densità 2, il resto ha densità 1.
Può realizzarsi un dizionario ove la coppia di coordinate è la chiave e la densità è il valore ... certo, sono un bel po' di elementi ma utilizzando itertools si fa presto :
>>> import itertools
>>> density = {}
>>> # mi creo ed assegno una matrice di coordinate a valore 3
>>> for v in itertools.product([x for x in range(6)], [y for y in range(6)]):
density[v] = 3


>>> # mi creo ed assegno due matrici di coordinate a valore 2
>>> for v in itertools.product([x for x in range(6)], [y for y in range(6, 16)]):
density[v] = 2


>>> for v in itertools.product([x for x in range(6, 16)], [y for y in range(6)]):
density[v] = 2


>>> # mi creo ed assegno due matrici di coordinate a valore 1
>>> for v in itertools.product([x for x in range(6, 16)], [y for y in range(6, 16)]):
density[v] = 1


>>> # testo
>>> density[3,4]
3
>>> density[3, 7]
2
>>> density[7,3]
2
>>> density[6,6]
1
>>> density[14,14]
1
>>> density[14,16]
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    density[14,16]
KeyError: (14, 16)
>>> def get_to_position():
value = input('Coordinate robot (x y)? : ')
coords = value.split()
try:
x = abs(int(coords[0]))
y = abs(int(coords[1]))
except ValueError:
return('Coordinate errate')
try:
dens = density[x,y]
except KeyError:
return('Il robot è fuori dai settori')
return('Densità Tiberium nel settore : %d' % dens)

>>> print(get_to_position())
Coordinate robot (x y)? : 3 7
Densità Tiberium nel settore : 2
>>> print(get_to_position())
Coordinate robot (x y)? : 16 15
Il robot è fuori dai settori
>>> print(get_to_position())
Coordinate robot (x y)? : -14 3
Densità Tiberium nel settore : 2
>>> print(get_to_position())
Coordinate robot (x y)? : 9 10
Densità Tiberium nel settore : 1
>>>

Offline Alenjiu

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Re:Aiuto con questo esercizio?
« Risposta #2 il: Maggio 05, 2021, 17:33 »
Wow, con il tuo codice il robot è già praticamente sul pianeta.
Grazie comunque. I dizionari ancora non li ho visti.
Me la sto prendendo molto con calma leggendo varie cose mille volte partendo sempre dall'inizio.
Sono concentrato sul fare minimo 1 ora al giorno, indipendentemente dall'obiettivo di apprendimento.
Tra uno o due mesetti ritorno sulla tua risposta.
Buona serata!

beh, non mi son fermato a pensarci molto, comunque, per evitare l'utilizzo degli "if" la prima soluzione che mi è venuta in mente è utilizzare i dizionari.
Se ci pensi, tutte le coordinate ricadenti nel quadrato +/- 5x5 hanno densità 3, tutte le coordinate ricadeinti negli altri quadrati +/-65x6-15 e +/- +-15/6 hanno densità 2, il resto ha densità 1.
Può realizzarsi un dizionario ove la coppia di coordinate è la chiave e la densità è il valore ... certo, sono un bel po' di elementi ma utilizzando itertools si fa presto :
   
« Ultima modifica: Maggio 05, 2021, 17:35 da Alenjiu »