Profilo di TurboC

Nome TurboC
Indirizzo email n/a
Messaggi15
  • Re: Mi aiutate a creare una sotto classe di XlsxWriter?
    Forum >> Principianti
    ok ho risolto! grazie al cielo i programmatori della libreria hanno dedicato un articolo al "subclassing" delle classi "Workbook" e "Worksheet". potete trovare quello che vi occorre qua:


    https://xlsxwriter.readthedocs.io/example_inheritance1.html

  • Re: Mi aiutate a creare una sotto classe di XlsxWriter?
    Forum >> Principianti
    ciao Daniele. guarda questo codice:
    class SuperClasse:
        def SuperPrint(self, stringa):
            print(stringa*2)
    
    class SottoClasse(SuperClasse):
        def CiaoPrint(self):
            print("ciao")
    
    obj = SottoClasse()
    obj.CiaoPrint()
    obj.SuperPrint("hola")

    questo è il risultato:
    λ python test.py
    ciao
    holahola

    l'oggetto "obj" della classe "SottoClasse" ha fatto uso sia di "CiaoPrint" che di "SuperPrint". SuperPrint è una funzione ereditata da "SuperClasse" ecco perché l'oggetto "obj" (un'istanza della classe "SottoClasse") può farne uso.


    per me il concetto di ereditarietà si può riassumere in questo esempio, o c'è qualcosa che ho dimenticato? ora analizziamo quello che mi hai suggerito:
    Dov'è l'istanza della classe WorksheetPlus che contiene il metodo write_table?

    ottima osservazione! XlsxWriter è una libreria per la sola scrittura di file excel, e da quello che mi sembra di aver capito contiene diverse classi tra cui "Workbook" e "Worksheet". il primo identifica l'oggetto "file excel", il secondo invece identifica una scheda dell'oggetto "Workbook".

    questa istruzione crea l'oggetto "file excel":
    obj_wb = Workbook("ciao.xlsx")

    quest'altra invece crea l'oggetto "foglio di calcolo" (di nome "SHEET1") del file excel appena creato:
    obj_ws = obj_wb.add_worksheet("SHEET1")

    ora, dov'è l'istanza della classe "WorksheetPlus"? eh non so.. è qua che non capisco. fammi pensare. il metodo "add_worksheet" della classe "Workbook" crea un oggetto "foglio di calcolo" che non proviene dalla mia classe personalizzata.. allora forse per raggiungere il mio scopo devo subclassare "Workbook" ed eseguire un override della funzione "add_worksheet(self, name)"? mm.. tu cosa ne pensi Daniele? come dovrei scrivere la mia sotto classe?


    --- Ultima modifica di TurboC in data 2020-05-04 19:22:51 ---
  • Re: passare parametri da riga di comando
    Forum >> Principianti
    l'errore che citi mi compare solo quando scrivo nel terminale di windows un comando insistente. cosa vuoi fare esattamente? avviare il tuo script scritto in python attraverso il terminale? se si devi devi prima posizionarti nella directory ove questo ridiede (per farlo usa il comando "cd") e successivamente avviare il programma scrivendo qualcosa del tipo "python NOME_SCRIPT.PY".

    cosa intendi poi per "passare parametri da riga di comando"? se vuoi specificare qualcosa al tuo script prima di avviarlo, sempre facendo uso del terminale, puoi utilizzare l'istruzione "sys.argv" all'interno del tuo programma.

    un consiglio, per il terminale utilizza Cmder, è un terminale di terze parti fatto apposta per windows. la sua peculiarità, oltre ad avere molte funzionalità rispetto alla classica finestra del cmd, è quella di poter far uso di molti comandi provenienti dal mondo Linux, come "ls", "sort", "grep", "awk", e cosi via..


    --- Ultima modifica di TurboC in data 2020-05-04 05:55:01 ---
  • [RISOLTO] Mi aiutate a creare una sotto classe di XlsxWriter?
    Forum >> Principianti
    ho già scritto delle classi in passato, ma non ho molta esperienza nella creazione di una sotto classe già scritta, a parte qualche esempio basilare si intende. insomma, il mio scopo è quello di creare delle funzioni personalizzate specifiche per l'oggetto "Worksheet" definito nella libreria di XlsxWritere successivamente riutilizzarle nei miei script. un'idea di quello che vorrei fare lo potete trovare qua di seguito:
    from xlsxwriter.worksheet import Worksheet
     
    class WorksheetPlus(Worksheet):
        # funzione personalizzata:       
        def write_table(self, info, row, column):
            for dic in info:
                y = column
                for key in dic:
                    self.write(row, y, dickey)
                    y += 1
                row += 1
             
    # codice per la verifica della sotto classe:
    if __name__ == "__main__":
        from xlsxwriter.workbook import Workbook
        info = [{1:1, 2:2, 3:3, 4:4, 5:5}, {1:11, 2:22, 3:33, 4:444, 5:55}]
        obj_wb = Workbook("ciao.xlsx")
        obj_ws = obj_wb.add_worksheet("SHEET1")
        obj_ws.write_table(info, 0, 0) # questa istruzione non funziona..

    il codice che vedere dovrebbe creare una tabella e ciò che deve essere scritto deve essere definito da una lista di dizionari, dove ogni dizionario è una linea della tabella. purtroppo però il codice non funziona, questo è il risultato:
    λ python WorksheetPlus.py
    
    Traceback (most recent call last):
    File "WorksheetPlus.py", line 22, in <module>
    obj_ws.write_table(info, 0, 0) # come mai non funziona?
    AttributeError: 'Worksheet' object has no attribute 'write_table' <------------- !!!

    come mai Python mi dice che l'oggetto "Worksheet" non ha attributi con il mio metodo personalizzato "write_table"? potete aiutarmi a capire come risolvere questo problema? probabilmente mi sfugge qualcosa di molto stupido.


    --- Ultima modifica di TurboC in data 2020-05-04 05:08:34 ---

    --- Ultima modifica di TurboC in data 2020-05-04 21:23:50 ---
  • Re: PyQt5: Mi aiutate a capire questa parte di codice?
    Forum >> Programmazione Python >> GUI
    perdona la banalità, ma mi spieghi cosa rispondi a fare se ciò che scrivi non influisce minimamente a dare un aiuto concreto a chi pone la domanda? oltre a minimizzare gli sforzi altrui e la voglia di imparare si intende. hai mai spiegato qualcosa a qualcuno senza essere arrogante?

    cos'è che non ti è chiaro quando ti chiedo di spiegare in maniera semplice e comprensibile ogni singola riga di codice? e sia chiaro, stiamo parlando di sole QUATTRO righe!! ne sei in grado? perché da quello che leggo non è abbastanza. ma del resto ti capisco, che senso ha dare una risposta seria? è molto più facile invece ribadire l'ignoranza di chi pone la domanda e insistere sul fatto che debba studiare, cercare su Internet, .. ma guarda un po'! non ci avevo mai pensato! sai che faccio adesso? quando conoscerò bene l'argomento inizierò a porre domande un po' a casaccio sui forum, si! credo che questa sia la scelta migliore! dopotutto che senso ha chiedere quando non si conosce?

    professore come mai non si può dividere un numero per zero? ma come?!! è così ovvio! non conosci la matematica? cerca su Google, troverai decine e decine di risposte a questa domanda, anche in italiano! ahah.. ecco, i tuoi commenti sono utili quanto una risposta del genere. disprezzo per chi pone domande, menefreghismo e molta arroganza. ma se la domanda è così banale perché non me ne dai una dimostrazione? in genere non rispondo mai alle provocazioni, ma la cosa che mi ha dato più fastidio, anche se ormai non ne sono più tanto sicuro, è che tu le cose le sai!

    qua c'è gente che studia, non mi diverte porre domande su internet! abbi rispetto! e sappi che ho sempre studiato da solo, e non lo dico tanto per vantarmi, ma per farti capire che avere una persona che ti spiega le cose, che sia tu qua sul forum, o qualcun'altro in un corso professionale, è molto utile perché fa risparmiare tempo e fatica! tempo nel cercare la documentazione e fatica nel comprenderne il contenuto, e quando ci si imbatte in un argomento nuovo, non è mai così facile come sembra.

    di Python conosco gli oggetti (gli atomi che compongono questo linguaggio), i data types (tipi numerici, stringhe, operatori ed espressioni), la struttura del codice e dei dati (liste, tuple, dizionari, set, le istruzioni per il controllo del flusso, i cicli, le funzioni, ..), il concetto di Object Oriented (classi, istanze, attributi, le super classi, il metodo "__init__", la funzione predefinita "super", i decoratori, le properties, ..), le eccezioni, i moduli, diverse librerie di terze parti e tutta l'esperienza che ho acquisito in un anno di studio e di esperienze lavorative anche se in realtà non sono un programmatore ma faccio tutt'altro..

    detto questo si, mi mancava qualcosa in effetti, sono andato a rileggermi meglio i "moduli" e adesso ho capito. per spiegare bene cosa significa l'istruzione "if __name__ == '__main__'" bisogna prima fare una distinzione tra cosa sia uno script e cosa sia un modulo, e mi fermo qua perché tanto di andare avanti con te non c'è né bisogno, visto che sai già "guidare la macchina". papà come funziona lo sterzo? ahahah.. che domande! cerca su Google, troverai decine e decine di risposte, tra queste persino nella nostra lingua!! ahahahahahahahah.. inutile ragazzino ignorante ahaha.. hai ancora tanta strada da fare! pirla! ahah..



    finisco col sottolineare che molto probabilmente all'autore del mio libro su PyQt5 non gliene frega assolutamente nulla se ho mai visto o meno l'utilizzo della nostra fantomatica istruzione! e infatti scrive:

    "If you've never seen this before, it's a common Python idiom that simply means: only run this code if this script is called directly."


    l'autore me lo dice in maniera implicita, se non l'hai mai visto prima, sappi che questo è solo un idioma di Python e significa: "avvia questo codice solo se lo script è chiamato direttamente". che cosa significa? che forse anche uno studente ignorante come me può imparare a programmare interfacce grafiche? probabilmente si.


    --- Ultima modifica di TurboC in data 2020-03-11 12:10:01 ---
  • Re: PyQt5: Mi aiutate a capire questa parte di codice?
    Forum >> Programmazione Python >> GUI
    Ciao RicoPol,

    sicuramente non posso dire di essere un esperto, ma molte cose su Python già le conosco. anche se ammetto di non aver mai programmato seriamente con le classi, con la programmazione "tradizionale" ho abbastanza esperienza. durante l'arco dell'anno per esempio ho scritto molti programmi utili al mio lavoro ed alcuni di questi erano anche abbastanza complessi.

    per uno di loro ho creato persino un menu a riga di comando, creando da zero anche una barra di avanzamento. adesso però vorrei provare a dargli un'interfaccia grafica. ho scelto PyQt5 perché incorpora un tool molto potente chiamato QT Desgner. una volta apprese le basi di questa libreria l'interfaccia la potrei costruire senza troppe difficoltà facendo uso di questo tool.



    detto questo mi sembra che le basi, almeno per iniziare, ci siano. ti faccio due domande:

    1. quali sono le conoscenze pregresse che dovrei avere per iniziare a programmare usando la libreria PyQt5? così se mi manca qualcosa, me lo studio.

    2. mi potresti spiegare riga per riga l'ultimo blocco del codice? cerca di essere il più semplice e dettagliato possibile per favore. come se stessi parlando ad un bambino :) grazie.


    --- Ultima modifica di TurboC in data 2020-03-10 14:32:28 ---
  • PyQt5: Mi aiutate a capire questa parte di codice?
    Forum >> Programmazione Python >> GUI
    Ciao ragazzi,

    ho appena iniziato a leggere un libro su PyQt5. nel primo capitolo vengono spiegate alcune cose, fino ad arrivare alla creazione di un template di base:
    import sys
    from PyQt5 import QtWidgets as qtw
    from PyQt5 import QtGui as qtg
    from PyQt5 import QtCore as qtc
    
    class MainWindow(qtw.QWidget):
        def __init__(self):
            """MainWindow constructor"""
            super().__init__()
            # Main UI code goes here
    
            # End main UI code
            self.show()
    
    if __name__ == '__main__':
        app = qtw.QApplication(sys.argv)
        mw = MainWindow()
        sys.exit(app.exec())


    le righe di codice utilizzate in questo template vengono spiegate con molta superficialità, ma del resto non posso nemmeno lamentarmi. il libro infatti è focalizzato solo sulla libreria PyQt5 e richiede una conoscenza pregressa del linguaggio Python.


    da quello che leggo posso dire di comprendere appieno il significato dei primi due blocchi di codice:

    1. importo tutta la libreria "sys" e solo alcuni oggetti dalla libreria "PyQt5". a quest'ultimi viene poi associato un nome più breve.

    2. creo una sotto classe (di nome "MainWindow") della super classe "QWidget". al suo interno eseguo un "override" della funzione ereditata "__init__" e attraverso la funzione predefinita "super" richiamo la funzione originale "__init__". questo passaggio immagino venga fatto per evitare problemi quando, in un futuro, utilizzerò dei metodi ereditati dalla super classe "QWidget". tra i due commenti andrà aggiunto il codice specifico del progetto, mentre self.show() mette in evidenza la finestra (il nostro oggetto "self", che corrisponderà ad una istanza della classe "MainWindow") sullo schermo.


    fin qua tutto bene credo. le mie attuali conosce di Python dunque mi permettono di interpretare i primi due blocchi del codice, ma non riesco a comprendere il terzo blocco. mi aiutate a capirlo? mi fate un'analisi riga per riga?

    il libro si limita a dire che "if __name__ == '__main__':" significa che il codice (quello che viene dopo ovviamente) deve essere eseguito solo se lo script è stata eseguito direttamente. ma cosa significa eseguire lo script direttamente? non capisco, .. per le ultime tre righe di codice lascio a voi la parola, non vorrei dire stupidaggini anche se già una mezza idea ce l'avrei.


    --- Ultima modifica di TurboC in data 2020-03-10 02:40:31 ---
  • Python è un linguaggio interpretato o è una Virtual Machine?
    Forum >> Principianti
    Ciao ragazzi,

    da quello che ho letto, oltre ai linguaggi compilati ed interpretati ne esistono anche degli altri basati su una virtual machine ed approfondendo meglio la questine sembra proprio che Python sia uno di questi. adesso vi spiego quello che mi sembra di aver capito:

    Python compila il codice sorgente in un formato intermedio chiamato "bytecode", il quale dovrebbe contenere tutte le istruzioni del nostro programma convertite in un linguaggio macchina specifico per un determinato microprocessore ideale su cui si basa la cosiddetta Python virtual machine. il senso di tutto questo si può riassumere in due punti:

    1. velocità: il programma sarà probabilmente meno veloce rispetto ad un linguaggio compilato, ma sicuramente più veloce rispetto ad un linguaggio interpretato, perché il codice verrà avviato direttamente sulla virtual machine attraverso il "bytecode".

    2. portabilità: questa caratteristica viene garantita dalla presenza della virtual machine contenuta in Python quando questo viene installato sul computer. il codice infatti verrà sempre compilato per la virtual machine e non per l'architettura su cui stiamo effettivamente lavorando.


    adesso, a parte il fatto che non sono sicuro di quello che ho vi ho appena scritto, vorrei che gli esperti del sito mi aiutassero a capire meglio la situazione, per cui vi pongo alcune domande:

    1. come mai quando si parla di Python le persone dicono sempre che è un linguaggio interpretato quando invece sembra essere una specie di ibrido?

    2. la storia del compilatore di Python mi manda un po in crisi. quand'è che viene fatta la compilazione esattamente? quando salvo il mio file "script.py" attraverso il mio editor di testo? e quando sono nella shell interattiva? viene fatta anche in quel momento? comando per comando?

    3. che senso ha compilare il mio script in un linguaggio macchina intermedio? non è meglio a questo punto compilarlo definitivamente per l'architettura finale su cui andrà eseguito, che sia per windows, linux, ecc.. ? certo in questo modo perdo la portabilità, ma almeno ci guadagno in prestazioni.




    --- Ultima modifica di TurboC in data 2019-10-20 20:14:51 ---
  • come usare uno script python come se fosse un comando del terminale?
    Forum >> Principianti
    ho scritto un codice python che, leggendo linea per linea un file di testo, stampa sullo schermo uno specifico output. come faccio a fare uso di questo script come se fosse un comando integrato nel terminale?

    per farvi un esempio vorrei che il mio programma si comportasse come il comadno "grep", in cui io scrivo "cat file.txt | grep ciccio" e vedo tutte linee che contengono la stringa "ciccio". se io digito "cat file.txt | nome_script argomento" oppure "nome_script argomento file.txt" vorrei vedere nel terminale l'output generato dallo script.


    --- Ultima modifica di TurboC in data 2019-06-13 11:07:15 ---
  • Come usare correttamente la libreria PyPrind?
    Forum >> Principianti
    vorrei che quando avvio il mio programma nel terminale , compaia anche una barra di caricamento, giusto per dare un'idea sul suo stato di avanzamento. su internet ho visto che per fare ciò potrei fare uso di una libreria chiamata PyPrind:

    https://github.com/rasbt/pyprind/blob/master/README.md


    il problema però è che non riesco a capire come integrarlo nel mio programma. sul sito ufficiale scrivono questo codice:

    for i in pyprind.prog_percent(range(n)):
    	time.sleep(timesleep) # your computation here

    come mai per avviare questa barra di caricamento devo avere un range? e a che cosa si riferisce? e "timesleep" che cosa sarebbe? l'intervallo di tempo in cui la libreria verifica l'avanzamento del programma? non capisco.

    talaltro il programma che ho scritto è anche un po lungo ed è pieno di cicli "for". quindi non saprei nemmeno dove applicare questa libreria. sotto questo ciclo "for" che vedo in esempio dovrei metterci tutto il mio programma? per adesso sono quasi 400 linee di codice..

    in alternativa quale altra libreria mi consigliate di usare? specificando anche come usarla ovviamente :)


    --- Ultima modifica di TurboC in data 2019-06-09 20:39:45 ---