Profilo di michele3696

Nome michele3696
Indirizzo email n/a
Messaggi9
  • GRAFI
    Forum >> Principianti
    Buon giorno, mi sono trovato di fronte a degli esercizi con i grafi. Cosa è un grafo l'ho capito, ma vedendo l'esercizio svolto, non sono riuscito ad analizzarne il funzionamento, non riesco a capire per quale motivo lavora in quel modo.

    ''' 
    Completare la funzione admat(g, v) che preso
    in ingresso un dizionario g rappresentante la topologia di un grafo e un secondo dizionario v che
    rappresenta il vettore dei nodi, restituisca la matrice di adiacenza del grafo, rappresentata come
    lista di liste. In particolare, la generica chiave di v è l’etichetta di un nodo, mentre il valore è
    un intero che identifica la riga (e anche la colonna) della matrice di adiacenza associata al grafo.
    Ad esempio, il valore di g per il grafo in Figura 1 è (a parte l’ordine in cui compaiono le chiavi):
    {’1’: [’2’, ’4’], ’2’: [’3’], ’4’: [’2’, ’3’]}. Qualora il valore di v fosse (di nuovo a
    parte l’ordine delle chiavi) {’1’: 2, ’2’: 0, ’3’: 1, ’4’: 3}, allora la funzione dovrebbe
    restituire la matrice [0, 1, 0, 0], [0, 0, 0, 0], [1, 0, 0, 1], [1, 1, 0, 0]. '''
    
    
    def admat(g, v):
    
        mat = []
        for i in range(len(v)):
            l = []
            for j in range(len(v)):
                l.append(0)
            mat.append(l)
    
    # Ha creato una matrice quadrata di lunghezza pari alla lunghezza di v
    
        for elem in v:  # chiave in v che è l'etichetta di un nodo
    
            if elem in g:
                i = velem  # Trovo la riga corrispondente al nodo elem
                l = gelem  # Lista di adiacenza di elem
    
                for nodo in l:
    
                    j = vnodo  # Trovo la riga/colonna corrispondente a nodo
                    matj = 1
        return mat
    
    
    
    def main():
    
        g = {'1': ['2', '4'], '2': ['3'], '4': ['2', '3']}
        v = {'1': 2, '2': 0, '3': 1, '4': 3}
        out = admat(g, v)
        print(out)
    
    
    main()



    Poichè il grafo è g = (V, E) se i dati sono g e V non dovrei determinare E?

    In ogni caso, la matrice di adiacenza di questo grafo è la seguente:


           1   2   3   4
    
    1     0   1   0   1
    
    2     0   0   1   0
    
    3     0   0   0   0
    
    4     0   1   1   0
    



    quindi non capisco dato v come possa dare come risultato la lista di liste data nel testo.

    Più che il programma non ho capito il ragionamento fatto, spero in qualcuno che mi possa aiutare.

    Grazie!




    --- Ultima modifica di michele3696 in data 2016-08-30 11:23:57 ---
  • Re: Variabili
    Forum >> Principianti
    Grazie mille


  • Re: Variabili
    Forum >> Principianti
    Si certo, grazie mille, una cosa, potresti consigliarmi un testo con cui affinare la tecnica di programmazione apparte la libreria di riferimento, sempre se ce ne sono.
    Grazie !
  • Variabili
    Forum >> Principianti
    Salve a tutti, sono incappato in un dubbio bello grosso:
    ho necessità di creare un numero di variabili non fisso, mi spiego meglio, il mio programma riceve in ingresso una stringa in cui sono riportati un certo numero di nomi di files da aprire ed elaborare; per elaborare i files devo innanzitutto aprirli dentro a delle variabili, quà sorge il problema.

    Ho visto che si possono creare un certo numero di liste facendo:




    l = 0 * n



    dove n è il numero di liste da cerare, così mi sono chiesto se non ci fosse un modo per fare la stessa cosa con le variabili così il problema è risolto.

    Io ho ragionato così:




    filenames = strin.split(' ') # con cui divido i nomi dei files che sono in strin in una lista di stringhe
    
    for i in range(len(filenames):
    
         # quà mi sono bloccato! Infatti se potessi creare tante variabili quante sono le ricorrenze di i
         # sarei a cavallo



    Grazie in anticipo per l'aiuto!


    --- Ultima modifica di michele3696 in data 2016-08-20 19:29:46 ---

    --- Ultima modifica di michele3696 in data 2016-08-20 19:30:21 ---
  • Re: Errore persistente
    Forum >> Principianti
    :O Bella pensata! Grazie mille!!
    Devo imparare anche io a tagliare la testa al serpente :D
  • Re: Errore persistente
    Forum >> Principianti
    Ah ecco, consentimi un' ultima domanda, l'errore che mi viene fuori quando eseguo il programma che "non aggira il problema" per così dire, senza la correzione nella riga di " line = filein.readline().strip() "deriva dal fatto che legge una stringa del genere [ ' ' ] e cerca di convertirla in float vero? Nel caso, come posso correggerlo?
  • Re: Errore persistente
    Forum >> Principianti
    Forse non ho ben capito l'indizio -.- io ho interpretato così:



    ''' A Ex4(file) Scrivere una funzione che prende in ingresso un file che contiene n interi per ogni riga
    separati da spazio e restituisce l’intero più piccolo e l’intero più grande. Ad esempio, se il file vale
    “3 7\n55 17\n8 23\n99 12\n6 21\n” la funzione deve restituire (3,99). '''


    filein = open('filein_ex4.txt', 'r', encoding='utf-8')

    line = filein.readline()
    ch = line.strip().split(' ')
    miN = maX = float(ch[0])

    8)]while 8)]len(line) > 0: # while con sentinella, esce dal ciclo quando finiscono le righe del file

    ch = line.strip().split(' ')
    n1 = float(ch[0])
    n2 = float(ch[1])

    if n1 < n2:
    print(ch[0], ch[1]) # controllo numeri

    if miN > n1:
    miN = n1
    if maX < n2:
    maX = n2

    else:
    print(ch[0], ch[1]) # controllo numeri

    if miN > n2:
    miN = n2
    if maX < n1:
    maX = n1

    print('min = ', miN, 'max = ', maX) # controllo numeri

    line = filein.readline()

    filein.close()
    print('minimum is', miN, 'maximum is', maX)


    solo che mi da lo stesso un errore:




    /usr/bin/python3.5 /home/michele/Python/Michele's-projects/Esercitazione6/ex4.py
    3 7
    min =  3.0 max =  7.0
    55 17
    min =  3.0 max =  55.0
    8 23
    min =  3.0 max =  55.0
    99 12
    min =  3.0 max =  99.0
    6 21
    min =  3.0 max =  99.0
    Traceback (most recent call last):
      File "/home/michele/Python/Michele's-projects/Esercitazione6/ex4.py", line 15, in <module>
        n1 = float(ch0)
    ValueError: could not convert string to float: 
    



    modificando invece il numero accanto al while da 0 a 2 ossia:




    8)]while 8)]len(line) > 2:il problema quindi risiedeva nel modo in cui controllavo la riga finale, volendo stoppare il ciclo while prima di immettere nel ciclo stesso un valore ' ' stringa vuota.

    Correggendo la variabile line ho potuto eliminare qualsiasi valore di spaziatura con

    line = filein.readline().strip




    filein = open('filein_ex4.txt', 'r', encoding='utf-8')

    line = filein.readline().strip()
    ch = line.split(' ')
    miN = maX = float(ch[0])

    while len(line) > 0: # while con sentinella, esce dal ciclo quando finiscono le righe del file

    ch = line.split(' ')
    n1 = float(ch[0])
    n2 = float(ch[1])

    if n1 < n2:
    print(ch[0], ch[1]) # controllo numeri

    if miN > n1:
    miN = n1
    if maX < n2:
    maX = n2

    else:
    print(ch[0], ch[1]) # controllo numeri

    if miN > n2:
    miN = n2
    if maX < n1:
    maX = n1

    print('min = ', miN, 'max = ', maX) # controllo numeri

    line = filein.readline().strip()


    filein.close()
    print('minimum is', miN, 'maximum is', maX)
    Grazie dell'aiuto. Buona serata! :D



  • Errore persistente
    Forum >> Principianti
    Salve, svolgendo un programma mi trovo di fronte ad un errore persistente che non riesco a capire,
    so a grandi linee di che si tratta ma non riesco ad eliminarlo, confido in qualcuno che riesca a chiarirmi le idee:


    ValueError: invalid literal for int() with base 10: ''


    il programma lavora bene fino a quasi la fine, infatti da i valori aspettati in output, l'unico problema è che arrivato alla fine della lettura del file invece di uscire dal ciclo while con sentinella rimane all'interno generando l'errore:


    testo dell'esercizio:
    ''' A Ex4(file) Scrivere una funzione che prende in ingresso un file che contiene 
    n interi per ogni riga separati da spazio e restituisce l’intero più piccolo
    e l’intero più grande. Ad esempio, se il file vale
    “3 7\n55 17\n8 23\n99 12\n6 21\n” 
    la funzione deve restituire (3,99). '''




    filein = open('filein_ex4.txt', 'r', encoding='utf-8')
    
    line = filein.readline()
    ch = line.strip().split(' ')
    miN = maX = int(ch0)
    
    while len(line) > 0:                     # while con sentinella, esce dal ciclo quando finiscono le righe del file
        ch = line.strip().split(' ')
    
        if int(ch0) < int(ch1):
            print(ch0, ch1)              # controllo numeri
    
            if miN > int(ch0):
                miN = int(ch0)
            if maX < int(ch1):
                maX = int(ch1)
    
        else:
            print(ch0, ch1)              # controllo numeri
    
            if miN > int(ch1):
                miN = int(ch1)
            if maX < int(ch0):
                maX = int(ch0)
    
        print('min = ', miN, 'max = ', maX)   # controllo numeri
    
        line = filein.readline()
    
    filein.close()
    print('minimum is', miN, 'maximum is', maX)



    questo è l'output del programma dopo averlo eseguito:


    /usr/bin/python3.5 /home/michele/Python/Michele's-projects/Esercitazione6/ex4.py
    3 7
    min =  3 max =  7
    55 17
    min =  3 max =  55
    8 23
    min =  3 max =  55
    99 12
    min =  3 max =  99
    6 21
    min =  3 max =  99
    Traceback (most recent call last):
      File "/home/michele/Python/Michele's-projects/Esercitazione6/ex4.py", line 15, in <module>
        if int(ch0) < int(ch1):
    ValueError: invalid literal for int() with base 10: ''
    
    Process finished with exit code 1
    



    grazie in anticipo e buon Ferragosto!

    NB: accanto ai punti interrogativi nel testo c'è la [ ], non so perchè non la riconosce.




    --- Ultima modifica di michele3696 in data 2016-08-15 18:10:54 ---