Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1

    [Python3] input di una matrice da una stringa

    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.

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    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()

  3. #3

    non puo funzionare per il mio scopo

    Quote Originariamente inviata da clasku Visualizza il messaggio
    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.
    Ultima modifica di frakkio11299; 27-01-2017 a 22:02

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Posto che non ho capito, ti lascio uno spunto di codice non testato

    codice:
    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)
    Ultima modifica di clasku; 27-01-2017 a 23:52

  5. #5

    ok

    Quote Originariamente inviata da clasku Visualizza il messaggio
    Posto che non ho capito, ti lascio uno spunto di codice non testato

    codice:
    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

  6. #6

    sembra funzionare

    Quote Originariamente inviata da frakkio11299 Visualizza il messaggio
    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

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    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

  8. #8

    va bene

    Quote Originariamente inviata da clasku Visualizza il messaggio
    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

  9. #9

    non capisco l'errore

    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.


    codice:
    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:

    codice:
    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

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    te le raddoppia perché gli hai dato questa istruzione
    codice:
    for contatorea in range(righe):
    il tuo codice può essere decisamente semplificato

    codice:
    
    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)

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.