Topic: Suggerimenti esercizio  (Letto 343 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline AndreaJ88

  • python unicellularis
  • *
  • Post: 6
  • Punti reputazione: 0
    • Mostra profilo
Suggerimenti esercizio
« il: Ottobre 13, 2020, 11:54 »
Buongiorno a tutti,

sono un neofita quindi perdonate errori banali. Non riesco a risolvere questo esercizio e vorrei evitare di guardare la soluzione.
Ho appena iniziato con le funzioni, l'esercizio chiede di creare una funzione che includa una stringa e restituisca i caratteri pari della stringa in maiuscolo e i dispari in minuscolo.

def my_func(mystring):
    mystring = ''
    for letter in list(mystring):
        if letter[:] %2 == 0:
            mystring.append(letter.upper())
        else:
            mystring.append(letter.lower())
   
    return mystring


Non vi chiedo la soluzione ma suggerimenti per risolverlo.

vi ringrazio

Andrea

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 294
  • Punti reputazione: 0
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #1 il: Ottobre 13, 2020, 13:16 »
Per questa problematica non devi ciclare sugli elementi ma sugli indici, dato che devi valutare il caso "pari" ed il caso "dispari".

Suggerimento : guarda la funzione builtin "range()"

[Edit] dimenticavo, guarda che "letter" è un singolo elemento, oltre tutto "stringa".
« Ultima modifica: Ottobre 13, 2020, 13:20 da nuzzopippo »

Offline AndreaJ88

  • python unicellularis
  • *
  • Post: 6
  • Punti reputazione: 0
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #2 il: Ottobre 13, 2020, 15:52 »
Per questa problematica non devi ciclare sugli elementi ma sugli indici, dato che devi valutare il caso "pari" ed il caso "dispari".

Suggerimento : guarda la funzione builtin "range()"

[Edit] dimenticavo, guarda che "letter" è un singolo elemento, oltre tutto "stringa".


Ti ringrazio, purtroppo qualcuno nelle Q&A del corso che sto seguendo (udemy) mi ha dato la soluzione:

def myfunc(mystring):
    stringa = ''
    for letter in range(len(mystring)):
        if letter %2 == 0:
            stringa += mystring[letter].upper()
        else:
            stringa += mystring[letter].lower()
    return stringa


Ora c'è una cosa che non capisco: perché quando chiamo la funzione mi restituisce una stringa con le lettere pari minuscole e dispari maiuscole? L'esercizio chiedeva il contrario eppure mi viene accettata come soluzione.

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.112
  • Punti reputazione: 9
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #3 il: Ottobre 13, 2020, 15:59 »
perché gli indici di lista partono da 0, e 0 è un numero pari.

Offline AndreaJ88

  • python unicellularis
  • *
  • Post: 6
  • Punti reputazione: 0
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #4 il: Ottobre 13, 2020, 16:42 »
perché gli indici di lista partono da 0, e 0 è un numero pari.

Ciao Ric ci avevo pensato, ma mi ha confuso l'output dell'esempio del risultato dato nelle istruzioni dell'esercizio:

myfunc('Anthropomorphism')
output 'aNtHrO ecc'

credo ci sia un errore lì.

Il problema è che non riesco a mettere insieme tutto quello che ho imparato fino a questo punto del corso, che in sostanza è quello che mi viene chiesto di fare con le funzioni.

Spero di riuscire a capirci qualcosa.

Grazie

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.112
  • Punti reputazione: 9
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #5 il: Ottobre 13, 2020, 19:00 »
sì certo. l'output dell'esempio è "giusto" in quanto noi comunemente cominciamo a contare da 1, che è un numero dispari. Invece Python comincia a contare da zero (che è la pratica comune nel mondo dell'informatica), e ovviamente 0 è pari. Devi semplicemente compensare questa discrepanza.

(discrepanza che deriva, in primo luogo, dal fatto che vuoi risolvere l'esercizio usando gli indici... cosa che non è sbagliata, intendiamoci (basta correggere la discrepanza, si diceva). Tuttavia se io fossi un insegnante a questo punto troverei più utile invitare i miei allievi a pensare a un altro approccio...)

Offline AndreaJ88

  • python unicellularis
  • *
  • Post: 6
  • Punti reputazione: 0
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #6 il: Ottobre 14, 2020, 08:59 »
sì certo. l'output dell'esempio è "giusto" in quanto noi comunemente cominciamo a contare da 1, che è un numero dispari. Invece Python comincia a contare da zero (che è la pratica comune nel mondo dell'informatica), e ovviamente 0 è pari. Devi semplicemente compensare questa discrepanza.

(discrepanza che deriva, in primo luogo, dal fatto che vuoi risolvere l'esercizio usando gli indici... cosa che non è sbagliata, intendiamoci (basta correggere la discrepanza, si diceva). Tuttavia se io fossi un insegnante a questo punto troverei più utile invitare i miei allievi a pensare a un altro approccio...)


Buongiorno !

Posso chiederti (a scopo formativo), in quale altro modo sarebbe stato possibile risolvere l'esercizio?

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.112
  • Punti reputazione: 9
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #7 il: Ottobre 14, 2020, 10:06 »
> (a scopo formativo)

no, "a scopo formativo" prova invece a pensarci tu.
Fai così.
Spegni il computer, spegni il telefono. Assicurati di avere almeno 4 ore libere davanti a te, senza che nessuno ti disturbi. Prendi un bel po' di carta (diciamo una cinquantina di fogli A4), una matita e un temperamatite. Sgombra la scrivania.
Se non fai prima tutte queste cose, ti *garantisco* che non ci riuscirai.
Adesso nel primo foglio disegna una serie di caselle quadrate una accanto all'alta, ciascuna con una lettera dentro, come un nastro:


------------------------------
| a | G | w | d | e | M | ...
------------------------------


Adesso immagina di essere una tartarughina messa sulla prima casella. Poi ti sposterai sulla casella successiva, poi su quella successiva ancora, e così via finché non finisce il nastro. A ogni casella che visiti, devi decidere se la lettera che trovi devi trasformarla in maiuscola o minuscola. Non hai la possibilità di ricordarti a che numero di casella sei arrivato (sei solo una tartarughina, non hai molta memoria). Come faresti a decidere? Di quali strumenti ha bisogno la tua tartaruga?
Prova a ragionare, con calma, senza distrazioni. Prova a scrivere una ricetta (un algoritmo, come diciamo noi esperti di programmazione) che faccia questo, in italiano. Fai in modo che sia la più completa possibile.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 294
  • Punti reputazione: 0
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #8 il: Ottobre 14, 2020, 10:55 »
...sei solo una tartarughina, non hai molta memoria...

Azz! ... un semaforo piccolo piccolo? magari una carota ed una lattuga da mordicchiare sono permesse? :D

Offline AndreaJ88

  • python unicellularis
  • *
  • Post: 6
  • Punti reputazione: 0
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #9 il: Ottobre 15, 2020, 16:02 »
> (a scopo formativo)

no, "a scopo formativo" prova invece a pensarci tu.
Fai così.
Spegni il computer, spegni il telefono. Assicurati di avere almeno 4 ore libere davanti a te, senza che nessuno ti disturbi. Prendi un bel po' di carta (diciamo una cinquantina di fogli A4), una matita e un temperamatite. Sgombra la scrivania.
Se non fai prima tutte queste cose, ti *garantisco* che non ci riuscirai.
Adesso nel primo foglio disegna una serie di caselle quadrate una accanto all'alta, ciascuna con una lettera dentro, come un nastro:


------------------------------
| a | G | w | d | e | M | ...
------------------------------


Adesso immagina di essere una tartarughina messa sulla prima casella. Poi ti sposterai sulla casella successiva, poi su quella successiva ancora, e così via finché non finisce il nastro. A ogni casella che visiti, devi decidere se la lettera che trovi devi trasformarla in maiuscola o minuscola. Non hai la possibilità di ricordarti a che numero di casella sei arrivato (sei solo una tartarughina, non hai molta memoria). Come faresti a decidere? Di quali strumenti ha bisogno la tua tartaruga?
Prova a ragionare, con calma, senza distrazioni. Prova a scrivere una ricetta (un algoritmo, come diciamo noi esperti di programmazione) che faccia questo, in italiano. Fai in modo che sia la più completa possibile.


Grazie per la risposta, poiché mi mancano le basi(gli strumenti della tartaruga), ho deciso di approfondire quello che ho fatto fino ad ora nel corso . Mi sono soffermato su due letture:  "Guida Python" di Stefano Riccio e, poiché sospettavo che l'esempio della tartaruga fosse una citazione , "how to think like a computer scientist".  Non so se ci ho preso, ma lo sto leggendo volentieri.

In questo modo, spero di gettare delle fondamenta un pochino più solide per poter poi riuscire a sviluppare un ragionamento "su carta".




Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.112
  • Punti reputazione: 9
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #10 il: Ottobre 15, 2020, 17:40 »
No guarda, non c'è nessuna citazione né niente... avrei potuto scrivere coniglietto, formichina, passerotto, quello che vuoi.
E non c'è nessuna "base" da conoscere, è un ragionamento che richiede strumenti ben noti a un bambino di circa 8 anni. Infatti ti ho detto di scrivere il ragionamento in italiano, prima... poi forse potrai avere problemi a convertirlo in Python (ma anche qui... tutto ciò che si richiede sono le liste, gli if, gli assegnamenti di variabile), ma il ragionamento in sé richiede solo la fatica di mettersi lì con carta e penna e provarci. Fatica. Molta fatica, questo sì.

Guarda, ovviamente fai come vuoi, ci mancherebbe.
Ma la mia umile opinione è che potresti non andare molto avanti se ogni volta pensi che la soluzione dei problemi la puoi trovare "un po' più in là"... nelle risposte sui forum, facendoti "le basi" da qualche parte, googlando per la ricettina pronta, eccetera. Così è solo un modo di svicolare, rimandare il momento in cui dovrai metterti a ragionare.
Purtroppo il fatto è che la soluzione dei problemi si trova ragionando. Con il cervello. E non occorre il libro, non occorre il computer, non occorre il forum.
Poi certo, è una cosa molto noiosa, faticosa, fastidiosa. Però è la programmazione che è un po' fatta così.

Offline AndreaJ88

  • python unicellularis
  • *
  • Post: 6
  • Punti reputazione: 0
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #11 il: Ottobre 15, 2020, 19:02 »
No guarda, non c'è nessuna citazione né niente... avrei potuto scrivere coniglietto, formichina, passerotto, quello che vuoi.
E non c'è nessuna "base" da conoscere, è un ragionamento che richiede strumenti ben noti a un bambino di circa 8 anni. Infatti ti ho detto di scrivere il ragionamento in italiano, prima... poi forse potrai avere problemi a convertirlo in Python (ma anche qui... tutto ciò che si richiede sono le liste, gli if, gli assegnamenti di variabile), ma il ragionamento in sé richiede solo la fatica di mettersi lì con carta e penna e provarci. Fatica. Molta fatica, questo sì.

Guarda, ovviamente fai come vuoi, ci mancherebbe.
Ma la mia umile opinione è che potresti non andare molto avanti se ogni volta pensi che la soluzione dei problemi la puoi trovare "un po' più in là"... nelle risposte sui forum, facendoti "le basi" da qualche parte, googlando per la ricettina pronta, eccetera. Così è solo un modo di svicolare, rimandare il momento in cui dovrai metterti a ragionare.
Purtroppo il fatto è che la soluzione dei problemi si trova ragionando. Con il cervello. E non occorre il libro, non occorre il computer, non occorre il forum.
Poi certo, è una cosa molto noiosa, faticosa, fastidiosa. Però è la programmazione che è un po' fatta così.

Ma io non sto cercando vie facili: non ho compiti per casa da svolgere, compiti in classe o esami in arrivo. Sto cercando di imparare per puro interesse, se poi ne verrà fuori qualcosa, ben venga. Comunque, ora che mi è più chiaro cosa intendevi con il problema della tartaruga, dato che ogni consiglio per migliorarsi è ben accetto ed è anche per questo che mi sono iscritto al forum, proverò a ragionarci sopra.
Grazie

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.658
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re:Suggerimenti esercizio
« Risposta #12 il: Ottobre 15, 2020, 19:55 »
Dopo tanto tempo, torno con un po' di codegolf  :devil:


my_func=lambda s:reduce(lambda q,c:(q[0]+(c.lower() if q[1] else c.upper()),not q[1]),list(s),("",True))[0]

Offline caronte

  • python erectus
  • ***
  • Post: 240
  • Punti reputazione: 0
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #13 il: Ottobre 15, 2020, 20:42 »

my_func=lambda s:reduce(lambda q,c:(q[0]+(c.lower() if q[1] else c.upper()),not q[1]),list(s),("",True))[0]


 :D :D :D quasi imbattibile, ma ci provo... :party:

s = "mystring"
''.join((c.upper() if (((i % 2) == 0))  else c.lower() for ((i, c)) in zip(range(len(list(s))), list(s))))


come scrivere Python  in Lisp... (((ho aggiunto qualche tonda giusto per starti dietro...)) :D :D :D :D :D :D :D :D :party:
ps. adesso sarei da bannare

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.112
  • Punti reputazione: 9
    • Mostra profilo
Re:Suggerimenti esercizio
« Risposta #14 il: Ottobre 15, 2020, 22:33 »
siete dei cattivelli, siete...

comunque... glenn, ma tu usi ancora python 2?