Principiante chiede aiuto

di il
4 risposte

Principiante chiede aiuto

Ciao, sono un principiante e mi sto esercitando con Python. Ho una semplice funzione del tipo c=a+b**2, la condizione é che il risultato sia un intero (utilizzo modulo per la verifica). Il mio problema è che quando il risultato non è un intero dovrei (credo) inserire un loop while incrementando b di 1...ho provato a utilizzare range ma non c’è verso...qualcuno può darmi una mano per piacere?
Di seguito il codice che ho scritto:

def esercizioventitre (a):
import math
b=int in range (0,a,1)
c=a+b**2
while c % 2 != 0:

“””e qui mi fermo, perché qualunque tentativo fatto ha dato nel migliore dei casi errore”””

return (c)

4 Risposte

  • Re: Principiante chiede aiuto

    Usa i tag CODE per includere del codice nei post, altrimenti si perde l'indentazione.
    def esercizioventitre (a):
    import math
    b=int in range (0,a,1)
    c=a+b**2
    while c % 2 != 0:
    Cominciamo con mettere ordine:
    import math
    def esercizioventitre (a):
         b = int in range (0,a,1)
         c = a+b**2
         while c % 2 != 0:
    Adesso vediamo i problemi: dici che la condizione di questo esercizio è che il risultato sia un intero, ma l'operatore % non ti dice se è intero o meno, ti ritorna il resto della divisione tra interi! Al massimo l'operazione a % b ti dice se a è multiplo di b (o al limite, a==b); quindi c % 2 != 0 ti dice se c è pari (false) o dispari (true).
    Poi, che senso ha fare un generatore (b) se non lo usi come un generatore?
    A questo punto, dovresti postare l'enunciato dell'esercizio, visto che non sapendo che cosa vuole l'esercizio, non sono in grado di aiutarti oltre.
  • Re: Principiante chiede aiuto

    Ciao Andrea, anzitutto grazie per la tua risposta e perdonami a) incompletezza e b) assenza di tag.
    1. la versione che ho postato é una semplificazione del problema che mi sono posto e ho usato in effetti termini non del tutto corretti...
    2. il punto chiave é l’incremento di “b” (qualora il primo risultato della funzione sia “float”) fino a trovare il primo “Int” successivo...ho pensato che il generatore potesse risolvere il problema, ma certamente non lo uso in modo corretto poi nel loop...
    3. i possibili “Int” derivati da (a + b**2) sono tutti pari, ecco perché ho utilizzato il modulo come scorciatoia...
    4. non c’è un testo dell’esercizio, sto imparando tramite manuali e tutorial, gli esercizi che ho trovato sono più o meno tutti uguali e ho provato ad inventarmene uno, un po’ troppo complesso forse...
  • Re: Principiante chiede aiuto

    Ema76 ha scritto:


    2. il punto chiave é l’incremento di “b” (qualora il primo risultato della funzione sia “float”) fino a trovare il primo “Int” successivo..
    Questa frase, secondo me, non ha alcun senso, né informatico, né logico, né matematico.
    In Python, come altri linguaggi, float e int sono due tipi numerici differenti. Un float può rappresentare numeri compresi tra 1.7976931348623157e+308 e 2.2250738585072014e-308, mentre un int non ha un vero e proprio limite. Tecnicamente, quando si supera la soglia di 2^63-1 (massimo signed int su 64 bit), Python inizia a memorizzare gli interi con altre tecniche.
    Quindi, la tua funzione, se riceve un tipo int come parametro ritornerà un int, se riceve un float ritornerà un float. Se il parametro a è float, la funzione ritornerà un tipo float, anche se a vale 10.0 (che è un tipo float, anche se matematicamente è un intero).
    Una cosa interessante: se fai (anche interattivamente) un calcolo tipo 765**983 ti verrà fuori un numero int kilometrico. Se fai 765.0**983.0 ti verrà OverflowError.
    Torniamo alla tua funzione: c = a + b**2 dipende da a, quindi se vuoi un int in uscita, a deve essere int. Se a non è int, lo fai diventare int:
    a = int(a)
    in modo che eventuali parti decimali vengano troncate. In conclusione la tua funzione diventa:
    def esercizioventitre(a):
        a = int(a)
        c = a + (a-1) ** 2
        return c
  • Re: Principiante chiede aiuto

    Grazie ancora Andrea per il tuo supporto e per i chiarimenti che mi hai dato, provo a seguire le tue indicazioni. Buona giornata
Devi accedere o registrarti per scrivere nel forum
4 risposte