PDA

Visualizza la versione completa : [Python3] input di una matrice da una stringa


frakkio11299
27-01-2017, 15:07
Buongiorno a tutti,spero di inserire la mia discussione nella sezione corretta.
Vorrei dichiarare in python3 una matrice composta da 8 colonne e da m righe definito dal utente.
ho utilizzato questo codice per la dichiarazione. (m righe,n colonne)
matrice=[[],[]]
m=input("inserire delle numero delle colonne")
n=8
s=0
y=0
while s<= (m-1):
while y<=(n-1):
arrivati a questo punto vorrei utilizzare un comando per eseguire l'input da stringa, provo a spiegarmi meglio l'utente dovrebbe inserire una stringa come la seguente
53 88 40 82 87 45 13
61 17 73 7 35 45 76

vorrei ora che ogni numero separato dallo spazio (che dovrebbe essere un char in hex 20 credo) venisse inserito
all interno della mia matrice in modo ordinato
53 88 40 82 87 45 13
61 17 73 7 35 45 76
matrice[1][1]=53
matrice[1][2]=88
ecc...
cercando su internet ho trovato delle possibili soluzioni che illustrano l'utilizzo raw_input(),append(),utilizzano queste soluzioni in un array monodimensionale ma non avendo capito bene il loro funzionamento non so come applicare al mio programma con una matrice. Spero di essere stato sufficientemente chiaro grazie a presto.

clasku
27-01-2017, 20:19
usa input per chiedere all'utente quante righe e colonne gli servono (ricordati di convertirlo in int...)
usa un ciclo for per scorrere le righe della futura matrice e chiedi con input all'utente di scrivere i numeri separati da spazio
per ogni tentativo dell'utente, controlla che il numero di elementi della lista che ottieni splittando l'input sia uguale al numero di colonne (dovresti anche controllare che tutti gli elementi siano numeri...)
se il controllo è ok, aggiungi la lista dello split alla matrice

quindi devi usare almeno le funzioni input(), int(), str.split(), list.append()

frakkio11299
27-01-2017, 20:59
usa input per chiedere all'utente quante righe e colonne gli servono (ricordati di convertirlo in int...)
usa un ciclo for per scorrere le righe della futura matrice e chiedi con input all'utente di scrivere i numeri separati da spazio
per ogni tentativo dell'utente, controlla che il numero di elementi della lista che ottieni splittando l'input sia uguale al numero di colonne (dovresti anche controllare che tutti gli elementi siano numeri...)
se il controllo è ok, aggiungi la lista dello split alla matrice

quindi devi usare almeno le funzioni input(), int(), str.split(), list.append()
se faccio scorrere la matrice e uso lo split per salvare il valore mi crea dei problemi nell output,ma sopratutto non riesco a fare scorrere la matrice adeguatamente.

clasku
27-01-2017, 22:37
Posto che non ho capito, ti lascio uno spunto di codice non testato



m = []


r = int(input("numero righe "))
c = int(input("numero colonne "))


for i in range(r):
a = input("inserisci numeri separati da spazio ").split() # crei una lista di numeri
if len(a) == c:
m.append(a)
else:
exit("differenza tra numero di colonne ed elementi della lista")


print(m)

frakkio11299
28-01-2017, 07:32
Posto che non ho capito, ti lascio uno spunto di codice non testato



m = []


r = int(input("numero righe "))
c = int(input("numero colonne "))


for i in range(r):
a = input("inserisci numeri separati da spazio ").split() # crei una lista di numeri
if len(a) == c:
m.append(a)
else:
exit("differenza tra numero di colonne ed elementi della lista")


print(m)

Ma facendo come dici tu dichiarando c e r dovrebbe funzionare, l'unico problema che io non posso dichiarate una matrice diciamo vuota quindi quando eseguo m.append(a) verrà concatenata a una prima parte con già dentro dei valori,.forspe però ho trovato una soluzione differente concatena in una stringa tutti gli input dell utente dopo 8 numeri metto ; Ed uso np.matrix(a) credo dovrebbe funzionare dopo provò entrambe le risoluzioni per sicurezza.grazie

frakkio11299
28-01-2017, 08:28
Ma facendo come dici tu dichiarando c e r dovrebbe funzionare, l'unico problema che io non posso dichiarate una matrice diciamo vuota quindi quando eseguo m.append(a) verr� concatenata a una prima parte con gi� dentro dei valori,.forspe per� ho trovato una soluzione differente concatena in una stringa tutti gli input dell utente dopo 8 numeri metto ; Ed uso np.matrix(a) credo dovrebbe funzionare dopo prov� entrambe le risoluzioni per sicurezza.grazie
La tua soluzione la ho testata sul cellulare e sembra funzionare ero incredulo poich� pensavo che la tua dichiarazione fosse di un array monodimensionale e quindi non pensavo funzionasse grazie.dopo testo sul PC col mio programma

clasku
28-01-2017, 08:44
se appendi una lista (nel mio codice, la variabile a) ad una lista (la variabile m) ottieni una lista di liste... cioè la tua matrice

frakkio11299
28-01-2017, 08:45
se appendi una lista (nel mio codice, la variabile a) ad una lista (la variabile m) ottieni una lista di liste... cioè la tua matrice

Ok grazie mille ho capito

frakkio11299
28-01-2017, 11:38
Non riesco a capire perchè se utilizzo il codice da solo funziona se lo uso nel mio non ne vuole sapere,praticamente l'utente inserisce una stringa da 8 numeri separati da spazio e la inserisce nella matrice 2 volte.



x=int(input("quante dati vuoi inserire? inserire un numero intero "))
print("hai scelto di inserite: ",x," dati")
giocate=()
colonne=8
righe=x
matrice=[]
print("usare il seguente formato di inserimento\n ")
print("1° 2° 3° 4° 5° 6° 7° 8°")
print("2 8 62 79 81 88 32 35")
print("esempio -_-\n")
avvio=input("premere invio per incominciare")
#eseguo la pulizzia dello schermo
for i in range(25):
print("\n")
contatore=1
contatore=int(contatore)
while contatore <= x:
print("inserire il:",contatore," dato")
frase=input()
#eseguo il controllo dei numeri inseriti e rimuovo i possibili errori
for contatoreacaso in range(30):
frase= frase.replace("01","1")
frase= frase.replace("02","2")
frase= frase.replace("03","3")
frase= frase.replace("04","4")
frase= frase.replace("05","5")
frase= frase.replace("06","6")
frase= frase.replace("07","7")
frase= frase.replace("08","8")
frase= frase.replace("09","9")
frase= frase.replace(" "," ")
frase= frase.replace(" "," ")
frase= frase.replace(" "," ")

for contatorea in range(righe):
a = frase.split() # crei una lista di numeri
if len(a) == colonne:
matrice.append(a)
else:
exit("Inserimento errato")
contatore+=1
print(frase)
print(matrice/2)


out generato:


quante dati vuoi inserire? inserire un numero intero 2
hai scelto di inserite: 2 dati
usare il seguente formato di inserimento

1° 2° 3° 4° 5° 6° 7° 8°
2 8 62 79 81 88 32 35
esempio -_-

premere invio per incominciare
inserire il: 1 dati
11 49 53 65 77 89 33 02
[['11', '49', '53', '65', '77', '89', '33', '2'], ['11', '49', '53', '65', '77', '89', '33', '2']]
11 49 53 65 77 89 33 2
inserire il: 2 dati
16 39 65 67 83 86 64 10
[['11', '49', '53', '65', '77', '89', '33', '2'], ['11', '49', '53', '65', '77', '89', '33', '2'], ['16', '39', '65', '67', '83', '86', '64', '10'], ['16', '39', '65', '67', '83', '86', '64', '10']]
16 39 65 67 83 86 64 10

http://i66.tinypic.com/xg9q1x.png

clasku
28-01-2017, 15:10
te le raddoppia perché gli hai dato questa istruzione

for contatorea in range(righe):il tuo codice può essere decisamente semplificato





x=int(input("quante dati vuoi inserire? inserire un numero intero "))
print("hai scelto di inserite: ",x," dati")
giocate=() # a cosa serve?
colonne=8
righe=x
matrice=[]
print("usare il seguente formato di inserimento\n ")
print("1° 2° 3° 4° 5° 6° 7° 8°")
print("2 8 62 79 81 88 32 35")
print("esempio -_-\n")
avvio=input("premere invio per incominciare")
#eseguo la pulizzia dello schermo
# non capisco a che pro...
for i in range(25):
print("\n")
contatore=1
contatore=int(contatore)
while contatore <= x:
""" potresti usare "for a in range(x):" e ti elimineresti il problema
(ed il possibile errore di esecuzione infinita) di incrementare un contatore"""
print("inserire il:",contatore," dato")
frase=input()
a = frase.split() # crei una lista di numeri
if len(a) == colonne:
matrice.append([int(e) for e in a])
"""con la list comprehension trasformi gli elementi della lista di split in interi
(gli spazi doppi li gestisce split direttamente)"""
else:
exit("Inserimento errato")
contatore+=1
print(frase)
print(matrice)

Loading