Topic: pseudocodice prima e ultima cifra in un numero  (Letto 113 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Dylaniator

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
pseudocodice prima e ultima cifra in un numero
« il: Aprile 07, 2021, 23:11 »
Ciao a tutti, sto avendo dei problemi a capire questo esercizio molto basilare che ho trovato sul libro "Concetti di informatica e fondamenti di Python"

Il problema recita:
" Scrivete lo pseudocodice per un programma che calcola la prima e l'ultima cifra di un numero. Se, ad esempio, il dato in ingresso è 23456, il programma deve visualizzare 2 e 5. Usate % e log (x, 10)."

Perché dovrei usare % e log(x, 10)? :embarrassed: e soprattutto come dovrei usarli? non ne trovo l'utilità in un esercizio del genere...

Lo pseudocodice io lo scriverei come:
-Individuare lunghezza della cifra con len() e sottrarre 1
-dare come output la cifra in posizione 0
-dare come output la cifra che sta in posizione (len()-1)

Il codice:

numero = "23456"
prima_cifra = numero[0]
ultima_cifra = numero[len(numero)-1]


print ("Prima cifra:", prima_cifra ,
       "\nUltima cifra:", ultima_cifra)


Dunque che diamine me ne faccio della percentuale e del log (x, 10) ? :quiet:

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 385
  • Punti reputazione: 0
    • Mostra profilo
Re:pseudocodice prima e ultima cifra in un numero
« Risposta #1 il: Aprile 08, 2021, 17:54 »
...Perché dovrei usare % e log(x, 10)? :embarrassed: e soprattutto come dovrei usarli? non ne trovo l'utilità in un esercizio del genere...

bah ... un "esercizio" serve a farti "vedere" qualcosa, in genere è utile, guarda qua :
>>> import math
>>> num = 2345
>>> num % 10
5
>>> num // 10**(int(math.log10(num)))
2
>>> num = 23456
>>> num % 10
6
>>> num // 10**(int(math.log10(num)))
2
>>>

Comprendilo, poi descrivi i passi necessari per farlo nel Tuo modo ed in quest'altro : alla fine avrai un'idea "nuova" (nel senso che altrimenti non verrebbe da sola)

P.S. : guarda che devi trattare numeri, NON stringhe
« Ultima modifica: Aprile 08, 2021, 17:58 da nuzzopippo »

Offline Dylaniator

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Re:pseudocodice prima e ultima cifra in un numero
« Risposta #2 il: Aprile 09, 2021, 14:53 »
...Perché dovrei usare % e log(x, 10)? :embarrassed: e soprattutto come dovrei usarli? non ne trovo l'utilità in un esercizio del genere...

bah ... un "esercizio" serve a farti "vedere" qualcosa, in genere è utile, guarda qua :
>>> import math
>>> num = 2345
>>> num % 10
5
>>> num // 10**(int(math.log10(num)))
2
>>> num = 23456
>>> num % 10
6
>>> num // 10**(int(math.log10(num)))
2
>>>

Comprendilo, poi descrivi i passi necessari per farlo nel Tuo modo ed in quest'altro : alla fine avrai un'idea "nuova" (nel senso che altrimenti non verrebbe da sola)

P.S. : guarda che devi trattare numeri, NON stringhe

Grazie per la risposta.

A calcolare l'ultima cifra senza usare stringhe sarei potuto arrivarci che bastava calcolare il resto di una divisione per 10, ma non ci sono arrivato senza "aiutini"... in quel momento vedevo una sola strada.

Invece, senza la tua spiegazione non avrei pensato di usare log in questo modo.

Sono dovuto tornare a vedermi la definizione di logaritmo. :embarrassed:

-Log10(num) mi trovo l'esponente a cui deve essere elevato 10 per arrivare a num.

-Se tronco dopo la virgola, è come se trovassi l'esponente per convertire num in notazione esponenziale

-Quindi, dividendo num per un ordine di grandezza è come se "spostassi" la virgola
quindi 2345 / 10**3 = 2,345.

-La parte dopo la virgola non mi interessa, per cui tronco con int o floor.


import math
num = int(input("inserisci il numero: "))
odg = 10 ** int(math.log10(num))
first_digit = num // odg
last_digit = num % 10

print ("Prima cifra:", first_digit ,
        "\nUltima cifra:", last_digit)


Inoltre ho notato che posso calcolare anche la lunghezza di num con log dato che log10(num) mi da un numero compreso tra n-1 e n (dove n sta per numero delle cifre). Quindi basta troncare e aggiungere 1 per trovare n.  :party:

Fantastico, ti ringrazio ancora una volta, il tuo intervento è stato illuminante.

Spero che la domanda che ho fatto non ti abbia infastidito essendo una domanda da super nabbo






« Ultima modifica: Aprile 09, 2021, 15:02 da Dylaniator »

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 385
  • Punti reputazione: 0
    • Mostra profilo
Re:pseudocodice prima e ultima cifra in un numero
« Risposta #3 il: Aprile 09, 2021, 16:57 »
...
Invece, senza la tua spiegazione non avrei pensato di usare log in questo modo.
Sono dovuto tornare a vedermi la definizione di logaritmo. :embarrassed:
Esattamente ciò che ho fatto a mia volta, saranno passati quarant'anni dall'ultima volta che ho utilizzato i logaritmi.

...
Fantastico, ti ringrazio ancora una volta, il tuo intervento è stato illuminante.
Spero che la domanda che ho fatto non ti abbia infastidito essendo una domanda da super nabbo
Ho avuto la fortuna di incontrare, in questo Forum, utenti molto capaci, che purtroppo ora si vedono poco, che mi hanno permesso di intravedere schemi di approccio e di pensiero più efficaci di quelli che uso di solito, per quanto posso cerco di restituire ciò che mi è stato regalato.
Per altro, io approfitto delle Vostre domande per guardare in direzioni "diverse" che magari non vedrei nel mio iter quotidiano, perciò nessun fastidio, piacere, ivece, se riesco a combinare qualcosa di positivo.

Ciao :)