Forum >> Principianti >> Cicli

Pagina: 1 2 Avanti

Ciao a tutti, problema niubbo (o per lo meno, non so come cercare una soluzione)
Sto eseguendo un esercizio banale sulla verifica dell'ultimo teorema di Fermat. Tutto a posto con valori inseriti a mano




Mi stavo chiedendo come espandere la soluzione




Vorrei passare alla funzione (per semplicità il teorema afferma che:

a**n + b**n = c**n per valori di n non maggiori di 2)

una serie di valori per a,b e c da 1 a 100. Non mi serve esportare in una tabella, mi basta l'output a video in singola colonna, ma non so come passare i valori nel modo che serve a me, quindi:




a=1,b=0,c=0,n=0

a=1,b=1,c=0,n=0

a=1,b=1,c=1,n=0

a=1,b=1,c=1,n=1

a=2,b=0,c=0,n=0

a=2,b=1,c=0,n=0

.

.

in teoria, nella massa di "falso" che mi restituirà la funzione, dovrei trovare qualche "vero"




Come posso risolvere?

Il ciclo for mi ragiona su un solo parametro, il ciclo while idem

E' ovvio che sono io che sbaglio ma non so come uscirne




Grazie
Scusa, forse non ho capito bene il problema.

Meglio se posti il codice, perché da come lo esponi un semplice if su n risolve tutto.

Fammi sapere.

Cya
Il problema è che il codice non esiste, o almeno solo in parte
Nello specifico, questa porzione fa in parte quello che mi serve, ma il risultato non è quello sperato, nel senso che ottengo a = 1 fino a che b = 10 e c = 100, poi si ripete per

a = 2 fino a che b = 11 e c = 100 e così via.




Io invece ho bisogno di passare ad una funzione che verifichi il teorema scritto nel primo post verificando ogni possibile combinazione




a=1,b=0,c=0

a=1,b=1,c=0

a=1,b=1,c=1

a=2,b=1,c=1




e così via. Una sorta di test su una combinazione di tre cifre fino a che non trovo quella corretta (è tutto accademico. Non cerco di svaligiare banche :))




E' sicuramente un problema di uso del ciclo. Ho provato anche a creare delle funzioni che singolarmente eseguano un ciclo for per ogni operatore del teorema ma non cambia




Ad usare il ciclo if su n ho pensato anch'io, ma mi servirà alla fine perchè il controllo va fatto solo per valori di n<=2




Grazie




a = 0
b = 0
c = 0
for i in range(10):
    a = a + 1
    for i in range(10):
        b = b + 1
        for i in range(10):
            c = c + 1
            print(a, b, c)



--- Ultima modifica di Triestin in data 2018-11-29 14:18:35 ---
Fatti una funzione tipo:

def verifica_fermat(a, b, c, n):
    if n > 2 and (a**n + b**n == c**n):
        result = [...]
    else:
        result = [...]
    return result
..dalla quale fatti dare un result come ti aggrada, coi dei valori, un True, un Forse, vedi tu insomma.

A quel punto cicla allegramente tutto e non dovresti avere grossi problemi.

Se guardi su Google, ci sono mooooooolti esempi da cui prendere spunto ad esempio questo e questo.

Cya

Grazie.
Avevo visto su google, ma volevo la soddisfazione di uscirne da solo
E siamo ancora qui
ho scritto questo codice:

a = 0

b = 0

c = 0

n = 2

def verifica_fermat(a, b, c, n):

    if n >= 2 and (a**n + b**n == c**n):

        print("Funziona")

    else:

        print("Non funziona")




elenco_a = []

elenco_b = []

elenco_c = []




def confronto(a,b,c):

    for a in range(0,10):

        for b in range(0,10):

            for c in range(0,10):

                elenco_a.append(a)

                elenco_b.append(b)

                elenco_c.append(c)

                # print(elenco_a)

                # print(elenco_b)

                # print(elenco_c)




confronto(0,0,0)
Una domanda. Come passo alla funzione "confronto" gli elementi degli elenchi?

Posso scrivere confronto(elenco_a0,elenco_a0,elenco_a0) ma mi passa ovviamente solo un parametro, mentre vorrei passarglieli tutti, uno alla volta




Grazie
ciao Triestin,

ti volevo chiedere quale sia il risultato che vuoi ottenere?

L'idea è di passare una serie di numeri (da 1 a 100, per esempio), passarli alla funzione, farli analizzare ed avere come output solo quelli che soddisfano il teorema
per lo sviluppo del teorema non ne ho idea

Posso scrivere confronto(elenco_a0,elenco_a0,elenco_a0) ma mi passa ovviamente solo un parametro, mentre vorrei passarglieli tutti, uno alla volta
ma se l'intenzione e quella di passare tutti i valori dei 3 elenchi ti basta inserirli in un ciclo incrementando ogni volta la lista tipo:
for x in range(len(elenco_a)):
    print(elenco_a[x], elenco_b[x], elenco_c[x])
ma in questo modo non avrai il risultato che hai postato, per le "matrici" (se è quello che vuoi) la cosa è molto diversa.


--- Ultima modifica di pypy in data 2018-12-01 09:38:38 ---
> L'idea è di passare una serie di numeri (da 1 a 100, per esempio),
> passarli alla funzione, farli analizzare
> ed avere come output solo
quelli che soddisfano il teorema

E mi sembra una buona idea. La soluzione è

1) scrivere il tuo "teorema" sotto forma di una funzione che accetta un numero in ingresso e restituisce True (se il test passa per quel numero) o False

2) avere una lista di numeri da testare

3) con un ciclo for passare ciascun numero alla funzione-teorema, e immagazzinare quelli che passano in una nuova lista.


Quindi, per esempio:

>>> def minore_di_venti(x):  # il "teorema" (testa se x e' minore di venti)
        if x<20: 
            return True
        return False

>>> numeri = list(range(50))
>>> numeri_buoni = []
>>> for numero in numeri:
        if minore_di_venti(numero):
            numeri_buoni.append(numero)


https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide


Pagina: 1 2 Avanti



Esegui il login per scrivere una risposta.