Topic: Aiuto con esercizio su matrice  (Letto 490 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Jocks

  • python unicellularis
  • *
  • Post: 12
  • Punti reputazione: 0
    • Mostra profilo
Aiuto con esercizio su matrice
« il: Novembre 13, 2017, 11:45 »
Salve ragazzi, sono alle prime armi con Python e sto facendo un esercizio sulle matrici. Il compito è quello di far caricare ad un utente determinati dati che devono andare a formare una matrice (in questo caso l'esercizio si riferisce alle temperature) e lo stesso utente deve caricare anche a quali città si riferiscono le varie temperature. Quindi, nella mia idea ho creato due matrici (tramite la creazione di due liste ovviamente): una composta da n righe e 1 colonna e un'altra composta da n righe e n colonne (a seconda della scelta dell'utente. Per adesso ho scritto questo pezzo di codice:


m=[]
c=[]
numero_righe=int(input("Inserire numero righe: "))
numero_colonne=int(input("Inserire numero colonne: "))
num_colonne=1

if numero_righe and numero_colonne > 0:
    for i in range(numero_righe):
        citylist=[]
        for j in range(num_colonne):
            città=input("Inserire città: ")
            citylist.append(città)
        c.append(citylist)

    for i in range(numero_righe):
        templist=[]
        for j in range(numero_colonne):
            temp=int(input("Inserire temperatura: "))
            templist.append(temp)
        m.append(templist)

    for i in range(len(c)):
        for j in range(len(c[x])):
            print("%4s" % c[i][j], end="")
        print("")
       
    for i in range(len(m)):
        for j in range(len(m[i])):
            print("%4s" % m[i][j], end="")
        print("")
   
    for i in range(numero_righe):
        somma=0
        media=0
        for j in range(numero_colonne):
            somma=somma+m[i][j]
        media=somma/numero_colonne
        print("Media: ", media)

else:
    print("ERRORE: Inserire almeno un dato.")


Adesso, ciò che ottengo è una stampa del genere:
ES: prima matrice 3x1, seconda matrice 3x3

Città 1
Città 2
Città 3
           n1 n2 n3
           n4 n5 n6
           n7 n8 n9
e poi ottengo le medie correttamente.

Ciò che invece vorrei ottenere è:

Città 1   n1 n2 n3
Città 2   n4 n5 n6
Città 3   n7 n8 n9

Dov'è che sbaglio?
« Ultima modifica: Novembre 13, 2017, 12:34 da Jocks »

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.643
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re:Aiuto con esercizio su matrice
« Risposta #1 il: Novembre 13, 2017, 12:38 »
Beh il problema è che non puoi scrivere in output prima una matrice e poi l'altra se vuoi quel risultato.
print va a righe. Devi scrivere riga per riga prima l'elemento di c e poi la riga di m.

Offline Jocks

  • python unicellularis
  • *
  • Post: 12
  • Punti reputazione: 0
    • Mostra profilo
Re:Aiuto con esercizio su matrice
« Risposta #2 il: Novembre 13, 2017, 12:43 »
Beh il problema è che non puoi scrivere in output prima una matrice e poi l'altra se vuoi quel risultato.
print va a righe. Devi scrivere riga per riga prima l'elemento di c e poi la riga di m.
Potresti farmi un esempio?
Come faccio a far stampare riga per riga la matrice c e la matrice m vicine? Cioè, conosco il codice per stampare una matrice intera, però non ho capito se intendi che devo stampare una riga alla volta (in tal caso, come?
print(c[i][j], m[i][j]
) ?) oppure se c'è un codice per far stampare ciclicamente una riga alla volta
« Ultima modifica: Novembre 13, 2017, 12:45 da Jocks »

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.643
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re:Aiuto con esercizio su matrice
« Risposta #3 il: Novembre 13, 2017, 12:53 »
Beh hai tanti modi:


l1 = ['a', 'b' ,'c']
l2 = [1, 2, 3]

for i in range(len(l1)):
    print(l1[[i][/i]i], l2[[i][/i]i])

for (a,b) in zip(l1, l2):
    print(a, b)

Offline Jocks

  • python unicellularis
  • *
  • Post: 12
  • Punti reputazione: 0
    • Mostra profilo
Re:Aiuto con esercizio su matrice
« Risposta #4 il: Novembre 13, 2017, 13:34 »
Beh hai tanti modi:


l1 = ['a', 'b' ,'c']
l2 = [1, 2, 3]

for i in range(len(l1)):
    print(l1[[i][/i]i], l2[[i][/i]i])

for (a,b) in zip(l1, l2):
    print(a, b)

Ho provato il primo for, i dati in questo caso vengono stampati vicino ma vengono stampati come liste e non come matrici (cioè vengono visualizzate anche le parentesi quadre per intenderci)

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.643
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re:Aiuto con esercizio su matrice
« Risposta #5 il: Novembre 13, 2017, 14:04 »
Perché il mio è un esempio, ma non un adattamento del tuo codice. Io ho stampato stringhe e interi, se devi stampare delle liste devi adattare il codice di conseguenza.

Offline Jocks

  • python unicellularis
  • *
  • Post: 12
  • Punti reputazione: 0
    • Mostra profilo
Re:Aiuto con esercizio su matrice
« Risposta #6 il: Novembre 13, 2017, 14:13 »
Perché il mio è un esempio, ma non un adattamento del tuo codice. Io ho stampato stringhe e interi, se devi stampare delle liste devi adattare il codice di conseguenza.
Si, l'avevo intuito subito dopo. Infatti ho risolto eliminando la lista "citylist" e inserendo direttamente le variabili presenti in "città" nella lista "c", quindi quando vado a stampare "c" mi escono senza parentesi; il problema lo trovo quando voglio stampare l'altra matrice poichè lo stesso sistema utilizzato con l'altra lista non va bene, perchè se provo ad eliminare la lista "templist" e inserire le variabili di "temp" direttamente in nella lista "m" mi da problemi quando vado a fare il calcolo della media perchè mi dice "int object not subscriptable".