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.