Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Come si può evitare che l'interprete esegua una data nel formato gg-mm-aaaa come una sottrazione?

P
Powner (5600 points)
36 68 85
in Programmare in Python by (5.6k points)
recategorized by

Sto provando a eseguire il quesito posto dal prof. Monti oggi in classe che, da quanto ho capito, è lo stesso richiesto come Homework 1 l'anno scorso (analizzare gli elementi di una lista, e sostituire un elemento con il mese scritto a lettere nell'unico caso in cui ci sia una data possibile, in tutti gli altri casi con un *).

Nell'inserire tra gli elementi una data nel formato gg-mm-aaaa, però, esegue subito quest'ultimo come una sottrazione.

Come posso impedire che l'interprete veda quell'elemento come una sottrazione?

lista=[1,'stringa', 10-10-10, 32-12-1945]

932 views
closed

5 Answers

Best answer
francesco.dev (33560 points)
23 51 129
by (33.6k points)
selected by

Ciao Powner!

Allora per risolvere tale problema ti basterà trattare la data come una stringa, ovvero "gg-mm-aaaa".
Quindi la lista diventerà:
lista=[1,'stringa', '10-10-10', '32-12-1945']
Se hai ancora dei dubbi non esitare a chiedere!

- Francesco Pio Scognamiglio

P
Powner (5600 points)
36 68 85
by (5.6k points)
Sisi lo so, però mi sembra che il quesito prevedesse una lista scritta in maniera simile a quella che ho messo, e mi chiedevo come fare in quel caso.
francesco.dev (33560 points)
23 51 129
by (33.6k points)
Ho modificato la mia risposta, mettendoti un chiaro esempio di quello che il professore si aspetta.
P
Powner (5600 points)
36 68 85
by (5.6k points)
Ok allora forse ho capito male io la traccia del problema.

Ma se volessi chiedere all'utente delle date in input, o volessi lavorare comunque con delle date in quel formato (ma senza quotes), come dovrei fare? Ipotizzando che esista un modo.
(Era questa la domanda)
francesco.dev (33560 points)
23 51 129
by (33.6k points)
Allora quando le chiedi all'utente, questo non farà altro che inserirti una stringa da tastiera formata dalla data. Ti consiglio di lavorare con le stringhe perché così il procedimento risulta molto più semplice!
francesco.dev (33560 points)
23 51 129
by (33.6k points)
Powner come mai ha tolto la mia risposta come migliore? Da quanto ho visto l'aveva scelta il professore e lo ha fatto perché ho risolto il tuo problema. Però se non sei soddisfatto del mio aiuto, dimmelo! Presentami i tuoi problemi e ti aiuterò a risolverli.
P
Powner (5600 points)
36 68 85
by (5.6k points)
No scusa è che devo ancor familiarizzare con il forum, non avevo capito di averlo fatto
francesco.dev (33560 points)
23 51 129
by (33.6k points)
È vero, ci sono alcune funzioni del forum che vengono scoperte e capite pian piano! :D
francesco.dev (33560 points)
23 51 129
by (33.6k points)

Ti riscrivo per farti capire meglio il problema:

Praticamente il professore ci chiede di vedere quando una data è valida dati n elementi di una lista.
Ora, visto che la data è formata da trattini (per suddividere gg mm aaaa), dobbiamo per forza usare un tipo stringa, in quanto usare un tipo intero prevederebbe la sottrazione tra gg-mm-aaa (ecco perché devi per forza di cose usare le stringhe).

Infine la tua curiosità, ovvero su come inserire da tastiera gli elementi di una lista (ovvero le date), ha questa risposta:
Per inserire in input gli elementi di una lista ti basterà richiedere in input una stringa e poi convertire questa in un secondo momento in lista tramite il metodo split().

Per qualsiasi altro problema o perplessità non esitare a chiedere!

Ancora buona serata,
- Francesco Pio Scognamiglio

P
Powner (5600 points)
36 68 85
by (5.6k points)
Queste cose le avevo capite, cercavo di agire in maniera diversa per capirne di nuove
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
edited by

Buonasera Powner,

in questo caso ti consiglierei di separare gg mm aaaa con virgole. Perché il problema sta nel fatto che Python utilizza gli operatori aritmetici quali sottrazione, addizione, moltiplicazione e così via con valori numerici. L'interprete avrà invece un comportamento diverso se proverai ad utilizzare tali operatori con stringhe, liste, tuple e così via.. 
L'idea è quindi di utilizzare questo trucchetto e,  o utilizzare altri "separatori" per formare la data, oppure di convertire i tuoi numeri in altri tipi di dati quali ad esempio le stringhe, lo puoi fare attraverso la funzione str().

Ti auguro una buona serata ! :)

Leonardo Emili

P
Powner (5600 points)
36 68 85
by (5.6k points)
Certo, anche questa è una soluzione! (però neanche lo slash va bene, essendo operatore di divisione!)

Credevo ci fosse tipo un modo per dire all'interprete di leggere una certa cosa in maniera diversa, un po' come fa lo backslash all'interno delle stringhe, tutto qua!
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
Effettivamente devo darti ragione, avevo per un attimo dimenticato lo slash come viene interpretato. Grazie mille per la segnalazione e comunque sì, posso dirti che avendo testato il comportamento del backslash purtroppo questo funziona solo con le stringhe..per questo non è possibile utilizzarlo nel tuo caso.
francesco.dev (33560 points)
23 51 129
by (33.6k points)
Purtroppo non c'è un modo per dire all'interprete che una potenziale sottrazione, come 20-10-1998 del tipo intero, non debba essere fatta perché è una data
P
Powner (5600 points)
36 68 85
by (5.6k points)
Eh lo so, me ne farò una ragione!
split (8700 points)
21 59 79
by (8.7k points)
io ho fatto quell'eserczio (se ho capito bene qual'è) e ho avuto il problema di, una volta presa la data in stringa, trasformare, almeno il mese in un numero, per stare poi comodo nello stampare la stringa "nomedelmese", se ricordo bene la consegna inoltre, in input dovevi prendere una data col formato scritto da te, gg/mm/aaaa (la consegna che ho visto io aveva gli slash, ma poco cambia) e restituirla però con numeri anche a una sola cifra per il giorno, ad esempio 01/06/2001 diventava 1 giugno 2001.

la mia soluzione è stata di prendere tutto in stringa, poi con un ciclo riempire una lista per ogni carattere, e trasformare le posizioni che mi servivano in interi, così da potermi rifare ad un altra lista dove avevo memorizzato i mesi scritti in stringa.

non so quanto sia "elegante" come metodo, però è stato funzionale, almeno per la lista dei mesi e per il giorno, per l'anno non servirebbe :D
 

se vuoi provare questa soluzione e hai dubbi su come fare chiedi pure
P
Powner (5600 points)
36 68 85
by (5.6k points)
Domani provo con qualcosa di simile magari, grazie per la dritta!
split (8700 points)
21 59 79
by (8.7k points)
di niente figurati
Zannabbianca (1180 points)
3 10 17
by (1.2k points)
È esattamente lo stesso metodo che ho usato io! Non sono certo che sia il modo migliore di farlo ma è l'unica soluzione che ho trovato
Zannabbianca (1180 points)
3 10 17
by (1.2k points)
Riguardando la foto che ho fatto alla lavagna ieri effettivamente il professore ha scritto la seguente lista:

[1,10-10-1927,2-3-72, 'casa', 31-11-2007]

Scrivendo in questo modo le date (senza apici) le farebbe risultare come sequenze di sottrazioni. Non sono certo se sia stata una svista del professore o se la intendesse proprio così.