Profilo di RicPol

Nome RicPol
Indirizzo email ric.pol@libero.it
AvatarAvatar utenti
Messaggi307
Firma forum
https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: perchè non funziona correttamente questo programma
    Forum >> Principianti
    Si mi fa solo l'input del ciclo while, mi ritorna ad esempio 1 e mi richiede cosa voglio fare

    No, intendo proprio dire: hai provato a guardare come appare quello che hai scritto? Come appare in un browser? Come appare su questo forum? Ti sembra codice leggibile? Ti sembra che non potresti fare lo sforzo di formattare il codice per renderlo leggibile?


    Questo, intendo.

    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: perchè non funziona correttamente questo programma
    Forum >> Principianti
    hai provato a guardare come appare quello che hai scritto?
    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: PROBLEMA INDENTAZIONE NON RIESCO A RISOLVERLO
    Forum >> Principianti
    Qui non è tanto un problema di quale editor scegliere, ma di insegnare al tuo editor a non usare le tabulazioni per i rientri. Tutti gli editor hanno l'opzione di trasformare le tabulazioni in 4 (o 2) spazi... basta settare l'opzione. (anche se gli editor "seri" ce l'hanno già impostata per default, ormai...)
    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: Programma in Phython, aperto nel cmd si chiude subito.
    Forum >> Principianti
    stai facendo doppio clic su uno script. Non si fa doppio clic su uno script.


    https://pythoninwindows.blogspot.com/2019/03/e-adesso-dove-clicco.html



    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: Python su computer off-line
    Forum >> Principianti
    puoi scaricare manualmente i pacchetti che ti servono da PyPI e poi installarli con Pip da un file locale https://pip.pypa.io/en/stable/user_guide/#installing-from-local-packages
    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: Problema che avviene chiamando una funzione da un'altra funzione
    Forum >> Programmazione Python >> GUI
    Il problema non riguarda tkinter, ma come si usano le funzioni, che cosa è un nome, che cosa è un namespace, che cosa è uno scope di una funzione... puoi seguire un buon libro passo-passo e imparare queste cose (e molte altre) senza impazzire ogni volta a chiederti perché un pezzo di codice non funziona. Il Lutz è sempre una buona scelta, come libro. "Comincio subito a progammare, poi le cose che non tornano le imparo man mano" non è mai una scelta saggia...
    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: Stringhe: quale soluzione adottare per questo Algoritmo...
    Forum >> Principianti
    Allora, un po' di terminologia: quello che stai cercando di fare si chiama: anagramma (eventualmente con scarto) https://it.wikipedia.org/wiki/Anagramma. Un anagramma è un tipo di permutazione https://it.wikipedia.org/wiki/Permutazione


    Ora, in python le permutazioni si fanno con itertools.permutations https://docs.python.org/3.7/library/itertools.html#itertools.permutations per cui nel tuo caso

    >>> from itertools import permutations
    >>> 'cabina' in [''.join(i) for i in permutations('abnciay', len('cabina')]
    True
    
    Oppure, meglio ancora perché evita la creazione di una lista di tutte le permutazioni:

    >>> tuple('cabina') in permutations('abnciay', 6)
    True
    Un esempio di algoritmo per le permutazioni lo trovi nella documentazione di itertools.permutations sopra linkata.





    Detto questo, ricorrere alle permutazioni per fare un anagramma può essere dispendioso. Un approccio più veloce sarebbe vedere se tutte le lettere della parola da cercare stanno nelle lettere di partenza. Se è così, allora l'anagramma si può fare senz'altro, è inutile mettersi a farlo davvero.


    Ora, questo approccio sarebbe banale usando i set, se NON ci fossero mai lettere ripetute: esempio

    >>> set('milano').issubset(set('ailmnoxyz')) # da 'ailmnoxyz' posso ricavare 'milano'
    True
    Perché i set, appunto, non ammettono ripetizioni. Siccome però noi ovviamente dobbiamo considerare il caso di lettere ripetute, la cosa più veloce che mi viene in mente sul momento è creare delle liste, ordinarle, e verificare se sono uguali:

    >>> word = sorted(list('cabina'))
    >>> letters = sorted([i for i in 'abnciay' if i in word]) # tolgo quelle che non stanno in 'cabina'
    >>> word == letters
    True


    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: come posso nascondere il codice sorgente del mio programma python?
    Forum >> Programmazione Python >> Scripting
    L'unico vero modo per "proteggere il codice sorgente" è non distribuirlo, ma offrirlo come servizio. Metti il tuo programma dietro un server web, e sei ragionevolmente sicuro.


    Fai meno di questo, e sei semplicemente nel solito banale notissimo noiosissimo ciclo dell'offuscamento del codice, che è una cosa che i principianti stentano sempre molto (davvero molto) a capire. Puoi offuscare il codice di tanto così, e allora lo proteggerai da quelli che non sanno arrivare a quel tanto così. Puoi offuscare il codice di un po' di più, e allora lo proteggerai da quelli un po' più abili di prima, ma non da quelli che stanno un gradino sopra. E così via. Se qualcuno ha fisicamente in mano l'eseguibile ed è abbastanza motivato, può capire come funziona. Sembra impossibile, ma è così. Alla fine parliamo pur sempre di macchine di Turing. Il resto è solo offuscamento.

    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: In quale ambiente sto mandando in esecuzione lo script?
    Forum >> Principianti
    Ah, ecco. Quello che vuoi sapere è se la tua console supporta i colori ANSI... cosa che in effetti non è facilissimo, visto che dipende dal sistema operativo, dalla versione del sistema operativo, dalla console usata.


    Tieni conto che il modo giusto per conoscere il sistema operativo è interrogare "sys.platform".


    Poi va detto (e me n'ero dimenticato) che puoi sapere se la tua console python è eseguita da un terminale o in una console grafica (come IDLE) interrogando "sys.stdin.isatty" (per tutto questo, guarda la documentazione).


    Tutto questo e altre tecniche già viste potrebbero avvicinarti a quello che vuoi fare... Ma in realtà la soluzione giusta potrebbe semplicemente essere di usare Colorama https://pypi.org/project/colorama/ e non preoccuparsi più di queste cose.


    Ovviamente non ho la più pallida idea di come tutto questo possa funzionare su XP... non ho la più pallida idea di come XP possa funzionare e basta... Nel 2019 quando sento ancora qualcuno che dice "XP" francamente spalanco le braccia e lascio perdere...

    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide
  • Re: In quale ambiente sto mandando in esecuzione lo script?
    Forum >> Principianti
    Uhm, sì certo os.environ è una possibilità ma mi sembra che stai andando a cacciarti in cose MOOOOLTO specifiche... devi capire che os.environ è un mapping messo a disposizione dall'ambiente di esecuzione, che può scriverci un po' quello che vuole... o anche non scriverci niente... cioè, in definitiva dipende da quanto sei in un ambiente posix-complaint...


    Per dire, prendi Windows... ehm... se tu avvi una normale shell di windows (cmd.exe per capirci), e da lì provi a fare
    >>> import os
    >>> os.environ['TERM']
    
    ti becchi una bella eccezione perché semplicemente cmd.exe non si cura di riempire quel dato in os.environ. D'altra parte, se invece usi una shell "preparata" come ConEmu/Cmder (cosa che io faccio sempre), allora "TERM" è "cygwin"... ma alla fine è la stessa shell, dal punto di vista di python... E su Mac le cose possono andare in modo anche diverso...





    Ora, qui mi sa che il punto sarebbe capire il famoso "che-cosa-stai-cercando-di-fare-davvero". Il mio sospetto è che stai cercando di risolvere un problema reale nel modo sbagliato. Se ti serve differenziare un ambiente "di sviluppo" da un ambiente "di produzione", per dire, le strategie sono in genere altre.


    In ogni caso, se ti basta sapere quale eseguibile sta lavorando il tuo script (cosa che può dirti se sei in un virtual environment, per esempio) allora "sys.executable" è la strada giusta. Se hai bisogno di capire dove sono diretti gli standard stream (altra cosa utile, visto che una shell grafica come IDLE tipicamente re-dirige lo stream verso la propria finestra), allora vedi che cosa ti dice "sys.stdout" per esempio. Arrivare fino allo specifico di os.environ... boh, certamente puoi farlo ma mi sembra davvero eccessivo così a prima vista.

    https://leanpub.com/capirewxpython: Capire wxPython, il mio libro
    https://pythoninwindows.blogspot.com: Python in Windows, il mio blog e le mie guide