Forum
>>
Principianti
>>
quadrato magico
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da SalvCai ![]() |
2018-03-02 11:12:44 - quadrato magico
|
buongiorno a tutti, devo realizzare un programma che realizzi un quadrato magico 4X4 numero magico 34
ho prodotto questo codice, ma il risultato non lo raggiungo mai, non riesco a trovare l'errore qualcuno saprebbe aiutarmi per piacere? from random import * NumMagico = 34 n = 4 def popola(n): lista = [] while len(lista)<n**2: num =int(input(" Inserisci i numeri da 1 a 16 ")) lista.append(num) return lista def quadrato(lista): square = [] square.append(lista[:4]) square.append(lista[4:8]) square.append(lista[8:12]) square.append(lista[12:16]) return square def controlloRighe(square,n): ctrl = 0 total = 0 for i in range(0,n-1): for j in range (0,n-1): total = total + square j if total == NumMagico : ctrl += 1 else : ctrl = 0 return ctrl def controlloColonna(square,n): ctrl = 0 total = 0 for n in range(0,3): for m in range (0,n-1): total = total + square mn if total == NumMagico : ctrl += 1 else : ctrl = 0 return ctrl def controlloDiagonale(square,n): ctrl = 0 total = 0 for i in range (0,n-1): total = total + square if total == NumMagico : ctrl += 1 else : ctrl = 0 return ctrl def visualizza(matrice,n): for riga in matrice: print (riga) def controlloMatrice(): lista = popola(n) #square = quadrato(lista) trovato = " " while trovato != " si ": square = quadrato(lista) r = controlloRighe(square,n) c = controlloColonna(square,n) #d = controlloDiagonale(square,n) if (r+c) == 8: trovato = " si " visualizza(square,n) else: trovato = " no " print("NO") shuffle(lista) controlloMatrice()mi scuso per l'assenza delle parentesi quadre quando si parla di indici della matrice grazie Salvatore |
|
Scritto da Daniele aka Palmux ![]() |
2018-03-02 11:39:53 - Re: quadrato magico
|
Salvatore, ormai dovresti sapere che devi fare una sorta di refactoring del tuo codice prima di chiedere aiuto.
Devi capire cosa non va il tuo script, isolare il punto incriminato e proporre solo quella frazione di codice accompagnandolo da qualche spiegazione di massima. La "sbrodolata" di codice è risaputo che indispone gli interlocutori e le tue possibilità di ricevere una risposta positiva si assottigliano di molto. Cya |
|
Scritto da SalvCai ![]() |
2018-03-02 11:44:01 - Re: quadrato magico
|
Capisco non riesco a risolvere il problema delle parentesi quadre
Posterò solo la porzione di codice che credo dia problemi a fra poco Grazie |
|
Scritto da SalvCai ![]() |
2018-03-02 11:54:21 - Re: quadrato magico
|
come consigliatomi
def controlloRighe(square,n): ctrl = 0 total = 0 for i in range(0,n-1): for j in range (0,n-1): total = total + square j if total == NumMagico : ctrl += 1 else : ctrl = 0 return ctrl def controlloColonna(square,n): ctrl = 0 total = 0 for n in range(0,3): for m in range (0,n-1): total = total + square mn if total == NumMagico : ctrl += 1 else : ctrl = 0 return ctrl def controlloMatrice(): lista = popola(n) trovato = " " while trovato != " si ": square = quadrato(lista) r = controlloRighe(square,n) c = controlloColonna(square,n) if (r+c) == 8: trovato = " si " visualizza(square,n) else: trovato = " no " print("NO") shuffle(lista)spero che così vada meglio S! |
|
Scritto da Daniele aka Palmux ![]() |
2018-03-02 12:27:17 - Re: quadrato magico
|
Metti un \ prima delle parentesi e non avrai più problemi. Anche per il CamelCase funziona, ma questo lo sai.
![]() SonoUnCamelCase square[j]Cya |
|
Scritto da EL DIABLO ![]() |
2018-04-15 18:29:35 - Re: quadrato magico
|
Ciao, in questo periodo sto studiando le liste, quindi mi sono divertito a risolvere l'esercizio da te proposto.
Le permutazioni possibili con n oggetti sono pari al fattoriale di n! Con una matrice 4 x 4 sono possibili 16! permutazioni, cioè circa 21 mila miliardi. Anche se correggo gli errori nel tuo codice, non raggiungerai ugualmente il risultato. Se aspetti che, mescolando casualmente i 16 valori contenuti nella matrice, si formi un quadrato magico, la barba ti verrà lunga un metro. ![]() Quindi ho realizzato dei cicli annidati, all'interno dei quali ho inserito il turbo, che controllano tutte le possibili permutazioni. Dopo qualche minuto il programma avrà già visualizzato parecchi quadrati magici. ## # Questo programma visualizza tutti i quadrati magici 4 x 4 contenenti i numeri interi da 1 a 16. # Una matrice n * n contenente i numeri interi 1, 2, 3, ..., n * n è un quadrato magico se la somma # dei suoi elementi in ciascuna riga, in ciascuna colonna e nelle due diagonali ha lo stesso valore. # magicNumber = 34 n = 4 def visualizza(matrice, count): print("\n%d%s Quadrato magico" % (count, chr(186))) chr0 = chr(9472) print("%s%s%s%s" % (chr(9484), (chr0 * 2 + chr(9516)) * 3, chr0 * 2, chr(9488))) for riga in range(n) : for colonna in range(n) : print("%s%2d" % (chr(9474), matrice[ riga ][ colonna ]), end="") print(chr(9474)) if riga < 3 : chr1, chr2, chr3 = chr(9500), chr(9532), chr(9508) else : chr1, chr2, chr3 = chr(9492), chr(9524), chr(9496) print("%s%s%s%s" % (chr1, (chr0 * 2 + chr2) * 3, chr0 * 2, chr3)) def controlloMatrice(): count = 0 lista1 = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ] for i1 in lista1 : lista2 = list(lista1) lista2.remove(i1) for i2 in lista2 : lista3 = list(lista2) lista3.remove(i2) for i3 in lista3 : if 17 < i1 + i2 + i3 < magicNumber : lista4 = list(lista3) lista4.remove(i3) for i4 in lista4 : if i1 + i2 + i3 + i4 == magicNumber : lista5 = list(lista4) lista5.remove(i4) for i5 in lista5 : lista6 = list(lista5) lista6.remove(i5) for i6 in lista6 : lista7 = list(lista6) lista7.remove(i6) for i7 in lista7 : if 17 < i5 + i6 + i7 < magicNumber : lista8 = list(lista7) lista8.remove(i7) for i8 in lista8 : if i5 + i6 + i7 + i8 == magicNumber : lista9 = list(lista8) lista9.remove(i8) for i9 in lista9 : if 17 < i1 + i5 + i9 < magicNumber : lista10 = list(lista9) lista10.remove(i9) for i10 in lista10 : if 17 < i2 + i6 + i10 < magicNumber and 17 < i4 + i7 + i10 < magicNumber : lista11 = list(lista10) lista11.remove(i10) for i11 in lista11 : if 17 < i9 + i10 + i11 < magicNumber and 17 < i3 + i7 + i11 < magicNumber and 17 < i1 + i6 + i11 < magicNumber : lista12 = list(lista11) lista12.remove(i11) for i12 in lista12 : if i9 + i10 + i11 + i12 == magicNumber and 17 < i4 + i8 + i12 < magicNumber : lista13 = list(lista12) lista13.remove(i12) for i13 in lista13 : if i1 + i5 + i9 + i13 == i4 + i7 + i10 + i13 == magicNumber : lista14 = list(lista13) lista14.remove(i13) for i14 in lista14 : if i2 + i6 + i10 + i14 == magicNumber : lista15 = list(lista14) lista15.remove(i14) for i15 in lista15 : if i3 + i7 + i11 + i15 == magicNumber and 17 < i13 + i14 + i15 < magicNumber : lista16 = list(lista15) lista16.remove(i15) i16 = lista16[ 0 ] if i13 + i14 + i15 + i16 == i4 + i8 + i12 + i16 == i1 + i6 + i11 + i16 == magicNumber : matrice = [ [ i1, i2, i3, i4 ], [ i5, i6, i7, i8 ], [ i9, i10, i11, i12 ], [ i13, i14, i15, i16 ] ] count += 1 visualizza(matrice, count) controlloMatrice() --- Ultima modifica di Ὅμηρος 蟒蛇 in data 2018-04-16 19:09:37 --- |
|
Scritto da SalvCai ![]() |
2018-04-15 20:06:31 - RISOLTO Re: quadrato magico
|
Hey ciao grazie per la replica non pensavo il post riscuotesse ancora interesse.
Faccio tesoro della soluzione. A presto |
|
Scritto da EL DIABLO ![]() |
2018-04-15 20:42:57 - Re: quadrato magico
|
Ho fatto alcune modifiche, ora sforna quadrati magici a manetta.
In circa 5 minuti trova tutti i quadrati magici che si possono formare permutando la lista 21 mila miliardi di volte. Prossimamente spero di poterlo migliorare ulteriormente. Se qualcuno riesce a renderlo più rapido, posti la soluzione. Grazie. --- Ultima modifica di Ὅμηρος 蟒蛇 in data 2018-04-16 19:44:02 --- |
Pagina: 1
Esegui il login per scrivere una risposta.