<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Paola Rosati - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Impara a programmare gratuitamente! Tutorial di programmazione su Python, JavaScript, Linux e molto altro. ]]>
        </description>
        <link>https://www.freecodecamp.org/italian/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Paola Rosati - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/italian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 26 May 2026 16:03:04 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/italian/news/author/paola/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ I Metodi delle Stringhe di Python split() e join() – Spiegati con Esempi ]]>
                </title>
                <description>
                    <![CDATA[ Quando lavori con le stringhe in Python, potresti dover suddividere una stringa in sottostringhe. O potresti aver bisogno di unire pezzi più piccoli per formare una stringa. I metodi delle stringhe di Python split() e join() ti aiutano ad eseguire queste operazioni facilmente. In questo tutorial, imparerai i metodi delle ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/i-metodi-delle-stringhe-di-python-split-e-join-spiegati-con-esempi/</link>
                <guid isPermaLink="false">65736055e01ce503fea87dee</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Tue, 12 Mar 2024 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/12/split-join.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/python-string-split-and-join-methods-explained-with-examples" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python String split() and join() Methods – Explained with Examples</a>
      </p><p>Quando lavori con le stringhe in Python, potresti dover suddividere una stringa in sottostringhe. O potresti aver bisogno di unire pezzi più piccoli per formare una stringa. I metodi delle stringhe di Python <code>split()</code> e <code>join()</code> ti aiutano ad eseguire queste operazioni facilmente.</p><p>In questo tutorial, imparerai i metodi delle stringhe <code>split()</code> e <code>join()</code> con molti esempi di codice.</p><p>Poiché le stringhe in Python sono immutabili, puoi chiamare questi metodi su di loro senza modificare le stringhe originali. Iniziamo!</p><h2 id="sintassi-del-metodo-split-di-python"><strong>Sintassi del Metodo <code>split()</code> di Python</strong></h2><p>Quando hai bisogno di dividere una stringa in sottostringhe, puoi usare il metodo <code>split()</code>.</p><p>Il metodo <code>split()</code> opera su una stringa e <em>restituisce</em> una lista di sottostringhe. La sintassi è:</p><pre><code class="language-python">&lt;string&gt;.split(sep,maxsplit)</code></pre><p>Nella sintassi qui in alto:</p><ul><li><code>&lt;string&gt;</code> è una qualsiasi stringa valida in Python,</li><li><code>sep</code> è il separatore in corrispondenza del quale vuoi dividere la stringa. Deve essere specificato come <em>stringa</em>.</li></ul><blockquote><code>&lt;string&gt;</code> &nbsp;<code>sep = ","</code></blockquote><ul><li><code>sep</code> è un argomento <em>opzionale</em>. Di default, il metodo divide le stringhe sugli <em>spazi</em>.</li><li><code>maxsplit</code> è un argomento <em>opzionale </em>che indica quante volte vuoi dividere <code>&lt;string&gt;</code>.</li><li><code>maxsplit</code> ha come valore di default <code>-1</code>, che divide la stringa su <em>tutte</em> le occorrenze di <code>sep</code>.</li></ul><blockquote><code>&lt;string&gt;</code> &nbsp;<em><em>first</em></em> &nbsp;<code>maxsplit = 1</code></blockquote><p>E impostare <code>maxsplit = 1</code> ti lascerà con due porzioni - una con la sezione di <code>&lt;string&gt;</code> prima della prima virgola, e un'altra con la sezione di <code>&lt;string&gt;</code> dopo la prima virgola.</p><p>Quando dividi una stringa una volta sola, ottieni 2 porzioni. Quando la dividi due volte, ottieni 3 porzioni. Quando dividi una stringa <code>k</code> volte, ottieni <code>k+1</code> porzioni.</p><p>▶ Prendiamo alcuni esempi per vedere il metodo <code>split()</code> in azione.</p><h2 id="esempi-del-metodo-split-in-python"><strong>Esempi del Metodo <code>split()</code> in Python</strong></h2><p>Iniziamo con <code>my_string</code>, mostrata qui sotto.</p><pre><code class="language-python">my_string = "I code for 2 hours everyday"</code></pre><p>Ora, chiamiamo il metodo <code>split()</code> su <code>my_string</code>, senza gli argomenti <code>sep</code> e <code>maxsplit</code>.</p><pre><code class="language-python">my_string.split()</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-50.png" class="kg-image" alt="image-50" width="600" height="400" loading="lazy"></figure><p>Puoi notare che <code>my_string</code> è stata divisa in corrispondenza di tutti gli spazi e che viene restituita una lista di sottostringhe, come mostrato in alto.</p><p>▶ Prendiamo ora in considerazione il seguente esempio. Qui, <code>my_string</code> contiene nomi di frutti separati da virgole.</p><pre><code class="language-python">my_string = "Apples,Oranges,Pears,Bananas,Berries"</code></pre><p>Dividiamo ora <code>my_string</code> in corrispondenza delle virgole – imposta <code>sep = ","</code> o specifica solo <code>","</code> nella chiamata del metodo.</p><pre><code class="language-python">my_string.split(",")</code></pre><p>Come previsto, il metodo <code>split()</code> restituisce una lista di frutti, dove ogni frutto in <code>my_string</code> è ora un elemento della lista.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-51.png" class="kg-image" alt="image-51" width="600" height="400" loading="lazy"></figure><p>▶ Usiamo ora anche l'argomento opzionale <code>maxsplit</code> impostandolo su 2.</p><pre><code class="language-python">my_string.split(",",2)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-52.png" class="kg-image" alt="image-52" width="600" height="400" loading="lazy"></figure><p>Proviamo ad analizzare la lista restituita.</p><p>Ricorda che <code>my_string</code> è <code>"Apples,Oranges,Pears,Bananas,Berries"</code>, e abbiamo deciso di dividerla in corrispondenza delle virgole (<code>","</code>).</p><ul><li>La prima virgola si trova dopo <code>Apples</code>, e dopo la prima divisione avrai due elementi, <code>Apples</code> e <code>Oranges,Pears,Bananas,Berries</code>.</li><li>La seconda virgola si trova dopo <code>Oranges</code>. E avrai 3 elementi, <code>Apples</code>, <code>Oranges</code>, e <code>Pears,Bananas,Berries</code> dopo la seconda divisione.</li><li>A questo punto, <code>maxsplit</code> ha raggiunto il valore 2, e non si può fare nessun'altra divisione.</li><li>Ecco perché la porzione di stringa dopo la seconda virgola è ammassata insieme in un solo elemento nella lista restituita.</li></ul><p>Spero che tu abbia capito come funzionano il metodo <code>split()</code> e gli argomenti <code>sep</code> e <code>maxsplit</code>.</p><h2 id="sintassi-del-metodo-join-di-python"><strong>Sintassi del Metodo <code>join()</code> di Python</strong></h2><p>Ora che sai come dividere una stringa in sottostringhe, è il momento di imparare come usare il metodo <code>join()</code> per formare una stringa a partire dalle sottostringhe.</p><p>La sintassi del metodo di Python <code>join()</code> è:</p><pre><code class="language-python">&lt;sep&gt;.join(&lt;iterable&gt;)</code></pre><p>Qui,</p><ul><li><code>&lt;iterable&gt;</code> è un qualsiasi elemento iterabile di Python che contenga delle sottostringhe, ad esempio, una lista o una tupla, e</li><li><code>&lt;sep&gt;</code> è il separatore che vorresti usare per unire le stringhe.</li></ul><blockquote><code>join()</code> &nbsp;<code>&lt;iterable&gt;</code> &nbsp;<code>&lt;sep&gt;</code></blockquote><p>▶ Ed è il momento per gli esempi.</p><h2 id="esempi-del-metodo-join-di-python"><strong>Esempi del Metodo <code>join()</code> di Python</strong></h2><p>Nella sezione precedente sul metodo <code>split()</code>, hai diviso <code>my_string</code> in una lista sulle occorrenze delle virgole. Chiamiamo la lista <code>my_list</code>.</p><p>Ora formerai una stringa usando il metodo <code>join()</code> per mettere insieme gli elementi nella lista restituita. Gli elementi in <code>my_list</code> sono tutti nomi di frutti.</p><pre><code class="language-python">my_list = my_string.split(",")

# dopo che my_string è stata divisa my_list è:
['Apples', 'Oranges', 'Pears', 'Bananas', 'Berries']

</code></pre><p>📑 Nota che il separatore per unire deve essere specificato come <em>stringa</em>. Incorrerai in errori di sintassi se non lo fai, come mostrato in basso.</p><pre><code class="language-python">,.join(my_list)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-49.png" class="kg-image" alt="image-49" width="600" height="400" loading="lazy"></figure><p>▶ Per unire gli elementi in <code>my_list</code> usando una virgola come separatore, usa <code>","</code> non <code>,</code>. Questo viene mostrato nella porzione di codice qui in basso.</p><pre><code class="language-python">", ".join(my_list)</code></pre><p>La riga di codice in alto unisce gli elementi in <code>my_list</code> usando una virgola seguita da uno spazio come separatore.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-53.png" class="kg-image" alt="image-53" width="600" height="400" loading="lazy"></figure><p>Puoi specificare un qualunque separatore a tua scelta. Questa volta, userai 3 trattini bassi (<code>___</code>) per unire gli elementi in <code>my_list</code>.</p><pre><code class="language-python">"___".join(my_list)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-54.png" class="kg-image" alt="image-54" width="600" height="400" loading="lazy"></figure><p>Gli elementi in <code>my_list</code> adesso sono stati uniti in una sola stringa, e sono separati l'uno dall'altro da <code>___</code>.</p><p>E adesso sai come formare una stringa di Python mettendo insieme delle sottostringhe usando il metodo <code>join()</code>.</p><h2 id="conclusione"><strong>Conclusione</strong></h2><p>In questo tutorial, hai imparato che:</p><ul><li><code>&lt;string&gt;.split(sep, maxsplit)</code> divide <code>&lt;string&gt;</code> sulle occorrenze di <code>sep</code>, un numero di volte uguale a <code>maxsplit</code>,</li><li><code>&lt;sep&gt;.join(&lt;iterable&gt;)</code> unisce le sottostringhe in <code>&lt;iterable&gt;</code> usando <code>&lt;sep&gt;</code> come separatore.</li></ul><p>Spero che tu abbia trovato utile questo tutorial. Buona programmazione!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Google Colaboratory – Come Eseguire Codice Python in Google Drive ]]>
                </title>
                <description>
                    <![CDATA[ Google Colaboratory ("Colab") è un blocco note (come Jupyter Notebook) da cui puoi eseguire del codice Python nel tuo Google Drive. Puoi scrivere del testo, scrivere codice, eseguire del codice e vederne l'output - tutto all'interno dello stesso blocco note. Benefici di Google Colab Condividere blocchi note è facile tanto ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/google-colaboratory-come-eseguire-codice-python-in-google-drive/</link>
                <guid isPermaLink="false">6574968c101fbf03fab50128</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Tue, 27 Feb 2024 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/12/pexels-sevenstorm-juhaszimrus-425133.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/google-colaboratory-python-code-in-your-google-drive/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Google Colaboratory – How to Run Python Code in Your Google Drive</a>
      </p><p>Google Colaboratory ("Colab") è un blocco note (come Jupyter Notebook) da cui puoi eseguire del codice Python nel tuo Google Drive.</p><p>Puoi scrivere del testo, scrivere codice, eseguire del codice e vederne l'output - tutto all'interno dello stesso blocco note.</p><h2 id="benefici-di-google-colab"><strong>Benefici di Google Colab</strong></h2><p>Condividere blocchi note è facile tanto quanto condividere un qualsiasi documento Google. Puoi anche scaricare l'app ed eseguire il codice dal tuo telefono.</p><p>Puoi usare il potente e popolare linguaggio Python all'interno del tuo Google Drive, e l'installazione richiederà meno di cinque minuti.</p><p>Poiché Python viene eseguito su un server (e non sul tuo browser locale o sul tuo computer locale) puoi usarlo facilmente per interagire con un database online e analizzare i dati in situazioni in cui hai bisogno di mantenere il codice privato.</p><h2 id="come-aggiungere-colab-al-tuo-google-drive"><strong>Come Aggiungere Colab al Tuo Google Drive</strong></h2><ol><li>Sul tuo computer, nel tuo Google Drive, clicca il bottone "+ Nuovo".</li></ol><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/us0e4vwVAXFLV1Zv_07RINIVP3uMish_sPWjumo8Y8LYBjbBqa5fq7Ioxw7KUmbIGGN18mbUcu16EhLpmWreOsqpHqnwyVt6bFvTKTg0B-FdclBXIumNAGSHm8MRQmuYKCMz7Q9_" class="kg-image" alt="us0e4vwVAXFLV1Zv_07RINIVP3uMish_sPWjumo8Y8LYBjbBqa5fq7Ioxw7KUmbIGGN18mbUcu16EhLpmWreOsqpHqnwyVt6bFvTKTg0B-FdclBXIumNAGSHm8MRQmuYKCMz7Q9_" width="600" height="400" loading="lazy"></figure><p><br></p><p>2. &nbsp;Clicca “Altro”, poi clicca "Collega altre applicazioni" in fondo al nuovo menu.</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/kWfy4KkQcuTYxHO0CGiUVsf2PTFRrKEYQzQM1BffRAaarwnIlg3a_zgtD71_NqSzqGnvqRqfTPUi793vgPr6dzNJ6WmhHn9oPePJSaK9h1RNqR5KvwHg2UVj9sYIMBTvizjWtJ_V" class="kg-image" alt="kWfy4KkQcuTYxHO0CGiUVsf2PTFRrKEYQzQM1BffRAaarwnIlg3a_zgtD71_NqSzqGnvqRqfTPUi793vgPr6dzNJ6WmhHn9oPePJSaK9h1RNqR5KvwHg2UVj9sYIMBTvizjWtJ_V" width="600" height="400" loading="lazy"></figure><p><br>3. &nbsp;Nel Google Workspace Marketplace, digita "colab" nella barra di ricerca.</p><figure class="kg-card kg-image-card"><img src="https://lh5.googleusercontent.com/dLHP0JPcfH2VIFFc_cuJeZZ7Kz5UVKGpVxAY_pQNJoGfuBw8Jg6KoLJ_UCETRmgbxmIE8A31VA3BN9KTwXD4hD6CAfHtTIKgNT-vUSVYLK8J_-I-G0YUgVklUB5zQjBKiozuloih" class="kg-image" alt="dLHP0JPcfH2VIFFc_cuJeZZ7Kz5UVKGpVxAY_pQNJoGfuBw8Jg6KoLJ_UCETRmgbxmIE8A31VA3BN9KTwXD4hD6CAfHtTIKgNT-vUSVYLK8J_-I-G0YUgVklUB5zQjBKiozuloih" width="600" height="400" loading="lazy"></figure><p>4. &nbsp;Clicca per aggiungere Google Colaboratory.</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/BShlQ_Hnj829h2ZNUxCJTolVFTYb7EeBoV7TJyqH13pwiS6YZDX95bxVI0RC3Dqp5wl2Mo-B4r8ezHkWFOeRJxFGGuoY9eQYb2ANtEx0nPCxU9aaZQrqEJj_hbePrYTGheWjr0tM" class="kg-image" alt="BShlQ_Hnj829h2ZNUxCJTolVFTYb7EeBoV7TJyqH13pwiS6YZDX95bxVI0RC3Dqp5wl2Mo-B4r8ezHkWFOeRJxFGGuoY9eQYb2ANtEx0nPCxU9aaZQrqEJj_hbePrYTGheWjr0tM" width="600" height="400" loading="lazy"></figure><p><br>5. &nbsp;Ora hai Colab nella &nbsp;lista di applicazioni disponibili.<br></p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/Xxwg1qNNyJQDcxrLlmOILOIGhfVQS1jQpTqjbOym7MqhCoVSdRVu_5EdVfrzgiRp70F01k0AUKZo0AQlmGrO3IgGJD-Dpx77jFhWfLXTW0m3ZfYXz5AMoK9m9BhSG-VhK9D-uX_I" class="kg-image" alt="Xxwg1qNNyJQDcxrLlmOILOIGhfVQS1jQpTqjbOym7MqhCoVSdRVu_5EdVfrzgiRp70F01k0AUKZo0AQlmGrO3IgGJD-Dpx77jFhWfLXTW0m3ZfYXz5AMoK9m9BhSG-VhK9D-uX_I" width="600" height="400" loading="lazy"></figure><h2 id="come-usare-google-colab"><br>Come Usare<strong> Google Colab</strong></h2><p>Ora quando clicchi sul bottone "+ Nuovo" e clicchi "Altro" (in fondo alla prima lista) vedrai "Google Colaboratory" nella lista seguente.</p><p>Cliccaci per aprire un nuovo blocco note Colab. Dai un nome al tuo blocco note, come faresti con qualsiasi documento o foglio Google. Questo blocco note è in modalità scura:</p><figure class="kg-card kg-image-card"><img src="https://lh3.googleusercontent.com/ttxQIV3tGb3kaiMlu-ix-J0939nbXX7Xx_Ke5UMcBnT_mRNVcNfJevAbMWm8nhIYbCM6zNjSMY_d3CwqIi-euqnf8HSAZlLG5oZST84kDnw9JpxKnLNkj-SioTtL_xhYHfiSgS1c" class="kg-image" alt="ttxQIV3tGb3kaiMlu-ix-J0939nbXX7Xx_Ke5UMcBnT_mRNVcNfJevAbMWm8nhIYbCM6zNjSMY_d3CwqIi-euqnf8HSAZlLG5oZST84kDnw9JpxKnLNkj-SioTtL_xhYHfiSgS1c" width="600" height="400" loading="lazy"></figure><p>Digita un semplice comando come test. Per eseguire il codice in qualsiasi cella, puoi cliccare il bottone "esegui" a sinistra della cella di codice (somiglia ad un bottone "play" con un triangolo all'interno di un cerchio) o puoi cliccare [shift] + [invio]. L'output apparirà appena sotto la cella di codice.</p><figure class="kg-card kg-image-card"><img src="https://lh4.googleusercontent.com/DCX2F45Bewre17_E27tFm0liy5l155iNB7vt4ohbFhCS7QUpwc47JHJ0ipkgJU6AcfKDcmLY8u2q8N-JHdBl1BwkTeM5-BQ250YbH-UwEKiLC8D6gjuo96vGcwwSFPJi0fxqbSkS" class="kg-image" alt="DCX2F45Bewre17_E27tFm0liy5l155iNB7vt4ohbFhCS7QUpwc47JHJ0ipkgJU6AcfKDcmLY8u2q8N-JHdBl1BwkTeM5-BQ250YbH-UwEKiLC8D6gjuo96vGcwwSFPJi0fxqbSkS" width="600" height="400" loading="lazy"></figure><p>Puoi importare molte librerie popolari senza bisogno di installarle prima.</p><figure class="kg-card kg-image-card"><img src="https://lh6.googleusercontent.com/Ya_VZMKr0gAEs-UJq7BZa-gnjQ3_AQSAq1YK-eCNQBMgibEeFuAl9BwYZvSrhOyC518v5bjJD9gIGs7WQoI87S3cy_cbJdzIScUvYP8pxpTHEhbbRwSLZwX5qojvn7MQPEfOu0F6" class="kg-image" alt="Ya_VZMKr0gAEs-UJq7BZa-gnjQ3_AQSAq1YK-eCNQBMgibEeFuAl9BwYZvSrhOyC518v5bjJD9gIGs7WQoI87S3cy_cbJdzIScUvYP8pxpTHEhbbRwSLZwX5qojvn7MQPEfOu0F6" width="600" height="400" loading="lazy"></figure><p>Se importi una libreria o definisci una funzione in una cella, essa sarà ancora disponibile nelle altre celle per almeno qualche minuto. Il runtime si disconnetterà se stai 30 minuti senza eseguire nessuna cella o se tieni il blocco note aperto per 12 ore.</p><h2 id="esplora-colab"><strong>Esplora Colab</strong></h2><p>Se stavi seguendo passo passo e adesso hai Google Colaboratory installato, sei pronto per sviluppare i tuoi progetti.</p><p>Se clicchi sul simbolo “<strong><strong>&lt; &gt;</strong></strong>” in basso a sinistra del blocco note, troverai degli esempi di codice che puoi usare. Inoltre, Google possiede molte risorse per te, alcune delle quali si trovano su <a href="https://colab.research.google.com/">https://colab.research.google.com/</a> (chiudi semplicemente la finestra pop-up che appare).</p><p>A freeCodeCamp stiamo mettendo su <a href="https://www.freecodecamp.org/learn/college-algebra-with-python/">un curriculum per mostrarti come usare Python per risolvere problemi matematici</a>. Adesso hai gli strumenti a portata di mano. Buona programmazione!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Le Interfacce in Java Spiegate con Esempi ]]>
                </title>
                <description>
                    <![CDATA[ Un'interfaccia in Java è un po' come una classe, ma con una differenza significativa: una interface può avere solo le firme dei metodi, attributi e metodi di default. A partire da Java 8, puoi anche creare metodi di default [https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html]. Nel prossimo blocco di codice puoi vedere un esempio di ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/le-interfacce-in-java-spiegate-con-esempi/</link>
                <guid isPermaLink="false">6547ee47e253cc03fcab8814</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Wed, 21 Feb 2024 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/12/5f9c9ce6740569d1a4ca34c5.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/java-interfaces-explained-with-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Java Interfaces Explained with Examples</a>
      </p><p>Un'interfaccia in Java è un po' come una classe, ma con una differenza significativa: una <code>interface</code> può avere <em>solo </em>le firme dei metodi, attributi e metodi di default<em>. </em>A partire da Java 8, puoi anche creare <a href="https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">metodi di default</a>. Nel prossimo blocco di codice puoi vedere un esempio di interfaccia:</p><pre><code class="language-java">public interface Veicolo {
    public String targa = "";
    public float maxVel;
    public void accendi();
    public void spegni();
    default void suonaClacson(){
      System.out.println("Sto suonando il clacson");
   }
}</code></pre><p>L'interfaccia qui in alto contiene due attributi, due metodi e un metodo di default. Da sola, non è molto utile, ma di solito vengono usate insieme alle Classi. In che modo? Semplice, devi assicurarti che delle classi la implementino, usando la parola chiave <code>implements</code>.</p><pre><code class="language-java">public class Macchina implements Veicolo {
    public void accendi() {
        System.out.println("avvio del motore...");
    }
    public void spegni() {
        System.out.println("spegnendo il motore...");
    }
}</code></pre><p>Ora, c'è una <strong>regola di base</strong>: la classe deve implementare <strong>tutti </strong>i metodi dell'interfaccia. I metodi devono avere <em>la stessa identica</em> firma (nome, parametri ed eccezioni) così com'è descritta nell'interfaccia. La classe, però, <em>non</em> ha bisogno di dichiarare gli attributi, solo i metodi.</p><h2 id="istanze-di-un-interfaccia"><strong><strong>Istanze di un'Interfaccia</strong></strong></h2><p>Una volta creata una classe di Java che implementa una qualsiasi Interfaccia, l'istanza dell'oggetto deve essere referenziata come istanza dell'interfaccia. Questo concetto è simile a quello dell'istanziazione ereditaria.</p><pre><code class="language-java">// facendo seguito al nostro esempio di prima

Veicolo tesla = new Macchina();

tesla.parti(); // avvio del motore ...</code></pre><p>Un'interfaccia <strong>non può</strong> contenere un costruttore. Per questo, <strong>non puoi</strong> creare un'istanza dell'interfaccia stessa. Devi creare un'istanza di una classe implementando un'interfaccia per poterla referenziare.</p><p>Pensa alle interfacce come a moduli di contratto vuoti, o come template.</p><p>Che cosa puoi fare con questa funzionalità? Polimorfismo! Puoi usare solo le interfacce per riferirti alle istanze dell'oggetto!</p><pre><code class="language-java">class Camion implements Veicolo {
    public void avvio() {
        System.out.println("avvio del motore del camion...");
    }
    public void spegni() {
        System.out.println("spegnimento del motore del camion...");
    }
}

class Starter {
    // metodo statico, può essere invocato senza istanziare la classe
    public static void avviaMotore(Veicolo veicolo) {
        veicolo.avvio();
    }
}

Veicolo tesla = new Macchina();
Veicolo tata = new Camion();

Starter.avviaMotore(tesla); // avvio del motore ...
Starter.avviaMotore(tata); // avvio del motore del camion ...</code></pre><h2 id="e-per-quanto-riguarda-molteplici-interfacce"><strong>E per quanto riguarda molteplici interfacce?</strong></h2><p>Sì, puoi implementare molteplici interfacce in una sola classe. Mentre nell'<a href="https://forum.freecodecamp.com/t/java-docs-inheritance">ereditarietà</a> tra classi sei costretto ad ereditare da una sola classe, qui puoi estendere un numero qualsiasi di interfacce. Ma non dimenticare di implementare <em>tutti</em> i metodi di tutte le Interfacce, altrimenti la compilazione fallirà!</p><pre><code class="language-java">public interface GPS {
    public void ottieniCoordinate();
}

public interface Radio {
    public void accendiRadio();
    public void spegniRadio();
}

public class Smartphone implements GPS,Radio {
    public void ottieniCoordinate() {
        // return delle coordinate
    }
    public void accendiRadio() {
      // accendi Radio
    }
    public void spegniRadio() {
        // spegni Radio
    }
}</code></pre><h2 id="alcune-caratteristiche-delle-interfacce"><strong>Alcune caratteristiche delle Interfacce</strong></h2><ul><li>Puoi inserire delle variabili all'interno di un'Interfaccia, anche se non sarebbe una decisione sensata poiché le Classi non sono tenute ad avere la stessa variabile. In breve, evita di inserire delle variabili!</li><li>Tutte le variabili e i metodi in un'Interfaccia sono pubblici, anche se non metti la parola chiave <code>public</code>.</li><li>Un'Interfaccia non può specificare l'implementazione di un metodo in particolare. Sta alle Classi farlo. Anche se c'è stata una recente eccezione (vedi più avanti).</li><li>Se una Classe implementa più Interfacce, allora c'è una remota possibilità che la firma di un metodo coincida con un'altra. Poiché Java non permette di avere più metodi con la stessa firma, questo può causare problemi. Dai un'occhiata a <a href="http://stackoverflow.com/questions/2598009/method-name-collision-in-interface-implementation-java">questa domanda</a> per maggiori informazioni.</li></ul><h2 id="metodi-di-default-delle-interfacce"><strong>Metodi di Default delle Interfacce</strong></h2><p>Prima di Java 8, non c'era nessun modo per far sì che un'interfaccia avesse una specifica implementazione di un metodo. Questo porta ad un sacco di confusione ed errori di codice nel caso in cui la definizione di un'interfaccia venga cambiata.</p><p>Ipotizza di aver scritto una libreria open source, che contiene un'Interfaccia. Supponiamo che i tuoi clienti, ovvero praticamente tutti gli sviluppatori del mondo, ne stiano facendo ampio uso e siano felici. Adesso hai dovuto aggiornare la libreria aggiungendo una nuova definizione di un metodo dell'Interfaccia per supportare una nuova funzionalità. Ma questo romperebbe <em>tutti</em> i build, poiché tutte le Classi che implementano quell'Interfaccia devono essere cambiate. Che catastrofe!</p><p>Fortunatamente, Java 8 adesso ci mette a disposizione dei metodi <code>default</code> per le Interfacce. Un metodo <code>default</code> <em>può</em> contenere una sua implementazione direttamente all'interno dell'Interfaccia. Dunque, se una Classe non implementa il metodo di default, il compilatore prenderà l'implementazione menzionata nell'Interfaccia. Comodo, vero? Dunque, nella tua libreria, potrai aggiungere qualsiasi numero di metodi di default nelle interfacce senza temere di rompere nulla!</p><pre><code class="language-java">public interface GPS {
    public void ottieniCoordinate();
    default public void ottieniCoordinateApprossimative() {
        // implementazione per restituire coordinate da fonti approssimative
        // come il wifi o il telefono
        System.out.println("Prendo coordinate approssimative...");
    }
}

public interface Radio {
    public void accendiRadio();
    public void spegniRadio();
}

public class Smartphone implements GPS,Radio {
    public void ottieniCoordinate() {
        // return delle coordinate
    }
    public void accendiRadio() {
      // accendi Radio
    }
    public void spegniRadio() {
        // spegni Radio
    }

    // nessuna implementazione per ottieniCoordinateApprossimative()
}

Smartphone motoG = new Smartphone();
motog.ottieniCoordinateApprossimative(); // Prendo coordinate approssimative...</code></pre><p><strong>Ma cosa succede se due interfacce hanno la stessa firma di un metodo?</strong></p><p>Ottima domanda. In quel caso, se non fornisci un'implementazione all'interno della Classe, il povero compilatore si confonderà e, semplicemente, fallirà! Devi fornire un'implementazione di metodo di default anche all'interno della Classe. C'è anche un modo elegante di farlo usando <code>super</code> per chiamare l'implementazione che preferisci: </p><pre><code class="language-java">public interface Radio {
    // public void accendiRadio();
    // public void spegniRadio();

    default public void prossima() {
        System.out.println("Prossima canzone dalla Radio");
    }
}

public interface LettoreMusicale {
    // public void accendi();
    // public void pausa();
    // public void spegni();

    default public void prossima() {
        System.out.println("Prossima canzone dal lettore musicale");
    }
}

public class Smartphone implements Radio, LettoreMusicale {
    public void prossima() {
        // Supponiamo che tu voglia chiamare prossima() del LettoreMusicale
        LettoreMusicale.super.prossima();
    }
}

Smartphone motoG = new Smartphone();
motoG.prossima(); // Prossima canzone dal lettore musicale</code></pre><h2 id="metodi-statici-nelle-interfacce"><strong>Metodi Statici nelle Interfacce</strong></h2><p>Un'altra novità in Java 8 è la possibilità di aggiungere metodi statici alle interfacce. I metodi statici delle interfacce sono quasi identici ai metodi statici delle classi concrete. L'unica grande differenza è che i metodi <code>static</code> non sono ereditati nelle classi che implementano l'interfaccia. Ciò significa che quando si chiama il metodo statico viene referenziata l'interfaccia, non la classe che lo implementa.</p><pre><code class="language-java">interface LettoreMusicale {
  public static void spotPubblicitario(String sponsor) {
    System.out.println("Adesso una promozione da " + sponsor);
  }
  
  public void riproduci();
}


class Smartphone implements LettoreMusicale {
	public void riproduci() {
		System.out.println("Riproduco da smartphone");
	}
}

class Main {
  public static void main(String[] args) {
    Smartphone motoG = new Smartphone();
    MusicPlayer.spotPubblicitario("Motorola"); // Chiamato dall'interfaccia, non dalla classe che la implementa
    // motoG.spotPubblicitario("Motorola"); // Questo causerebbe un errore di compilazione
  }
}</code></pre><h2 id="ereditariet-nelle-interfacce"><strong>Ereditarietà nelle interfacce</strong></h2><p>È inoltre possibile, in Java, che un'interfaccia <em>erediti</em> un'altra interfaccia usando, come hai già immaginato, la parola chiave <code>extends</code>:</p><pre><code class="language-java">public interface Lettore {
    public void accendi();
    public void pausa();
    public void spegni();
}

public interface LettoreMusicale extends Lettore {
    default public void prossima() {
        System.out.println("Prossima canzone dal lettore musicale");
    }
}</code></pre><p>Ciò significa che la Classe che implementa l'Interfaccia <code>LettoreMusicale</code> deve implementare <em>tutti </em>i metodi di <code>LettoreMusicale</code> così come quelli di <code>Lettore</code>:</p><pre><code class="language-java">public class SmartPhone implements LettoreMusicale {
    public void accendi() {
        System.out.println("Accensione");
    }
    public void spegni() {
        System.out.println("Spegnimento");
    }
    public void pausa() {
        System.out.println("Messo in pausa");
    }
}</code></pre><p>Adesso hai una visione più chiara delle interfacce di Java! Dai un'occhiata alle Classi Astratte per vedere un altro modo in cui Java ti permette di definire contratti.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Installare Python su Windows ]]>
                </title>
                <description>
                    <![CDATA[ Prima di provare ad eseguire qualsiasi programma in Python sul tuo sistema operativo Windows, dovrai controllare di avere Python installato e aggiunto correttamente alla variabile di ambiente path. In questo articolo, ti mostrerò come puoi controllare di avere Python installato sul tuo sistema operativo. Se non lo hai, allora ti ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-installare-python-su-windows/</link>
                <guid isPermaLink="false">65040ecbca56f103fd49cf33</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Thu, 09 Nov 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/11/Artboard-1-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-install-python-in-windows-operating-system/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Install Python on Windows</a>
      </p><p>Prima di provare ad eseguire qualsiasi programma in Python sul tuo sistema operativo Windows, dovrai controllare di avere Python installato e aggiunto correttamente alla variabile di ambiente path.</p><p>In questo articolo, ti mostrerò come puoi controllare di avere Python installato sul tuo sistema operativo. Se non lo hai, allora ti mostrerò anche come puoi installarlo correttamente su Windows.</p><p>In questo articolo, userò Windows 11 poiché è l'ultima versione di Microsoft Windows. Ma lo stesso metodo è applicabile ad altre versioni di Windows. Dunque, senza indugiare oltre, cominciamo.</p><h2 id="come-controllare-se-hai-python-installato-sul-tuo-sistema-operativo-windows"><strong>Come Controllare se Hai Python Installato sul Tuo Sistema Operativo Windows</strong></h2><p>Apri il <strong>CMD</strong> o la <strong>Powershell</strong> e controlla la versione di Python usando questo comando:</p><pre><code class="language-powershell">python --version
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-150253.png" class="kg-image" alt="Screenshot-2022-02-18-150253" width="600" height="400" loading="lazy"></figure><p>Se ottieni la versione di Python nell'output come vedi in alto, allora il tuo computer è perfettamente in grado di eseguire qualsiasi programma di Python. Nel tuo caso, la versione di Python potrebbe essere diversa.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/2022-02-18-11-45-00.00_00_34_07.Still001.jpg" class="kg-image" alt="2022-02-18-11-45-00.00_00_34_07.Still001" width="600" height="400" loading="lazy"></figure><p>Ma se ottieni il tipo di output che vedi in alto, potrebbe significare una di queste cose:</p><ol><li>Non avevi Python installato sul tuo computer, oppure</li><li>La cartella di Python non è stata aggiunta al percorso delle <strong>Variabili di Ambiente</strong>.</li></ol><p>Per ora fammi dare per scontato che tu non abbia Python installato sul tuo computer. Più avanti in questo articolo ti spiegherò anche come puoi aggiungere la cartella di Python al percorso delle Variabili d'Ambiente.</p><h2 id="come-installare-python-su-windows"><strong>Come Installare Python su Windows</strong></h2><p>Prima di tutto, dobbiamo andare sul <a href="https://www.python.org/">sito ufficiale di Python</a>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-150905.png" class="kg-image" alt="Screenshot-2022-02-18-150905" width="600" height="400" loading="lazy"></figure><p>Clicca sulla sezione <strong><strong>Downloads</strong></strong>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-151036.png" class="kg-image" alt="Screenshot-2022-02-18-151036" width="600" height="400" loading="lazy"></figure><p>Qui otterrai l'ultima versione. Clicca semplicemente su Download <code>Python 3.10.2</code>. Nel momento in cui stai leggendo questo articolo, Python potrebbe essere stato aggiornato, nel qual caso la versione sarebbe diversa. Semplicemente scarica la versione che ti mostra.</p><p>Tieni a mente che qui ti mostrerà sempre l'ultima versione di Python in alto.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-151239.png" class="kg-image" alt="Screenshot-2022-02-18-151239" width="600" height="400" loading="lazy"></figure><p>Dopo aver scaricato il file, otterremo un file eseguibile come questo. Fai semplicemente doppio click su quel file e il wizard di installazione si aprirà.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/06.png" class="kg-image" alt="06" width="600" height="400" loading="lazy"></figure><p>Clicca su <code>Customize installation</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/07.png" class="kg-image" alt="07" width="600" height="400" loading="lazy"></figure><p>Assicurati di spuntare tutte le caselle, come in alto. Poi clicca su <code>Next</code>.</p><p>Poi vedrai lo screen in basso. Se vuoi, puoi spuntare tutte le caselle. Non ho bisogno del debugging dei simboli e del debug dei binari. Per questo motivo, non spunterò le ultime due caselle.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/08.png" class="kg-image" alt="08" width="600" height="400" loading="lazy"></figure><p>Ti consiglierei inoltre di non cambiare la posizione per l'installazione. Ricorda dove lo hai installato perché potrebbe servirti in seguito. Stiamo aggiungendo Python alle variabili d'ambiente direttamente qui.</p><p>Poi clicca <code>Install</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/09.png" class="kg-image" alt="09" width="600" height="400" loading="lazy"></figure><p>Lascia che termini il processo di installazione...</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/09--1-.png" class="kg-image" alt="09--1-" width="600" height="400" loading="lazy"></figure><p>Se ottieni questo tipo di suggerimento per disabilitare il limite di lunghezza del percorso, clicca semplicemente su quella casella. Disabiliterà il limite di lunghezza del percorso rimuovendo la limitazione sulla variabile MAX_PATH.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/05/Fahim-article-image.png" class="kg-image" alt="Fahim-article-image" width="600" height="400" loading="lazy"></figure><p>Questo cambiamento non romperà nulla, né apporterà modifiche negative. Permetterà solamente a Python di usare nomi di percorso lunghi. È consigliato disabilitare il limite di lunghezza del percorso.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/02/11-2.png" class="kg-image" alt="11-2" width="600" height="400" loading="lazy"></figure><p>L'installazione è terminata con successo.</p><h2 id="come-controllare-la-versione-di-python"><strong>Come Controllare la Versione di Python</strong></h2><p>Adesso dobbiamo controllare di nuovo se Python sia stato installato e aggiunto con successo al percorso delle variabili di ambiente oppure no.</p><p>Per controllarlo, dobbiamo aprire il <strong>CMD </strong>o la <strong>Powershell</strong>. Poi dobbiamo usare il seguente comando:</p><pre><code class="language-powershell">python --version
</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-152724.png" class="kg-image" alt="Screenshot-2022-02-18-152724" width="600" height="400" loading="lazy"></figure><p>Python è stato installato con successo e anche il percorso è stato aggiunto tra le variabili d'ambiente! </p><h2 id="come-controllare-il-percorso-delle-variabili-d-ambiente"><strong>Come Controllare il Percorso delle Variabili d'Ambiente</strong></h2><p>Se vuoi controllare il percorso delle variabili manualmente allora devi aprire le <code>Impostazioni di sistema avanzate</code>. Puoi cercare <code>Impostazioni di sistema avanzate</code>, oppure puoi aprirle dal <strong>Pannello di Controllo</strong>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-152934.png" class="kg-image" alt="Screenshot-2022-02-18-152934" width="600" height="400" loading="lazy"></figure><p>Se le cerchi usando le parole chiave <code>Impostazioni di sistema avanzate</code>, lo otterrai direttamente in questo modo.</p><p>Se vuoi aprirle dal <strong>Pannello di Controllo</strong> allora, prima di tutto, devi aprire il pannello di controllo.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-153056.png" class="kg-image" alt="Screenshot-2022-02-18-153056" width="600" height="400" loading="lazy"></figure><p>Vai su <code>Sistema e Sicurezza</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-153217.png" class="kg-image" alt="Screenshot-2022-02-18-153217" width="600" height="400" loading="lazy"></figure><p>Clicca su <code>Sistema</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-153311.png" class="kg-image" alt="Screenshot-2022-02-18-153311" width="600" height="400" loading="lazy"></figure><p>Da qui, clicca su <code>Impostazioni di sistema avanzate</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-153400.png" class="kg-image" alt="Screenshot-2022-02-18-153400" width="600" height="400" loading="lazy"></figure><p>Clicca su <code>Variabili d'ambiente</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-153439.png" class="kg-image" alt="Screenshot-2022-02-18-153439" width="600" height="400" loading="lazy"></figure><p>Clicca su <code>Path</code> e poi clicca <code>Modifica</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-153531.png" class="kg-image" alt="Screenshot-2022-02-18-153531" width="600" height="400" loading="lazy"></figure><p>Vedrai che la cartella radice di <strong>Python310 </strong>e le <strong>cartelle degli script</strong> di Python310 sono state già aggiunte durante il processo di installazione, poiché abbiamo spuntato la casella per farlo durante l'installazione.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/02/Screenshot-2022-02-18-153614.png" class="kg-image" alt="Screenshot-2022-02-18-153614" width="600" height="400" loading="lazy"></figure><p>Se avessi voluto farlo manualmente allora avresti dovuto copiare e incollare le due cartelle qui cliccando su <code>Nuovo</code> e incollando le due cartelle nelle due caselle bianche (una nuova casella si apre ogni volta che clicchi su <code>Nuovo</code>). Poi clicca semplicemente su <code>OK</code> su tutte le caselle aperte e chiudi tutte le finestre aperte.</p><p>Ho fatto anche un video dove mostro tutti i processi menzionati in alto. Se vuoi, puoi darci un'occhiata <a href="https://youtu.be/whywQfFdBmo">qui</a>.</p><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Grazie per aver letto l'intero articolo. Se ti può essere di aiuto puoi anche dare un'occhiata ai miei altri articoli su <a href="https://www.freecodecamp.org/news/author/fahimbinamin/">freeCodeCamp</a>.</p><p>Se vuoi metterti in contatto con me, puoi farlo usando <a href="https://twitter.com/Fahim_FBA">Twitter</a>, <a href="https://www.linkedin.com/in/fahimfba/">LinkedIn</a>, e <a href="https://github.com/FahimFBA">GitHub</a>.</p><p>Puoi anche <a href="https://www.youtube.com/@FahimAmin?sub_confirmation=1">ISCRIVERTI al mio canale di YouTube</a> (Code With FahimFBA) se vuoi imparare diversi tipi di linguaggi di programmazione con molti esempi pratici pubblicati regolarmente.</p><p>Se vuoi dare un'occhiata ai miei highlights, puoi farlo sulla mia <a href="https://www.polywork.com/fahimbinamin">timeline Polywork</a>.</p><p>Puoi anche <a href="https://fahimbinamin.com/">visitare il mio sito</a> per saperne di più su di me e sulle cose su cui sto lavorando.</p><p>Grazie mille!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Da Stringa ad Array di Caratteri - Tutorial Java ]]>
                </title>
                <description>
                    <![CDATA[ In questo articolo vedremo come convertire una stringa in un array di caratteri in Java. Ti spiegherò brevemente anche che cosa sono le stringhe, i caratteri e gli array. Che Cos'è un Carattere in Java? I caratteri sono tipi di dato primitivi. Un carattere è un singolo carattere racchiuso tra ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/da-stringa-ad-array-di-caratteri-tutorial-java/</link>
                <guid isPermaLink="false">64f34cbe21109103fd7baab7</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Tue, 26 Sep 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/09/k.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/string-to-char-array-java-tutorial/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">String to Char Array Java Tutorial</a>
      </p><p>In questo articolo vedremo come convertire una stringa in un array di caratteri in Java. Ti spiegherò brevemente anche che cosa sono le stringhe, i caratteri e gli array.</p><h2 id="che-cos-un-carattere-in-java"><strong>Che Cos'è un Carattere in Java?</strong></h2><p>I caratteri sono tipi di dato primitivi. Un carattere è un singolo carattere racchiuso tra due apici singoli. Può essere una lettera, un numero, un segno di punteggiatura, uno spazio o qualcosa di simile. Per esempio:</p><pre><code class="language-java">char primaVocale = 'a';</code></pre><h2 id="che-cos-una-stringa-in-java"><strong>Che Cos'è una Stringa in Java?</strong></h2><p>Le stringhe sono oggetti (tipo di riferimento). Una stringa è composta da una serie di caratteri. È qualsiasi cosa che si trova tra le doppie virgolette. Per esempio:</p><pre><code class="language-java">String vocali = "aeiou";</code></pre><h2 id="che-cos-un-array-in-java"><strong>Che Cos'è un Array in Java?</strong></h2><p>Gli array sono strutture di dati fondamentali che in Java possono immagazzinare un determinato numero di elementi dello stesso tipo di dato. Per esempio, dichiariamo un array di caratteri:</p><pre><code class="language-java">char[] arrayVocali = {'a', 'e', 'i', 'o', 'u'};</code></pre><p>Ora abbiamo una conoscenza di base di quello che sono stringhe, caratteri e array.</p><h2 id="convertiamo-una-stringa-in-un-array-di-caratteri"><strong>Convertiamo una Stringa in un Array di Caratteri</strong></h2><h3 id="1-usa-il-metodo-di-istanza-tochararray-"><strong>1. Usa il Metodo di Istanza toCharArray()</strong></h3><p><code>toCharArray()</code> è un metodo d'istanza della classe <code>String</code>. Restituisce un nuovo array di caratteri basato sull'oggetto stringa corrente.</p><p>Vediamo un esempio:</p><pre><code class="language-java">// definisci una stringa
String vocali = "aeiou";

// crea un array di caratteri 
char[] arrayVocali = vocali.toCharArray();

// stampa arrayVocali
System.out.println(Arrays.toString(arrayVocali));</code></pre><p>Output: <code>[a, e, i, o, u]</code></p><p>Quando convertiamo una stringa in un array di caratteri, la lunghezza rimane la stessa. Controlliamo la lunghezza di <code>vocali</code> e di <code>arrayVocali</code>:</p><pre><code class="language-java">System.out.println("La lunghezza di \'vocali\' è " + vocali.length());
System.out.println("La lunghezza di \'arrayVocali\' è " + arrayVocali.length);</code></pre><p>Output:</p><pre><code>La lunghezza di 'vocali' è 5
La lunghezza di 'arrayVocali' è 5</code></pre><p>Possiamo usare diversi modi di stampare un array. Ho usato il metodo statico <code>toString()</code> dalla classe di utilità <code>Arrays</code>.</p><p>Puoi leggere di più riguardo il metodo d'istanza <code>toCharArray()</code> nella <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#toCharArray--">documentazione di Java</a>.</p><h3 id="2-usa-il-metodo-di-istanza-charat-"><strong>2. Usa il Metodo di Istanza charAt()</strong></h3><p><code>charAt()</code> è un metodo d'istanza della classe <code>String</code>. Restituisce il carattere che si trova all'indice specificato della stringa corrente.</p><p><strong><strong>NOT</strong>A<strong>:</strong></strong> una stringa ha indici che partono da zero, come un array.</p><p>Vediamo come possiamo convertire una stringa in un array di caratteri usando <code>charAt()</code> :</p><pre><code class="language-java">// definisci una stringa
String vocali = "aeiou";

// crea un array di caratteri. La lunghezza è la lunghezza di 'vocali'
char[] arrayVocali = new char[vocali.length()];

// usa un ciclo per iterare attraverso ogni carattere nella stringa 'vocali'
for (int i = 0; i &lt; vocali.length(); i++) {
    // aggiungi ogni carattere all'array di caratteri
    arrayVocali[i] = vocali.charAt(i);
}

// stampa l'array
System.out.println(Arrays.toString(arrayVocali));</code></pre><p>Output: <code>[a, e, i, o, u]</code></p><p>Puoi leggere di più riguardo il metodo d'istanza <code>charAt()</code> nella <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#charAt-int-">documentazione di Java</a>.</p><p>Ti ho appena mostrato un altro modo di convertire una stringa in un array di caratteri, ma possiamo usare il metodo <code>toCharArray()</code> per convertirla facilmente invece di creare un loop e iterare attraverso la stringa.</p><p>Sentiti libero di farmi sapere se hai suggerimenti o domande.</p><p>Foto di <a href="https://unsplash.com/@a2_foto?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Alex Alvarez</a> su <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p><p><strong>Supporta<strong> freeCodeCamp </strong>nella loro <a href="https://www.freecodecamp.org/italian/news/stiamo-realizzando-un-curriculum-in-data-science-con-matematica-avanzata-e-machine-learning/">Raccolta Fondi del Curriculum di Scienza dei Dati</a><strong>.</strong></strong></p><p>Mettiti in contatto con me su <a href="https://mvthanoshan.medium.com/">Medium</a>.</p><p>Grazie 😇</p><p><strong>Buona Programmazione<strong><strong><strong><strong><strong><strong><strong> ❤️</strong></strong></strong></strong></strong></strong></strong></strong></p><h3 id="per-saperne-di-pi-sulla-programmazione-in-java"><strong>Per saperne di più sulla Programmazione<strong><strong> in Java</strong></strong></strong></h3><ol><li><a href="https://www.freecodecamp.org/news/java-object-oriented-programming-system-principles-oops-concepts-for-beginners/">Principi di Programmazione Orientata agli Oggetti in Java: Concetti OOP per Principianti</a></li><li><a href="https://www.freecodecamp.org/italian/news/metodi-per-array-in-java-come-stampare-un-array-in-java/">Metodi degli Array in Java - Come Stampare un Array in Java</a></li><li><a href="https://www.freecodecamp.org/news/java-string-to-int-how-to-convert-a-string-to-an-integer/">Da Stringa a Int in Java - Come Convertire una Stringa in un Numero Intero</a></li><li><a href="https://www.freecodecamp.org/italian/news/generatore-di-numeri-casuali-in-java-come-generare-interi-con-math-random/">Generatore di Numeri Casuali in Java - Come Generare Numeri Interi con Math Random</a></li></ol> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Metodi per Array in Java – Come Stampare un Array in Java ]]>
                </title>
                <description>
                    <![CDATA[ Un array è una struttura di dati usata per immagazzinare dati dello stesso tipo. Gli array immagazzinano i propri elementi in posizioni di memoria contigue. In Java, gli array sono oggetti. Tutti i metodi della classe object possono essere chiamati su un array. Possiamo immagazzinare un numero fisso di elementi ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/metodi-per-array-in-java-come-stampare-un-array-in-java/</link>
                <guid isPermaLink="false">64f590b508035e03fe8ca1de</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Mon, 25 Sep 2023 08:48:13 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/09/Untitled-design--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/java-array-methods-how-to-print-an-array-in-java/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Java Array Methods – How to Print an Array in Java</a>
      </p><p>Un array è una struttura di dati usata per immagazzinare dati dello stesso tipo. Gli array immagazzinano i propri elementi in posizioni di memoria contigue.</p><p>In Java, gli array sono oggetti. Tutti i metodi della classe object possono essere chiamati su un array. Possiamo immagazzinare un numero fisso di elementi in un array.</p><p>Dichiariamo un semplice array di tipo primitivo:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};</code></pre><p>Adesso proviamo a stamparlo usando il metodo <code>System.out.println()</code>:</p><pre><code class="language-java">System.out.println(intArray);
// output: [I@74a14482</code></pre><p>Perché Java non ha stampato il nostro array? Che cosa sta succedendo dietro le quinte?</p><p>Il metodo <code>System.out.println()</code> converte l'oggetto che abbiamo passato in una stringa chiamando <code>String.valueOf()</code>. Se diamo un'occhiata all'implementazione del metodo <code>String.valueOf()</code> vedremo questo:</p><pre><code class="language-java">public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}</code></pre><p>Se l'oggetto passato è <code>null</code> ci restituisce null, altrimenti chiama il metodo <code>obj.toString()</code> . Alla fine, <code>System.out.println()</code> chiama <code>toString()</code> per stampare l'output.</p><p>Se la classe di quell'oggetto non sovrascrive l'implementazione di <code>Object.toString()</code>, chiamerà il metodo <code>Object.toString()</code>.</p><p><code>Object.toString()</code> restituisce <code>getClass().getName()+<strong><strong><strong><strong>‘@’</strong></strong></strong></strong>+Integer.toHexString(hashCode())</code> . In parole povere, restituisce: "nome della classe @ codice hash dell'oggetto".</p><p>Nel nostro precedente output <code>[I@74a14482</code> , <code>[</code> esprime che si tratta di un array, e <code>I</code> sta per int (il tipo dell'array). <code>74a14482</code> è la rappresentazione esadecimale senza segno del codice hash dell'array.</p><p>Ogni volta che creiamo le nostre classi personalizzate, è buona prassi sovrascrivere il metodo <code>Object.toString()</code>.</p><p>Non possiamo stampare gli array in Java usando il banale metodo <code>System.out.println()</code>. Invece, questi sono i modi in cui possiamo stampare un array:</p><ol><li>Loop: loop for e loop for-each</li><li>Il metodo <code>Arrays.toString()</code></li><li>Il metodo <code>Arrays.deepToString()</code></li><li>Il metodo <code>Arrays.asList()</code></li><li>L'interfaccia Java Iterator</li><li>Java Stream API</li></ol><p>Vediamoli uno ad uno.</p><h1 id="1-loop-loop-for-e-loop-for-each"><strong>1. </strong>Loop: loop for e loop for-each</h1><p>Ecco un esempio di un loop for:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};

for(int i=0; i&lt;intArray.length; i++){
    System.out.print(intArray[i]);
    // output: 25461234
}</code></pre><p>Tutte le classi wrapper sovrascrivono <code>Object.toString()</code> e restituiscono una rappresentazione del loro valore in formato di stringa.</p><p>Ed ecco un loop for-each:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};

for(int i: intArray){
    System.out.print(i);
    // output: 25461234
}</code></pre><h1 id="2-il-metodo-arrays-tostring-"><strong>2. Il metodo Arrays.toString()</strong></h1><p><code>Arrays.toString()</code> è un metodo statico della classe array che appartiene al package <code>java.util</code>. Restituisce una rappresentazione dei contenuti dell'array specificato in formato di stringa. Possiamo stampare array unidimensionali usando questo metodo.</p><p>Gli elementi dell'array sono convertiti in stringhe usando il metodo <code>String.valueOf()</code>, in questo modo:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};
System.out.println(Arrays.toString(intArray));
// output: [2, 5, 46, 12, 34]</code></pre><p>Per un array di riferimenti, dobbiamo assicurarci che la classe del tipo di riferimento sovrascriva il metodo <code>Object.toString()</code>.</p><p>Per esempio:</p><pre><code class="language-java">public class Test {
    public static void main(String[] args) {
        Studente[] studenti = {new Studente("John"), new Studente("Doe")};
        
        System.out.println(Arrays.toString(studenti));
        // output: [Studente{nome='John'}, Studente{nome='Doe'}]
    }
}

class Studente {
    private String nome;

    public Student(String nome){
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Override
    public String toString() {
        return "Studente{" + "nome='" + nome + '\'' + '}';
    }
}</code></pre><p>Questo metodo non è appropriato per array multidimensionali. Converte gli array multidimensionali in stringhe usando <code>Object.toString()</code> che descrive i loro id al posto dei loro contenuti.</p><p>Per esempio:</p><pre><code class="language-java">// creo un array multidimensionale
int[][] multiDimensionalArr = { {2,3}, {5,9} };

System.out.println(Arrays.toString(multiDimensionalArr));
// output: [[I@74a14482, [I@1540e19d]</code></pre><p>Con l'aiuto di <code>Arrays.deepToString()</code>, possiamo stampare array multidimensionali.</p><h1 id="3-il-metodo-arrays-deeptostring-"><strong>3. Il metodo Arrays.deepToString()</strong></h1><p><code>Arrays.deepToString()</code> restituisce una rappresentazione dei "contenuti profondi" dell'array specificato in formato di stringa.</p><p>Se l'elemento è un array di tipo primitivo, viene convertito in una stringa chiamando il sovraccarico appropriato di <code>Arrays.toString()</code> .</p><p>Ecco un esempio di un array multidimensionale di tipo primitivo:</p><pre><code class="language-java">// creo un array multidimensionale
int[][] multiDimensionalArr = { {2,3}, {5,9} };

System.out.println(Arrays.deepToString(multiDimensionalArr));
// output: [[2, 3], [5, 9]]</code></pre><p>Se l'elemento è un array di riferimenti, viene convertito in una stringa chiamando ricorsivamente <code>Arrays.deepToString()</code>.</p><pre><code class="language-java">Insegnante[][] insegnanti = 
{{ new Insegnante("John"), new Insegnante("David") }, {new Insegnante("Mary")} };

System.out.println(Arrays.deepToString(insegnanti));
// output: 
[[Insegnante{nome='John'}, Insegnante{nome='David'}],[Insegnante{nome='Mary'}]]</code></pre><p>Dobbiamo sovrascrivere <code>Object.toString()</code> nella nostra classe Insegnante.</p><p>Se ti incuriosisce il modo in cui viene eseguita la ricorsione, ecco il <a href="http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/be44bff34df4/src/share/classes/java/util/Arrays.java#l4611">codice sorgente</a> del metodo <code>Arrays.deepToString()</code>.</p><p><strong><strong><strong><strong>NOT</strong></strong></strong>A<strong><strong><strong>:</strong></strong></strong></strong> anche gli array unidimensionali di riferimenti possono essere stampati usando questo metodo. Per esempio:</p><pre><code class="language-java">Integer[] oneDimensionalArr = {1,4,7};

System.out.println(Arrays.deepToString(oneDimensionalArr));
// output: [1, 4, 7]</code></pre><h1 id="4-il-metodo-arrays-aslist-"><strong>4. Il metodo Arrays.asList()</strong></h1><p>Questo metodo restituisce una lista di dimensioni fisse costruita sull'array specificato.</p><pre><code class="language-java">Integer[] intArray = {2,5,46,12,34};

System.out.println(Arrays.asList(intArray));
// output: [2, 5, 46, 12, 34]</code></pre><p>Abbiamo cambiato il tipo da int a Integer, perché List è un insieme che contiene una lista di oggetti. Quando convertiamo un array in una lista dovrebbe essere un array di riferimenti.</p><p>Java chiama <code>Arrays.<em><em><em><em>asList</em></em></em></em>(intArray).toString()</code> . Questa tecnica usa internamente il metodo <code>toString()</code> del tipo degli elementi all'interno della lista.</p><p>Un altro esempio con la nostra classe personalizzata Insegnante:</p><pre><code class="language-java">Insegnante[] insegnante = { new Insegnante("John"), new Insegnante("Mary") };

System.out.println(Arrays.asList(insegnante));
// output: [Insegnante{nome='John'}, Insegnante{nome='Mary'}]</code></pre><p><strong><strong>NOT</strong>A<strong>:</strong></strong> non possiamo stampare array multidimensionali usando questo metodo. Per esempio:</p><pre><code class="language-java">Insegnante[][] insegnanti = 
{{ new Insegnante("John"), new Insegnante("David") }, { new Insegnante("Mary") }};
        
System.out.println(Arrays.asList(insegnanti));

// output: [[Lcom.thano.article.printarray.Insegnante;@1540e19d, [Lcom.thano.article.printarray.Insegnante;@677327b6]</code></pre><h1 id="5-l-interfaccia-java-iterator"><strong>5. L'interfaccia Java Iterator</strong></h1><p>In modo simile a un loop for-each, possiamo usare l'interfaccia Iterator per iterare attraverso gli elementi dell'array e stamparli.</p><p>L'oggetto Iterator può essere creato chiamando il metodo <code>iterator()</code> su una Collection. Quell'oggetto verrà usato per iterare attraverso gli elementi della Collection.</p><p>Ecco un esempio di come possiamo stampare un array usando l'interfaccia Iterator:</p><pre><code class="language-java">Integer[] intArray = {2,5,46,12,34};

// creo una List di Integer
List&lt;Integer&gt; list = Arrays.asList(intArray);

// creo un iteratore della Integer List
Iterator&lt;Integer&gt; it = list.iterator();

// se la List ha elementi da iterare
while(it.hasNext()) {
    System.out.print(it.next());
    // output: 25461234
}</code></pre><h1 id="6-java-stream-api"><strong>6. Java Stream API</strong></h1><p>La Stream API è usata per lavorare con insiemi di oggetti. Uno stream è una sequenza di oggetti. Gli stream non cambiano la struttura dei dati originaria, forniscono soltanto il risultato delle operazioni richieste.</p><p>Con l'aiuto dell'operazione terminale <code>forEach()</code> possiamo iterare attraverso ogni elemento dello stream.</p><p>Per esempio:</p><pre><code class="language-java">Integer[] intArray = {2,5,46,12,34};

Arrays.stream(intArray).forEach(System.out::print);
// output: 25461234</code></pre><p>Adesso sappiamo come stampare un array in Java.</p><p>Grazie per aver letto.</p><p>Immagine di copertina di <a href="https://unsplash.com/@acharki95?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Aziz Acharki</a> su <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p><p>Puoi leggere gli altri miei articoli su <a href="https://medium.com/@mvthanoshan9/object-oriented-programming-principles-in-java-820919dced1a">Medium</a>.</p><p><strong>Buona Programmazione<strong><strong><strong>!</strong></strong></strong></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Usare PostgreSQL in Python ]]>
                </title>
                <description>
                    <![CDATA[ Ci sono molti e diversi tipi di database in uso oggi. Abbiamo database centralizzati, database commerciali, database cloud, database distribuiti, database end-user, database NoSQL, database relazionali, e molti altri. Questo articolo si concentrerà su un esempio di database relazionale (PostgreSQL) e su come richiedere dati da esso. Altri esempi di ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-usare-postgresql-in-python/</link>
                <guid isPermaLink="false">64e08690bd4e25040221cd01</guid>
                
                    <category>
                        <![CDATA[ Postgres ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Wed, 13 Sep 2023 14:36:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/08/postgresql-in-python.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/postgresql-in-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Use PostgreSQL in Python</a>
      </p><p>Ci sono molti e diversi tipi di database in uso oggi. Abbiamo database centralizzati, database commerciali, database cloud, database distribuiti, database end-user, database NoSQL, database relazionali, e molti altri.<br><br>Questo articolo si concentrerà su un esempio di database relazionale (PostgreSQL) e su come richiedere dati da esso. Altri esempi di database relazionali includono MySQL, MariaDB e SQLite.</p><p>In questo tutorial, imparerai come installare, connettere e infine eseguire query su un database PostgreSQL con Python.</p><p>Per iniziare, partiamo con calma imparando qualcosina in più su PostgreSQL.</p><h2 id="che-cos-postgresql"><strong>Che Cos'è PostgreSQL?</strong></h2><p>PostgreSQL è uno dei più conosciuti database relazionali open-source. È usato da sviluppatori e aziende di qualsiasi dimensione in tutto il mondo.</p><p>Per quanto riguarda la sua popolarità globale, PostgreSQL è stato <a href="https://db-engines.com/en/ranking">classificato quarto</a> da DB-Engines, e la sua popolarità è in crescita. Ciò non deve sorprendere, considerando quante applicazioni web e mobile, così come strumenti analitici, usano i database PostgreSQL.</p><p>PostgreSQL possiede anche un robusto ecosistema con una grandissima varietà di add-on ed estensioni che funzionano bene con il database principale. Per queste ragioni, PostgreSQL è un'opzione fantastica sia che tu voglia creare una tua soluzione di database personalizzata, sia che tu abbia bisogno di un database commerciale o analitico.</p><p>Adesso che sai che c0s'è PostgreSQL, parliamo di come connettersi al database usando Python.</p><h2 id="per-iniziare"><strong>Per Iniziare</strong></h2><p>Dobbiamo usare una libreria connettore per database per connetterci all'istanza di un database PostgreSQL dal nostro script di Python. Possiamo scegliere da una gamma di alternative in Python, ma <a href="https://www.psycopg.org/docs/">Psycopg2</a> è la più conosciuta e più usata.</p><p>Ci sono librerie alternative scritte interamente in Python, come <a href="https://github.com/tlocke/pg8000">pg8000</a> e <a href="https://github.com/python-postgres/fe">py-postgresql</a>, ma qui useremo Psycopg2.</p><h3 id="che-cos-psycopg2"><strong>Che cos'è Psycopg2?</strong></h3><p>La libreria Psycopg2 usa il linguaggio di programmazione C come wrapper della libreria di PostgreSQL <a href="https://www.postgresql.org/docs/current/libpq.html">libpq</a> per supportare gli standard di Python DB API 2.0. L'implementazione in C di Psycopg2 la rende incredibilmente veloce ed efficiente.</p><p>Usando una query SQL, possiamo utilizzare Psycopg2 per ottenere una o più righe dal database. Con questa libreria, possiamo anche inserire dati all'interno del database usando una varietà di metodi di inserimento, singoli o di gruppo.</p><p>La libreria è come SQL (Structured Query Language) e compie tutti i lavori e le operazioni che un linguaggio di query può fare. Gestisce sia Unicode che Python3, e include la thread safety (la stessa connessione è condivisa da molteplici thread).</p><p>È fatta per eseguire programmi altamente multi-thread, che producono e cancellano frequentemente molti cursori e compiono molti INSERT and UPDATE simultaneamente. Le funzionalità di Psycopg2 includono cursori dal lato client e dal lato server, comunicazione asincrona, e notifiche.</p><h2 id="come-installare-psycopg2"><strong>Come Installare Psycopg2</strong></h2><p>Dobbiamo prima installare Pyscopg2 per poterlo usare. Possiamo installarlo dal terminale o dal prompt dei comandi usando <code>pip</code>.</p><pre><code class="language-python">#installazione

pip install psycopg2
pip3 install psycopg2</code></pre><p>Se decidi di installare anche la libreria connettore in un ambiente virtuale, puoi farlo usando questo codice:</p><pre><code class="language-python">virtualenv env &amp;&amp; source env/bin/activate
pip install psycopg2-binary</code></pre><p>La libreria Psycopg2 e tutte le sue dipendenze verranno installate nel nostro ambiente virtuale di Python con queste righe di codice.</p><p>Abbiamo installato il nostro connettore, quindi iniziamo a scrivere alcune query.</p><h2 id="come-interrogare-postgresql-usando-python"><strong>Come Interrogare PostgreSQL usando Python</strong></h2><p>Prima di tutto, dovrai creare un nuovo file e chiamarlo come preferisci. Poi aprilo nel tuo IDE e inizia a scrivere il codice.</p><p>La prima cosa da fare è importare la libreria (questo è molto importante). Useremo due oggetti di Pyscogp2:</p><ul><li><strong>Oggetto connessione</strong>: la connessione a un'istanza di un database PostgreSQL è gestita da un oggetto connessione. Incapsula la sessione di un database, creata usando la funzione <code>connect()</code>.</li><li><strong>Oggetto cursore</strong>: l'oggetto cursore rende possibile l'esecuzione dei comandi PostgreSQL per gli script di Python durante la sessione di un database. La connessione genera dei cursori, dopodiché il metodo <code>cursor()</code> li lega permanentemente alla connessione. Tutti i comandi sono effettuati all'interno della struttura della sessione del database racchiusa nella connessione.</li></ul><pre><code class="language-python">import psycopg2

conn = psycopg2.connect(database="db_name",
                        host="db_host",
                        user="db_user",
                        password="db_pass",
                        port="db_port")</code></pre><p>Dobbiamo specificare questi argomenti per poterci connettere al database. Diamo una veloce occhiata a questi argomenti.</p><ul><li><strong><strong>database</strong></strong>: il nome del database a cui vogliamo avere accesso o connetterci. Nota che possiamo connetterci a un solo database con un oggetto connessione.</li><li><strong><strong>host</strong></strong>: molto probabilmente questo fa riferimento all'indirizzo IP o all'URL del server del database.</li><li><strong><strong>user</strong></strong>: come suggerisce il nome, si riferisce al nome dell'utente PostgreSQL.</li><li><strong><strong>password</strong></strong>: questa è la password associata all'utente PostgreSQL.</li><li><strong><strong>port</strong></strong>: il numero della porta del server PostgreSQL sul localhost - di solito è 5432.</li></ul><p>Se le credenziali del nostro database sono state inserite correttamente, riceveremo un oggetto connessione al database in tempo reale che possiamo usare per costruire un oggetto cursore. Possiamo proseguire ed eseguire qualsiasi query sul database e recuperare dati con l'aiuto del nostro oggetto cursore.</p><figure class="kg-card kg-code-card"><pre><code class="language-python">cursor = conn.cursor()</code></pre><figcaption>oggetto cursore</figcaption></figure><p>Scriviamo una semplice query:</p><pre><code class="language-python">cursor.execute("SELECT * FROM DB_table WHERE id = 1")</code></pre><p>Usiamo la funzione <code>execute()</code> e forniamo come parametro una stringa di query. Poi il database sarà interrogato usando la query che abbiamo inserito.</p><p>Una volta che avremo compiuto questa azione con successo, per poter recuperare dati dal database usando Pyscopg2, dobbiamo usare una di queste funzioni: <code>fetchone()</code>, <code>fetchall()</code> o <code>fetchmany()</code>.</p><h3 id="come-usare-fetchone-"><strong>Come usare <code>fetchone()</code>:</strong></h3><p>Dopo aver eseguito la query SQL, questa funzione restituirà soltanto la prima riga. È il metodo più semplice per prendere dati da un database.</p><figure class="kg-card kg-code-card"><pre><code class="language-python">#code
print(cursor.fetchone())

#output
(1, 'A-CLASS', '2018', 'Subcompact executive hatchback')</code></pre><figcaption>esempio di fetchone()</figcaption></figure><p>La funzione <code>fetchone()</code> restituisce una singola riga in forma di tupla, con le informazioni organizzate nell'ordine specificato dalle colonne fornite nella query.</p><p>Quando strutturiamo la stringa di query, è cruciale fornire l'ordine delle colonne in modo preciso per poter distinguere quali dati nella tupla corrispondono a quali colonne.</p><h3 id="come-usare-fetchall-"><strong>Come usare <code>fetchall()</code>:</strong></h3><p>La funzione <code>fetchall()</code> funziona allo stesso modo di <code>fetchone()</code> ad eccezione del fatto che non restituisce una riga sola ma tutte le righe. Quindi, in caso volessimo 20-200 righe o più, possiamo fare uso di <code>fetchall()</code>.</p><figure class="kg-card kg-code-card"><pre><code class="language-python">#code
print(cursor.fetchall())

#output
[(1, 'A-CLASS', '2018', 'Subcompact executive hatchback'),
 (2, 'C-CLASS', '2021', 'D-segment/compact executive sedan'),
 (3, 'CLA', '2019', 'Subcompact executive fastback sedan'),
 (4, 'CLS', '2018', 'E-segment/executive fastback sedan'),
 (5, 'E-CLASS', '2017', 'E-segment/executive sedan'),
 (6, 'EQE', '2022', 'All-electric E-segment fastback'),
 (7, 'EQS', '2021', 'All-electric full-size luxury liftback'),
 (8, 'S-CLASS', '2020', 'F-segment/full-size luxury sedan.'),
 (9, 'G-CLASS', '2018', 'Mid-size luxury SUV, known as the G-Wagen'),
 (10, 'GLE', '2019', 'Mid-size luxury crossover SUV')]
[...]</code></pre><figcaption>esempio di fetchall()</figcaption></figure><h3 id="come-usare-fetchmany-"><strong>Come usare <code>fetchmany()</code>:</strong></h3><p>La funzione <code>fetchmany()</code> ci permette di ottenere un certo numero di voci dal database e ci dà maggiore controllo sul numero preciso di righe che otteniamo.</p><figure class="kg-card kg-code-card"><pre><code class="language-python">#code
print(cursor.fetchmany(size=3))

#output
[(1, 'A-CLASS', '2018', 'Subcompact executive hatchback'),
 (2, 'C-CLASS', '2021', 'D-segment/compact executive sedan'),
 (3, 'CLA', '2019', 'Subcompact executive fastback sedan')]
</code></pre><figcaption>esempio di fetchmany()</figcaption></figure><p>Poiché abbiamo impostato 3 come argomento, riceviamo solamente tre righe.</p><p>Quando abbiamo finito di interrogare il nostro database dobbiamo chiudere la connessione con <code>conn.close()</code>.</p><h2 id="conclusione"><strong>Conclusione</strong></h2><p>È stato piuttosto semplice, vero? Siamo stati in grado di eseguire tutte queste operazioni da un singolo script Python e ha funzionato molto bene.</p><p>Spero che questo articolo ti sia stato utile, adesso puoi lavorare con PostgreSQL usando Python,</p><p>Per maggiori informazioni, dai un'occhiata alla <a href="https://www.psycopg.org/docs/">documentazione </a>di Psycopg2.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Eseguire il Codice Java dal Terminale ]]>
                </title>
                <description>
                    <![CDATA[ Se lavori con Java, probabilmente hai usato uno dei più famosi editor di testo come Sublime Text, VS Code, Brackets, Atom, e Notepad++, o anche IDE come Apache NetBeans e IntelliJ IDEA. Eseguire il codice nel tuo IDE è immediato, ma spesso non riesci a vedere in che modo viene ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-eseguire-il-codice-java-dal-terminale/</link>
                <guid isPermaLink="false">64f3313421109103fd7ba95c</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Tue, 12 Sep 2023 09:34:56 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/09/Run-Java-Using-The-Terminal---freeCodeCamp-Cover-image.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-execute-and-run-java-code/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Execute and Run Java Code from the Terminal</a>
      </p><p>Se lavori con Java, probabilmente hai usato uno dei più famosi editor di testo come Sublime Text, VS Code, Brackets, Atom, e Notepad++, o anche IDE come Apache NetBeans e IntelliJ IDEA.</p><p>Eseguire il codice nel tuo IDE è immediato, ma spesso non riesci a vedere in che modo viene eseguito il codice (anche se ovviamente puoi controllare il comando nel terminale).</p><p>Tuttavia, è buona prassi sapere come viene eseguito effettivamente il codice e come viene prodotto l'output che ti restituisce.</p><p>Molti di voi potrebbero aver sentito che gli sviluppatori professionisti esperti usano anche il terminale per eseguire i programmi. Questo dà loro una visione più chiara e li aiuta a capire in che modo sta funzionando il codice, dove sta restituendo il valore desiderato, dove potrebbe trovarsi un bug, e così via.</p><p>Qualsiasi sia l'obiettivo, eseguire il codice Java direttamente dal terminale è un lavoro molto semplice.</p><p>In questo articolo ti mostrerò come puoi eseguire il codice Java direttamente dalla tua finestra del terminale preferita. Non temere! La procedura è abbastanza semplice, e dopo aver letto l'intero articolo dovresti essere in grado di eseguire il tuo codice Java dal terminale.</p><h2 id="come-eseguire-il-codice-java-nel-terminale"><strong>Come Eseguire il Codice Java nel Terminale</strong></h2><p>Il processo che sto per mostrarti in questo articolo si applica a qualsiasi sistema operativo, che sia Windows, MacOS o Linux.</p><p>Userò il seguente codice Java nel prossimo passaggio.</p><pre><code class="language-java">public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!"); 
    }
}</code></pre><h2 id="-step-1-vai-nella-cartella-dove-si-trova-il-codice-sorgente"><strong>📦 Step 1 – Vai nella cartella dove si trova il codice sorgente</strong></h2><p>Se hai già scritto il tuo codice Java in un editor, allora vai semplicemente in quella cartella. Puoi andare direttamente nella cartella usando il gestore dei file se vuoi.</p><h3 id="come-andare-nella-cartella-dove-si-trova-il-codice-sorgente-per-windows-"><strong>Come andare nella cartella dove si trova il codice sorgente: per Windows 🪟</strong></h3><p>Supponiamo di avere il codice sorgente (<code>Main.java</code>) dentro la cartella <code>This PC</code> &gt; <code>Documents</code>. Posso andare lì semplicemente usando Esplora File.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Untitled.png" class="kg-image" alt="Untitled" width="600" height="400" loading="lazy"></figure><p>Oppure, volendo, posso anche andarci usando il mio terminale. Devo usare <code>cd</code> (da "change directory" in inglese) per indicare che voglio <strong>cambiare cartella</strong> .</p><p>In questo caso, posso usare <code>cd "C:\Users\Md. Fahim Bin Amin\Documents"</code>. Poiché il mio nome utente contiene degli spazi, ho usato <code>"</code> <code>"</code> per racchiuderli.</p><p>Poi se controllo tutti i file all'interno di quella cartella, vedrò anche il file <code>Main.java</code>.</p><p>Ho messo il file <code>Main.java</code> nel mio drive <strong><strong>D</strong></strong> questa volta. Quindi sono andato in quella cartella usando il comando <code>cd</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-08-022040.png" class="kg-image" alt="Screenshot-2022-03-08-022040" width="600" height="400" loading="lazy"></figure><p>Vedo il mio file Java anche nel terminale.</p><h3 id="come-andare-nella-cartella-dove-si-trova-il-codice-sorgente-per-linux-"><strong>Come andare nella cartella dove si trova il codice sorgente: per Linux 🐧</strong></h3><p>Puoi andare nella cartella dove si trova il tuo codice sorgente sia attraverso la GUI o dal terminale usando il comando <code>cd</code> anche qui.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-124200.png" class="kg-image" alt="Screenshot-2022-03-10-124200" width="600" height="400" loading="lazy"><figcaption>Usando la GUI</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/09/image.png" class="kg-image" alt="image" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/09/image.png 600w, https://www.freecodecamp.org/italian/news/content/images/2023/09/image.png 723w" width="723" height="456" loading="lazy"><figcaption>Usando il comando <code>cd</code></figcaption></figure><h2 id="-come-compilare-il-codice-java"><strong>🧑‍💻Come Compilare il Codice Java</strong></h2><p>Prima di eseguire il nostro codice Java, dobbiamo compilarlo. Per compilare un codice/programma in Java, otteniamo il file class che in seguito dovremo eseguire.</p><h3 id="come-compilare-il-codice-java-usando-il-terminale"><strong>Come compilare il codice Java usando il terminale</strong></h3><p>Dobbiamo usare il comando <code>javac nome_file_con_estensione</code>. Per esempio, dato che voglio compilare il mio <code>Main.java</code>, userò il comando <code>javac Main.java</code>. La <code>c</code> in <code>javac</code> sta per compila.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-122312.png" class="kg-image" alt="Screenshot-2022-03-10-122312" width="600" height="400" loading="lazy"></figure><p>Se il processo di compilazione avviene con successo, non otterremo nessun errore.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-122345.png" class="kg-image" alt="Screenshot-2022-03-10-122345" width="600" height="400" loading="lazy"></figure><p>Questo creerà il file class di cui abbiamo bisogno nella stessa cartella.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-122628.png" class="kg-image" alt="Screenshot-2022-03-10-122628" width="600" height="400" loading="lazy"></figure><p>Tieni a mente che eseguiamo il file <strong>class</strong>, non il file <code>.java</code>.</p><p>Lo stesso processo è applicabile per tutti i sistemi operativi disponibili.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-124951.png" class="kg-image" alt="Screenshot-2022-03-10-124951" width="600" height="400" loading="lazy"><figcaption>in Linux OS</figcaption></figure><h2 id="-come-eseguire-il-codice-java"><strong>🖥️ Come Eseguire il Codice Java</strong></h2><p>Eseguiamo il file <code>.class</code> per lanciare i programmi Java. Per questo, usiamo il comando <code>java nome_file_class_senza_estensione</code>. Per esempio, poiché il nostro file <code>.class</code> per questo programma è <code>Main.class</code>, il nostro comando sarà <code>java Main</code>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-125223.png" class="kg-image" alt="Screenshot-2022-03-10-125223" width="600" height="400" loading="lazy"></figure><p>Il programma Java è stato eseguito con successo!</p><p>La stessa identica procedura è applicabile anche ad altri sistemi operativi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-125317.png" class="kg-image" alt="Screenshot-2022-03-10-125317" width="600" height="400" loading="lazy"><figcaption>in Linux OS</figcaption></figure><h2 id="-bonus-come-eseguire-un-programma-java-con-i-package"><strong>🏅Bonus: Come Eseguire un Programma Java con i Package</strong></h2><p>Un package sta praticamente ad indicare una cartella. Prima ti ho mostrato come usare un qualsiasi normale codice Java ricorrendo al terminale. Lì non ho usato alcun package all'interno del codice Java.</p><p>Adesso ti mostrerò come puoi eseguire qualsiasi codice Java che ha dei package dichiarati al suo interno. Questa volta, userò il seguente codice Java.</p><pre><code class="language-java">package myJavaProgram.Source;
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, World!"); 
    }
}</code></pre><p>Nella prima riga ho scritto il package come <code>package myJavaProgram.Source</code>. Questo indica che voglio creare una cartella chiamata <code>myJavaProgram</code>. Poi, voglio creare un'altra cartella al suo interno chiamata <code>Source</code>. Infine, voglio creare un file class del mio codice Java all'interno della cartella <code>Source</code>.</p><p>La struttura ad albero delle cartelle sarà la seguente: <strong><strong>myJavaProgram &gt; Source.</strong></strong></p><p>Per compilare questo tipo di codice Java con i package, usiamo il comando <code>javac -d . nome_file_con_estensione</code>.</p><p>Al momento sto usando il file <code>Main.java</code>, quindi userò il comando <code>javac -d . Main.java</code>. Questo creerà una cartella chiamata <strong><strong>myJavaProgram</strong></strong>, poi creerà un'altra cartella chiamata <strong><strong>Source </strong></strong>dentro la cartella <strong><strong>myJavaProgram </strong></strong>dentro la cartella dove si trova il mio file sorgente.</p><ul><li>La_Cartella_Dove_Ho_Il_Mio_Codice_Sorgente</li><li>cartella <code>myJavaProgram</code></li><li>cartella <code>Source</code> </li></ul><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-134626.png" class="kg-image" alt="Screenshot-2022-03-10-134626" width="600" height="400" loading="lazy"></figure><p>Crea istantaneamente la cartella <strong><strong>myJavaProgram</strong></strong>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-134710.png" class="kg-image" alt="Screenshot-2022-03-10-134710" width="600" height="400" loading="lazy"></figure><p>All'interno della cartella, crea la cartella <strong><strong>Source</strong></strong>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-134806.png" class="kg-image" alt="Screenshot-2022-03-10-134806" width="600" height="400" loading="lazy"></figure><p>Dentro la cartella Source, crea il nostro file <code>.class</code>. Abbiamo bisogno di questo file per eseguire il programma Java.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-134853.png" class="kg-image" alt="Screenshot-2022-03-10-134853" width="600" height="400" loading="lazy"></figure><p>Adesso, se vogliamo eseguire il file <code>.class</code>, abbiamo bisogno di cambiare un po' il comando, poiché dobbiamo fornire la cartella del file <code>.class</code> nella finestra del terminale.</p><p>Usiamo il comando per eseguire il programma Java con i package, <code>java cartella_del_file_class.il_nome_del_file_class_senza_estensione</code>.</p><p>Poiché sto usando <code>Main.java</code> e ho bisogno di eseguire il file <code>Main.class</code>, il mio comando sarà <code>java myJavaProgram.Source.Main</code>. Eseguirà il codice Java come qui di seguito.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-135226.png" class="kg-image" alt="Screenshot-2022-03-10-135226" width="600" height="400" loading="lazy"></figure><p>Se ti stai chiedendo perché stiamo cambiando il comando adesso, è perché prima non abbiamo dichiarato nessun package. Quindi il compilatore Java ha creato il file <code>.class</code> all'interno della cartella dove si trovava il nostro codice sorgente. Quindi, potremmo prendere il file <code>.class</code> direttamente da lì e potremmo anche eseguire il file class.</p><p>Ma se dichiariamo i package all'interno del codice sorgente in questo modo, allora stiamo dicendo al compilatore di creare il file <code>.class</code> in un altro posto (non all'interno della cartella dove si trova il nostro codice sorgente). Ciò significa che non prendiamo il file class direttamente da lì.</p><p>Poiché vogliamo eseguire il file class, abbiamo bisogno di dire al compilatore esplicitamente dove si trova il file class al momento, così che possa prendere il file class ed eseguirlo.</p><p>Se pensi di poter fare confusione durante questo passaggio, allora puoi copiare la cartella direttamente dal tuo codice Java.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-135404.png" class="kg-image" alt="Screenshot-2022-03-10-135404" width="600" height="400" loading="lazy"></figure><p>Nella riga 1, abbiamo dichiarato la cartella del package (dove vogliamo che sia generato il file class). Dunque, se copiamo semplicemente la cartella e aggiungiamo il nome del file <code>.class</code> senza l'estensione (<code>.class</code>), preceduto da un punto (<code>.</code>), allora soddisfiamo la condizione per eseguire qualsiasi codice Java che ha dei package dichiarati nel codice sorgente.</p><p>Lo stesso processo è applicabile agli altri sistema operativi. Ecco qui degli screenshot da un sistema Linux:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/Screenshot-2022-03-10-140017.png" class="kg-image" alt="Screenshot-2022-03-10-140017" width="600" height="400" loading="lazy"><figcaption>Eseguire codici Java con dei package all'interno su Linux</figcaption></figure><p>Ottimo lavoro! 👏 Adesso puoi eseguire qualsiasi codice/programma Java direttamente usando un terminale. 🥳</p><p>Ho creato anche un video dove ho mostrato tutti i procedimenti menzionati in alto. Puoi darci un'occhiata <a href="https://www.youtube.com/watch?v=e_lmKSCH9YE">qui</a>. 😁</p><h2 id="-conclusione"><strong>💁‍♂️ Conclusione</strong></h2><p>Spero che questo articolo ti aiuti ad eseguire i tuoi programmi Java usando solo il terminale.</p><p>➡️ Se vuoi sapere come installare un compilatore Java per il tuo sistema operativo Windows, <a href="https://www.freecodecamp.org/news/how-to-install-java-on-windows/">allora puoi dare un'occhiata a questo articolo</a>.</p><p>➡️ Se vuoi sapere come installare dei compilatori per C e C++ sul tuo sistema operativo Windows, <a href="https://www.freecodecamp.org/news/how-to-install-c-and-cpp-compiler-on-windows/">allora puoi dare un'occhiata a questo articolo</a>.</p><p>➡️ Se vuoi sapere come installare Python sul tuo sistema operativo Windows, <a href="https://www.freecodecamp.org/news/how-to-install-python-in-windows-operating-system/">allora puoi dare un'occhiata a questo articolo</a>.</p><p>Grazie per aver letto l'intero articolo. Se ti può essere di aiuto puoi anche dare un'occhiata ai miei altri articoli su <a href="https://www.freecodecamp.org/news/author/fahimbinamin/">freeCodeCamp</a>.</p><p>Se vuoi metterti in contatto con me, puoi farlo usando <a href="https://twitter.com/Fahim_FBA">Twitter</a>, <a href="https://www.linkedin.com/in/fahimfba/">LinkedIn</a>, e <a href="https://github.com/FahimFBA">GitHub</a>.</p><p>Puoi anche <a href="https://www.youtube.com/@FahimAmin?sub_confirmation=1">ISCRIVERTI al mio canale di YouTube</a> (Code With FahimFBA) se vuoi imparare diversi tipi di linguaggi di programmazione con molti esempi pratici pubblicati regolarmente.</p><p>Se vuoi dare un'occhiata ai miei highlights, puoi farlo sulla mia <a href="https://www.polywork.com/fahimbinamin">timeline Polywork</a>.</p><p>Puoi anche <a href="https://fahimbinamin.com/">visitare il mio sito</a> per saperne di più di me e delle cose su cui sto lavorando.</p><p>Grazie mille!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ I Set di Python – Come Creare Set in Python ]]>
                </title>
                <description>
                    <![CDATA[ Puoi usare i set in Python per immagazzinare una collezione di dati in una singola variabile. Tutte le strutture di dati integrate in Python, come le liste, i dizionari e le tuple, hanno delle caratteristiche distinte. Ecco alcune caratteristiche dei set in Python:  * Non sono ammessi elementi duplicati. ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/i-set-di-python-come-creare-set-in-python/</link>
                <guid isPermaLink="false">64c50e0d7194960696cf2e77</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Wed, 30 Aug 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/08/kelly-sikkema--1_RZL8BGBM-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/python-set-how-to-create-sets-in-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Set – How to Create Sets in Python</a>
      </p><p>Puoi usare i set in Python per immagazzinare una collezione di dati in una singola variabile.</p><p>Tutte le strutture di dati integrate in Python, come le liste, i dizionari e le tuple, hanno delle caratteristiche distinte.</p><p>Ecco alcune caratteristiche dei set in Python:</p><ul><li>Non sono ammessi elementi duplicati. Se un elemento compare più volte, solo uno verrà riconosciuto nel set.</li><li>Gli elementi di un set sono in ordine casuale. L'ordine del set cambia ogni volta che viene usato.</li><li>Il valore degli elementi di un set non può essere modificato/cambiato una volta che il set è stato creato.</li></ul><p>In questo articolo, imparerai come creare i set. Imparerai anche come accedere, aggiungere e rimuovere elementi da un set in Python.</p><p>Concluderemo parlando di alcuni casi d'uso dei set nella programmazione e nella matematica con Python.</p><h2 id="come-creare-set-in-python"><strong>Come Creare<strong> Set in Python</strong></strong></h2><p>Usiamo le parentesi graffe per immagazzinare degli elementi in un set. Ecco come appare un set:</p><pre><code class="language-python">nomeSet = {"John", "Jane", "Doe"}

print(nomeSet)
# {'Jane', 'Doe', 'John'}</code></pre><p>Nel codice in alto, abbiamo creato un set chiamato <code>nomeSet</code>.</p><p>Noterai che quando il set viene stampato, i valori appaiono in un ordine diverso. Questa è una delle caratteristiche dei set di Python che ho menzionato prima.</p><p>Ecco un altro esempio con un elemento duplicato:</p><pre><code class="language-phython">nomeSet = {"John", "Jane", "Doe", "Jane"}

print(nomeSet)
# {'Jane', 'Doe', 'John'}</code></pre><p>Il duplicato di "Jane" è stato ignorato nell'esempio qui sopra. Questo perché gli elementi duplicati non sono ammessi.</p><h2 id="come-accedere-agli-elementi-di-un-set-in-python"><strong>Come Accedere agli Elementi di un Set in Python</strong></h2><p>Puoi usare un loop per accedere agli elementi di un set e stamparli. Non puoi usare l'indice degli elementi per avere accesso ad essi, poiché l'ordine cambia costantemente– nessun elemento mantiene il suo indice.</p><p>Ecco un esempio:</p><pre><code class="language-python">nomeSet = {"John", "Jane", "Doe"}

for nomi in nomeSet:
    print(nomi)
    # John
    # Doe
    # Jane</code></pre><p>Usiamo un loop <code>for</code> per stampare gli elementi in <code>nomeSet</code>.</p><p>Nella prossima sezione, vedrai come aggiungere gli elementi a un set.</p><h2 id="come-aggiungere-elementi-a-un-set-in-python"><strong>Come Aggiungere Elementi a un Set in Python</strong></h2><p>Puoi aggiungere un elemento a un set in Python usando il metodo <code>add()</code> con il nuovo elemento da aggiungere passato come parametro.</p><p>Ecco un esempio:</p><pre><code class="language-python">nomeSet = {"John", "Jane", "Doe"}

nomeSet.add("Ihechikara")

print(nomeSet)
# {'John', 'Ihechikara', 'Doe', 'Jane'}</code></pre><p>Abbiamo aggiunto un nuovo elemento – "Ihechikara" – al set: <code>nomeSet.add("Ihechikara")</code>.</p><p>Puoi anche aggiungere un elemento da un altro set o da altre strutture di dati (liste, dizionari, e tuple) a un set usando il metodo <code>update()</code>.</p><p>Ecco un esempio:</p><pre><code class="language-python">nomeSet = {"John", "Jane", "Doe"}

nomeSet2 = {"Jade", "Jay"}

nomeSet.update(nomeSet2)

print(nomeSet)
# {'Doe', 'Jay', 'Jane', 'Jade', 'John'}</code></pre><p>Per aggiungere i nomi da <code>nomeSet2</code> a <code>nomeSet</code>, abbiamo passato <code>nomeSet2</code> come parametro al metodo <code>update()</code>: <code>nomeSet.update(nomeSet2)</code>.</p><h2 id="come-rimuovere-elementi-da-un-set-in-python"><strong>Come Rimuovere Elementi da un Set <strong>in Python</strong></strong></h2><p>Ci sono diversi metodi che puoi usare per rimuovere elementi da un set. Diamoci un'occhiata.</p><h3 id="come-rimuovere-elementi-da-un-set-in-python-usando-il-metodo-discard-"><strong>Come Rimuovere Elementi da un Set in Python Usando il Metodo<strong> <code>discard()</code></strong></strong></h3><p>Puoi usare il metodo <code>discard()</code> per rimuovere un elemento specifico. Ecco un esempio:</p><pre><code class="language-python">nomeSet = {"John", "Jane", "Doe"}

nomeSet.discard("John")

print(nomeSet)
# {'Doe', 'Jane'}</code></pre><p>Nell'esempio in alto, "John" è stato passato come parametro al metodo <code>discard()</code> ed è stato dunque rimosso dal set.</p><h3 id="come-rimuovere-elementi-da-un-set-in-python-usando-il-metodo-remove-"><strong>Come Rimuovere Elementi da un Set in Python Usando il Metodo<strong> <code>remove()</code></strong></strong></h3><p>Il metodo <code>remove()</code> funziona allo stesso modo del metodo <code>discard()</code>.</p><pre><code class="language-python">nomeSet = {"John", "Jane", "Doe"}

nomeSet.remove("Jane")

print(nomeSet)
# {'John', 'Doe'}</code></pre><h3 id="come-svuotare-un-set-in-python-usando-il-metodo-clear-"><strong>Come Svuotare un Set in Python Usando il Metodo<strong> <code>clear()</code> </strong></strong></h3><p>Per eliminare tutti gli elementi in un set, usiamo il metodo <code>clear()</code>.</p><p>Ecco un esempio:</p><pre><code class="language-python">nomeSet = {"John", "Jane", "Doe"}

nomeSet.clear()

print(nomeSet)
# set()</code></pre><h2 id="quando-usare-i-set-in-python"><strong>Quando Usare i Set <strong>in Python</strong></strong></h2><p>In questa sezione, parleremo di due importanti casi d'uso dei set in Python.</p><p>Possiamo usare i set per rimuovere elementi duplicati in altre strutture di dati.</p><p>Possiamo anche compiere delle fantastiche operazioni matematiche come ottenere l'unione, l'intersezione, la differenza e la differenza simmetrica di due o più set.</p><h3 id="come-usare-i-set-per-rimuovere-elementi-duplicati-in-altre-strutture-di-dati"><strong>Come Usare i Set per Rimuovere Elementi Duplicati in Altre Strutture di Dati</strong></h3><p>Possiamo usare i set per liberarci di elementi duplicati in altre strutture di dati come liste e tuple.</p><p>Ciò è utile quando hai a che fare con insiemi di dati molto grandi che richiedono solo le unità individuali degli elementi e non il numero di occorrenze degli elementi.</p><p>Ecco un esempio:</p><pre><code class="language-python">listaNumeri = [2, 2, 4, 8, 9, 10, 8, 2, 5, 7, 3, 4, 7, 9]

setNumeri = set(listaNumeri)

print(setNumeri)
# {2, 3, 4, 5, 7, 8, 9, 10}</code></pre><p>Nel codice qui sopra, abbiamo creato una lista di numeri chiamata <code>listaNumeri</code> che ha molteplici occorrenze di alcuni numeri: <code>[2, 2, 4, 8, 9, 10, 8, 2, 5, 7, 3, 4, 7, 9]</code>.</p><p>Usando il metodo <code>set()</code>, abbiamo convertito la lista <code>listaNumeri</code> in un set: <code>setNumeri = set(listaNumeri)</code>.</p><p>Quando il nuovo set è stato stampato, tutti i duplicati dei numeri sono stati rimossi - ci viene restituita solo un'occorrenza di ogni numero: <code>{2, 3, 4, 5, 7, 8, 9, 10}</code>.</p><h3 id="come-compiere-operazioni-matematiche-usando-i-set-in-python"><strong>Come Compiere Operazioni Matematiche Usando i Set in Python</strong></h3><p>I set in Python sono simili agli insiemi in matematica, e possiamo ottenere vari risultati a seconda della relazione che esiste tra gli insiemi.</p><p>In questa sezione, vedrai come ottenere l'unione, l'intersezione, la differenza e la differenza simmetrica tra set in Python.</p><p>Puoi compiere tutte le operazioni in questa sezione usando più di due set. Per mantenere la cosa il più semplice possibile, useremo solo due set per ogni esempio.</p><h4 id="come-ottenere-l-unione-di-set-in-python"><strong>Come Ottenere l'Unione di Set in Python</strong></h4><p>L'unione di due set è un set con tutti gli elementi individuali che esistono in entrambi i set. Nell'unione, i duplicati vengono ignorati.</p><p>Ecco un esempio:</p><pre><code class="language-python">primoSet = {2, 3, 4, 5}

secondoSet = {1, 3, 5, 7}

print(primoSet | secondoSet)
# {1, 2, 3, 4, 5, 7}</code></pre><p>Nell'esempio in alto, abbiamo due set – <code>primoSet = {2, 3, 4, 5}</code> e <code>secondoSet = {1, 3, 5, 7}</code>.</p><p>Usando l'operatore barra verticale (<code>|</code>), siamo in grado di ottenere l'unione dei due set: <code>primoSet | secondoSet</code>.</p><p>L'unione dei set è la seguente: {1, 2, 3, 4, 5, 7}. Come puoi vedere, i due set sono stati uniti per formare un solo set senza alcun duplicato.</p><h4 id="come-ottenere-l-intersezione-di-set-in-python"><strong>Come Ottenere l'Intersezione di Set in Python</strong></h4><p>L'intersezione di due set è un set di elementi che sono comuni a entrambi i set. Nel nostro caso, è il set di elementi che compare sia in <code>primoSet</code> che in <code>secondoSet</code>.</p><p>Ecco un esempio:</p><pre><code class="language-python">primoSet = {2, 3, 4, 5}

secondoSet = {1, 3, 5, 7}

print(primoSet &amp; secondoSet)
# {3, 5}</code></pre><p>In questo esempio, stiamo usando l'operatore <code>&amp;</code> per ottenere l'intersezione tra <code>primoSet</code> e <code>secondoSet</code>: <code>primoSet &amp; secondoSet</code>.</p><p>Ci viene restituito {3, 5} perché 3 e 5 compaiono in entrambi i set.</p><h4 id="come-ottenere-la-differenza-tra-set-in-python"><strong>Come Ottenere la Differenza tra Set in Python</strong></h4><p>La differenza tra due set è un set di tutti gli elementi che esistono in un set ma non nell'altro.</p><p>Ecco un esempio:</p><pre><code class="language-python">primoSet = {2, 3, 4, 5}

secondoSet = {1, 3, 5, 7}

print(primoSet - secondoSet)
# {2, 4}</code></pre><p>Nell'esempio in alto, stiamo ottenendo un set di elementi che esiste in <code>primoSet</code> ma non in <code>secondoSet</code>.</p><p>Abbiamo usato l'operatore <code>-</code> per ottenere questo risultato: <code>primoSet - secondoSet</code>.</p><p>Il risultato dell'operazione è 2 e 4.</p><h4 id="come-ottenere-la-differenza-simmetrica-tra-set-in-python"><strong>Come Ottenere la Differenza Simmetrica tra Set in Python</strong></h4><p>La differenza simmetrica di due set è un set di elementi che esistono in uno dei due set ma non in entrambi.</p><p>Nell'ultima sezione, abbiamo avuto come risultato elementi che esistono in un set ma non nell'altro. La differenza simmetrica ha come risultato gli elementi che esistono in ciascun set ma non in entrambi.</p><pre><code class="language-python">primoSet = {2, 3, 4, 5}

secondoSet = {1, 3, 5, 7}

print(primoSet ^ secondoSet)
# {1, 2, 4, 7}</code></pre><p>Abbiamo usato l'operatore <code>^</code> per ottenere la differenza simmetrica dei due set: <code>primoSet ^ secondoSet</code>.</p><p>Il risultato è stato 1, 2, 4, 7. &nbsp;Nessuno di questi elementi compare in entrambi i set.</p><h2 id="riepilogo"><strong>Riepilogo</strong></h2><p>In questo articolo, abbiamo parlato dei set e di come crearli in Python.</p><p>I set non ammettono elementi duplicati, hanno un ordine casuale e gli elementi in essi contenuti non possono essere modificati.</p><p>Abbiamo anche visto come accedere, aggiungere e rimuovere elementi dai set usando metodi diversi.</p><p>Infine, abbiamo parlato di quando usare i set in Python. Abbiamo visto alcune applicazioni dei set in Python e il loro utilizzo nelle operazioni matematiche.</p><p>Buona programmazione!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Gestione dei File in Python – Come Creare, Leggere e Scrivere un File ]]>
                </title>
                <description>
                    <![CDATA[ In questo tutorial, imparerai come aprire un file, scrivere nel file e chiuderlo. Imparerai anche come leggere un file usando Python. Alla fine di questo tutorial, dovresti sapere le basi di come usare i file in Python. Gestione dei File in Python La gestione dei file è un'importante attività di ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/gestione-dei-file-in-python-come-creare-leggere-e-scrivere-un-file/</link>
                <guid isPermaLink="false">64bd3ccb604ac30674399564</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Mon, 07 Aug 2023 09:37:57 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/07/Author-Share-ImageFREE--4-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/file-handling-in-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">File Handling in Python – How to Create, Read, and Write to a File</a>
      </p><p>In questo tutorial, imparerai come aprire un file, scrivere nel file e chiuderlo. Imparerai anche come leggere un file usando Python.</p><p>Alla fine di questo tutorial, dovresti sapere le basi di come usare i file in Python.</p><h2 id="gestione-dei-file-in-python"><strong>Gestione dei File<strong><strong> in Python</strong></strong></strong></h2><p>La gestione dei file è un'importante attività di ogni app web. Le tipologie di attività che puoi eseguire su di un file aperto sono controllate dalle modalità di accesso. Esse descrivono come un file verrà usato dopo essere stato aperto.</p><p>Queste modalità specificano, inoltre, dove deve trovarsi l'handle del file al suo interno. Simile a un puntatore, l'handle di un file indica dove vanno letti o inseriti i dati in un file.</p><p>In Python, ci sono sei metodi o modalità di accesso, che sono:</p><ol><li><strong><strong>Read Only (<code>r</code></strong> – sola lettura)<strong>: </strong></strong>questa modalità apre il file di testo per la sola lettura. L'handle si trova all'inizio del file. Si verifica l'errore di I/O se il file non esiste. Questa è anche la modalità predefinita per aprire i file.</li><li><strong><strong>Read and Write (<code>r+</code></strong> – lettura e scrittura)<strong>:</strong></strong> questo metodo apre il file sia per la lettura che per la scrittura. L'handle si trova all'inizio del file. Se il file non esiste, si verifica un errore di I/O.</li><li><strong><strong>Write Only (<code>w</code></strong> – sola scrittura)<strong>:</strong></strong> questa modalità apre il file per la sola scrittura. I dati in file già esistenti vengono modificati e sovrascritti. L'handle si trova all'inizio del file. Se il file non esiste già nella cartella, ne viene creato uno nuovo.</li><li><strong><strong>Write and Read (<code>w+</code></strong> – scrittura e lettura)</strong>: questa modalità apre il file sia per la lettura che per la scrittura. Il testo è sovrascritto e cancellato da un file esistente. L'handle si trova all'inizio del file.</li><li><strong><strong>Append Only (<code>a</code></strong> – sola aggiunta)</strong>: questa modalità permette di aprire il file per la scrittura. Se il file non esiste, ne viene creato uno nuovo. L'handle si trova alla fine del file. I nuovi dati scritti vengono aggiunti alla fine, dopo i dati già esistenti.</li><li><strong><strong>Append and Read (<code>a+</code></strong> – aggiunta e lettura)<strong>: </strong></strong>usando questo metodo, puoi leggere e scrivere nel file. Se il file non esiste, ne viene creato uno. L'handle si trova alla fine del file. Il nuovo testo scritto viene aggiunto alla fine, dopo i dati già esistenti.</li></ol><p>Di seguito c'è il codice necessario per creare, scrivere e leggere file di testo usando i metodi di gestione dei file o le modalità di accesso di Python.</p><h2 id="come-creare-file-in-python"><strong>Come Creare File in Python</strong></h2><p>In Python, puoi usare la funzione <code>open()</code> con una delle seguenti opzioni - "x" o "w" - per creare un nuovo file:</p><ul><li><strong><strong>"x" – Crea</strong>r<strong>e</strong></strong>: questo comando creerà un nuovo file se e solo se non c'è già un file esistente con lo stesso nome, altrimenti si verificherà un errore.</li></ul><p>Esempio della creazione di un file in Python usando il comando "x":</p><pre><code class="language-python"># creazione di un file di testo con la funzione di comando "x"

f = open("myfile.txt", "x")</code></pre><p>Adesso abbiamo creato un nuovo file vuoto! Ma se riprovi ad eseguire il codice qui sopra - per esempio, se provi a creare un nuovo file con lo stesso nome che hai usato qui sopra (se vuoi riusare il nome del file in alto), otterrai un errore che ti notifica che il file esiste già. Come nell'immagine in basso:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/08/image-1.png" class="kg-image" alt="image-1" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/08/image-1.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/08/image-1.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/08/image-1.png 1050w" sizes="(min-width: 720px) 720px" width="1050" height="366" loading="lazy"></figure><ul><li><strong><strong>"w" – </strong>Scrivere</strong>: questo comando creerà un nuovo file di testo a prescindere dal fatto che ci sia o meno già un file in memoria con il nuovo nome specificato. Non restituirà un errore se trova un file esistente con lo stesso nome - invece, sovrascriverà il file esistente.</li></ul><p>Esempio di come creare un file con il comando "w":</p><pre><code class="language-python"># creazione di un file di testo con la funzione di comando "w"

f = open("myfile.txt", "w")

#Questo comando "w" può anche essere usato per creare un nuovo file, ma a differenza del comando "x", il comando "w" sovrascriverà qualsiasi file esistente con lo stesso nome.</code></pre><p>Con il codice qui sopra, sia che il file esista o che il file non esista in memoria, puoi procedere e usare il codice. Tieni a mente che sovrascriverà il file se ne trova uno già esistente con lo stesso nome.</p><h2 id="come-scrivere-un-file-in-python"><strong>Come Scrivere un File in Python</strong></h2><p>Ci sono due metodi per scrivere un file in Python, che sono:</p><h3 id="il-metodo-write-"><strong>Il metodo <code>write()</code>:</strong></h3><p>Questa funzione inserisce la stringa all'interno del file di testo su una singola riga.</p><p>Prendendo come esempio il file che abbiamo creato prima, la riga di codice in basso inserirà la stringa nel nuovo file di testo creato, che è "myfile.txt".</p><pre><code class="language-python">
file.write("Ciao a tutti\n")</code></pre><h3 id="il-metodo-writelines-"><strong>Il metodo <code>writelines()</code>:</strong></h3><p>Questa funzione inserisce più stringhe allo stesso tempo. Viene creata una lista di stringhe, e ogni stringa viene aggiunta al file di testo.</p><p>Usando il file creato in precedenza, la riga di codice in basso inserirà la stringa nel file di testo creato, che è "myfile.txt".</p><pre><code class="language-python">f.writelines(["Hello World ", "Benvenuti su FCC\n"])</code></pre><p>Esempio:</p><pre><code class="language-python">#Questo programma mostra come scrivere dati in un file di testo.

file = open("myfile.txt","w")
L = ["Questa è Lagos \n","Questo è Python \n","Questo è Fcc \n"]

# ho assegnato ["Questa è Lagos \n","Questo è Python \n","Questo è Fcc \n"]
# alla variabile L, puoi usare qualsiasi lettera o parola a tua scelta.
# Le variabili sono contenitori in cui i valori possono essere immagazzinati.
# Il \n è inserito per indicare la fine di una riga

file.write("Ciao a tutti \n")
file.writelines(L)
file.close()

# Usa close() per cambiare la modalità di accesso del file</code></pre><h2 id="come-leggere-un-file-di-testo-in-python"><strong>Come Leggere un File di Testo in Python</strong></h2><p>Ci sono tre metodi per leggere dati da un file di testo in Python. Ecco quali:</p><h3 id="il-metodo-read-"><strong>Il metodo <code>read()</code>:</strong></h3><p>Questa funzione restituisce i byte letti come una stringa. Se non viene specificato nessun valore n, leggerà l'intero il file.</p><p>Esempio:</p><pre><code class="language-python">f = open("myfiles.txt", "r")
#('r’) apre il file di testo per la sola lettura
print(f.read())
#"f.read" stampa i dati nel file di testo sulla shell quando viene eseguito.</code></pre><h3 id="il-metodo-readline-"><strong>Il metodo <code>readline()</code>:</strong></h3><p>Questa funzione legge una riga da un file e la restituisce come stringa. Legge un massimo di n bytes a seconda del valore n specificato. Ma se anche n è più grande della lunghezza della riga, non leggerà più di una riga.</p><pre><code class="language-python">f = open("myfiles.txt", "r")
print(f.readline())
</code></pre><h3 id="il-metodo-readlines-"><strong>Il metodo <code>readlines()</code>:</strong></h3><p>Questa funzione legge tutte le righe e le restituisce come stringhe in una lista, una per ogni riga.</p><p>Puoi leggere le prime due righe di un file chiamando <code>readline()</code> due volte:</p><pre><code class="language-python">f = open("myfiles.txt", "r")
print(f.readline())
print(f.readline())
</code></pre><h2 id="come-chiudere-un-file-di-testo-in-python"><strong>Come Chiudere un File di Testo in Python</strong></h2><p>È buona prassi chiudere sempre il file quando hai finito di lavorarci.</p><h3 id="esempio-di-chiusura-di-un-file-di-testo-"><strong>Esempio di chiusura di un file di testo:</strong></h3><p>Questa funzione chiude il file di testo quando hai finito di modificarlo:</p><pre><code class="language-python">f = open("myfiles.txt", "r")
print(f.readline())
f.close()
</code></pre><p>La funzione <code>close()</code> alla fine del codice dice a Python che ok, ho finito con questa sezione di creazione o lettura - è la stessa cosa di dire Fine.</p><h3 id="esempio-"><strong>Esempio:</strong></h3><p>Il programma qui in basso mostra più esempi di modi di leggere e scrivere dati in un file di testo. Ogni riga di codice ha dei commenti per aiutare a capire che cosa sta succedendo:</p><pre><code class="language-python"># Programma che mostra vari modi di leggere e
# scrivere dati in un file di testo.

file = open("myfile.txt","w")
L = ["Questa è Lagos \n","Questo è Python \n","Questo è Fcc \n"]

#ho assegnato ["Questa è Lagos \n","Questo è Python \n","Questo è Fcc \n"]
#alla variabile L
  
# \n è inserito per indicare la fine di una riga

file.write("Ciao a tutti \n")
file.writelines(L)
file.close()
# usa close() per cambiare la modalità di accesso del file



file = open("myfile.txt","r+") 
print("L'output della funzione Read è ")
print(file.read())
print()
  
# seek(n) prende il file handle fino all'n-esimo
# byte dall'inizio.
file.seek(0) 
  
print( "L'output della funzione Readline è ")
print(file.readline()) 
print()
  
file.seek(0)
  
# Per mostrare la differenza tra read e readline

print("L'output della funzione read(12) è ") 
print(file.read(12))
print()

file.seek(0)
  
print("L'output della funzione readline(8) è ") 
print(file.readline(8))
  
file.seek(0)
# funzione readlines
print("L'output della funzione readlines è ") 
print(file.readlines()) 
print()
file.close()

</code></pre><p>Questo è l'output del codice in alto quando viene eseguito nella shell. Ho assegnato "Questa è Lagos", "Questo è Python" e "Questo è FCC" a "L" e poi ho chiesto di stamparlo usando la funzione "file.read()".</p><p>Il codice in alto mostra che la funzione "readline()" restituisce la lettera basandosi sul numero che le viene specificato, mentre la funzione "readlines()" restituisce ogni stringa assegnata a "L", incluso il \n. Dunque, la funzione "readlines()" stamperà tutti i dati all'interno del file.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/italian/news/content/images/2023/08/image1.png" class="kg-image" alt="image1" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2023/08/image1.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2023/08/image1.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2023/08/image1.png 1047w" sizes="(min-width: 720px) 720px" width="1047" height="652" loading="lazy"></figure><h2 id="conclusione"><strong>Conclusione</strong></h2><p>Spero che, dopo aver letto questo tutorial, tu abbia capito che cos'è la gestione di un file in Python. Abbiamo anche imparato le modalità/i metodi necessari per creare, scrivere, leggere e chiudere un file di testo usando alcuni esempi base da Python.</p><p>Grazie per aver letto!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ TypeError: 'int' object is not subscriptable [Errore di Python Risolto] ]]>
                </title>
                <description>
                    <![CDATA[ L'errore di Python "TypeError: 'int' object is not subscriptable" (TypeError: l'oggetto 'int' non è sottoscrivibile) si verifica quando provi a trattare un numero intero come un oggetto "sottoscrivibile". In Python, un oggetto "sottoscrivibile" è un oggetto su cui puoi usare l'operatore parentesi quadre [], o su cui puoi iterare. Perché ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/typeerror-int-object-is-not-subscriptable-errore-di-python-risolto/</link>
                <guid isPermaLink="false">64c505e67194960696cf2d2f</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Tue, 01 Aug 2023 07:36:09 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/07/in_not_subable.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/python-typeerror-int-object-not-subscriptable-solved/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">TypeError: 'int' object is not subscriptable [Solved Python Error]</a>
      </p><p>L'errore di Python "TypeError: 'int' object is not subscriptable" (TypeError: l'oggetto 'int' non è sottoscrivibile) si verifica quando provi a trattare un numero intero come un oggetto "sottoscrivibile".</p><p>In Python, un oggetto "sottoscrivibile" è un oggetto su cui puoi usare l'operatore parentesi quadre <code>[]</code>, o su cui puoi iterare.</p><h2 id="perch-si-verifica-l-errore-typeerror-int-object-is-not-subscriptable-error"><strong>Perché si Verifica l'Errore "TypeError: 'int' object is not subscriptable Error"</strong></h2><p>Puoi iterare su una stringa, una lista, una tupla o anche un dizionario. Ma non è possibile iterare su un numero intero o un insieme di numeri.</p><p>Quindi, se ottieni questo errore, significa che stai cercando di iterare su un numero intero oppure che stai trattando un numero intero come un array.</p><p>Nell'esempio in basso, ho scritto la data di nascita (variabile <code>dob</code>) nel formato ddmmyy. Ho provato a ottenere il mese di nascita ma non ha funzionato. Ha restituito l'errore "TypeError: 'int' object is not subscriptable":</p><pre><code class="language-py">dob = 21031999
mob = dob[2:4]

print(mob)

# Output: Traceback (most recent call last):
#   File "int_not_subable..py", line 2, in &lt;module&gt;
#     mob = dob[2:4]
# TypeError: 'int' object is not subscriptable
</code></pre><h2 id="come-risolvere-l-errore-typeerror-int-object-is-not-subscriptable"><strong>Come Risolvere l'Errore "TypeError: 'int' object is not subscriptable"</strong></h2><p>Per risolvere questo errore, devi convertire il numero intero in un altro tipo di dato che sia iterabile, per esempio, una stringa.</p><p>E se stai ottenendo questo errore perché hai convertito qualcosa in un numero intero, allora devi riconvertirlo in ciò che era prima. Per esempio, una stringa, una tupla, una lista, e così via.</p><p>Per quanto riguarda il codice che ci ha restituito l'errore in alto, sono stato in grado di farlo funzionare convertendo la variabile <code>dob</code> in una stringa:</p><pre><code class="language-py">dob = "21031999"
mob = dob[2:4]

print(mob)

# Output: 03
</code></pre><p>Se stai ottenendo l'errore dopo aver convertito qualcosa in un numero intero, significa che devi riconvertirlo in una stringa e lasciarlo così com'è.</p><p>Nell'esempio in basso, ho scritto un programma di Python che stampa la data di nascita nel formato ddmmyy. Ma restituisce un errore:</p><pre><code class="language-py">name = input("Come ti chiami? ")
dob = int(input("Qual è la tua data di nascita nel formato ddmmyy? "))
dd = dob[0:2]
mm = dob[2:4]
yy = dob[4:]
print(f"Ciao, {name}, \nIl tuo giorno di nascita è {dd} \nIl mese di nascita è {mm} \nE l'anno di nascita è {yy}.")

#Output: Come ti chiami? John Doe
# Qual è la tua data di nascita nel formato ddmmyy? 01011970
# Traceback (most recent call last):
#   File "int_not_subable.py", line 12, in &lt;module&gt;
#     dd = dob[0:2]
# TypeError: 'int' object is not subscriptable
</code></pre><p>Scorrendo il codice, ho ricordato che l'input restituisce una stringa, quindi non devo convertire la data di nascita inserita dall'utente in un numero intero. Questo risolve l'errore:</p><pre><code class="language-py">name = input("Come ti chiami? ")
dob = input("Qual è la tua data di nascita nel formato ddmmyy? ")
dd = dob[0:2]
mm = dob[2:4]
yy = dob[4:]
print(f"Ciao, {name}, \nIl tuo giorno di nascita è {dd} \nIl mese di nascita è {mm} \nE l'anno di nascita è {yy}.")

#Output: Come ti chiami? John Doe
# Qual è la tua data di nascita nel formato ddmmyy? 01011970
# Ciao, John Doe,
# Il tuo giorno di nascita è 01
# Il mese di nascita è 01
# E l'anno di nascita è 1970.
</code></pre><h2 id="conclusione"><strong>Conclusione</strong></h2><p>In questo articolo, hai imparato che cosa causa l'errore "TypeError: 'int' object is not subscriptable" in Python e come risolverlo.</p><p>Se stai ottenendo questo errore, significa che stai trattando un numero intero come un tipo di dato iterabile. I numeri interi non sono iterabili, quindi devi usare un tipo di dato differente o convertire il numero intero in un tipo di dato iterabile.</p><p>E se questo errore si verifica perché hai convertito qualcosa in un numero intero, allora devi riconvertirlo in un tipo di dato iterabile.</p><p>Grazie per aver letto.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Scaricare e Tagliare MP3 da YouTube con Python ]]>
                </title>
                <description>
                    <![CDATA[ Siamo tutti diversi, ma penso che quasi tutti amiamo ascoltare la musica. Se vuoi tenere una versione locale degli stream audio che ascolti spesso, dovrai scaricare questi file. A volte potresti anche voler tagliare una porzione di questo file audio invece di avere solo il file intero disponibile. Puoi sviluppare ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-scaricare-e-tagliare-mp3-da-youtube-con-python/</link>
                <guid isPermaLink="false">64a2de8caedaa5069ba96ef9</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Wed, 26 Jul 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/07/pexels-pixabay-164821.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/download-trim-mp3-from-youtube-with-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Download and Trim MP3s from YouTube with Python</a>
      </p><p>Siamo tutti diversi, ma penso che quasi tutti amiamo ascoltare la musica.</p><p>Se vuoi tenere una versione locale degli stream audio che ascolti spesso, dovrai scaricare questi file. A volte potresti anche voler tagliare una porzione di questo file audio invece di avere solo il file intero disponibile.</p><p>Puoi sviluppare uno script di Python per fare esattamente queste cose. Puoi anche ampliarlo con delle funzionalità aggiuntive se preferisci. E ti mostrerò come farlo in questo tutorial.</p><h2 id="una-nota-sul-copyright"><strong>Una Nota sul Copyright</strong></h2><p>Se hai mai usato internet prima d'ora, probabilmente sei consapevole del fatto che i problemi di copyright possono dare fastidio a molte persone - qualsiasi sia la loro posizione su come dovrebbero essere i contenuti gratuiti.</p><p><a href="https://github.blog/2020-11-16-standing-up-for-developers-youtube-dl-is-back/">Anche la stessa libreria che andremo ad usare ha avuto la sua buona parte di problemi di copyright.</a> </p><p>Fortunatamente, c'è del materiale non protetto da copyright disponibile con cui possiamo sia divertirci che giocare nei nostri programmi. Per questo motivo, in questo tutorial useremo il brano non protetto da diritti d'autore del <a href="https://www.youtube.com/watch?v=8OAPLk20epo">quarto movimento della nona sinfonia di Beethoven</a>.</p><p>Questa guida dà per scontato che userai i seguenti metodi per scaricare del materiale non protetto da copyright. Non usare queste informazioni per infrangere alcun copyright!</p><h2 id="cosa-faremo-in-questo-tutorial"><strong>Cosa Faremo in Questo Tutorial</strong></h2><p>Per prima cosa installeremo la dipendenza di base, FFMPEG. Poi installeremo la libreria <code>youtube-dl</code> (che funziona anche con Vimeo ed altre piattaforme) per scaricare audio da un URL di YouTube e usarlo nel nostro codice di Python.</p><p>Poi scaricheremo la libreria <code>pydub</code> per ritagliare i file audio e implementare questa funzionalità nel nostro codice.</p><p>Infine, creeremo alcune amichevoli interfacce utente così da poter riutilizzare questo script in un secondo momento senza dover modificare il codice.</p><p>Questo è tutto ciò che verrà eseguito nella funzione <code>main()</code> così possiamo separare funzionalità, implementazione ed uso.</p><h2 id="come-installare-il-pacchetto-ffmpeg"><strong>Come Installare il Pacchetto FFMPEG</strong></h2><p>Questo pacchetto è la parte essenziale di molti programmi multimediali (e di tutti quelli open-source che ho usato finora). Ne avremo bisogno per entrambe le librerie di Python che presto installeremo.</p><h3 id="come-installare-su-linux"><strong>Come Installare su Linux</strong></h3><p>Se sei su un sistema basato su Debian (come Ubuntu o Kali), ecco il comando per installare FFMPEG:</p><pre><code>sudo apt-get install ffmpeg</code></pre><p>Se stai usando altre tipologie di distribuzioni, le istruzioni per installare sono <a href="https://ffmpeg.org/download.html">qui</a>.</p><h3 id="come-installare-su-windows"><strong>Come Installare su Windows</strong></h3><p>Per prima cosa, installa il <a href="https://chocolatey.org/how-chocolatey-works">Chocolatey Package Manager</a>. Le istruzioni per installarlo sono <a href="https://chocolatey.org/install">qui</a>, ti aspetto.</p><p>Una volta che avrai correttamente installato chocolatey (se non lo avevi già), scarica il pacchetto eseguendo <strong>questo comando come amministratore su Powershell</strong>:</p><pre><code class="language-powershell">choco install ffmpeg
</code></pre><h3 id="come-installare-su-mac"><strong>Come Installare su Mac</strong></h3><p>Se già non lo hai, <a href="https://brew.sh/">installa homebrew</a>. Poi, in un terminale:</p><pre><code>brew install ffmpeg</code></pre><h2 id="come-scaricare-audio-da-url-di-youtube-programmaticamente"><strong>Come Scaricare Audio da URL di YouTube Programmaticamente</strong></h2><p>Prima di tutto, scarica il pacchetto youtube-dl da pip. È <a href="https://github.com/ytdl-org/youtube-dl">uno tra quelli con più stelle su GitHub</a>.</p><p><code>pip install youtube-dl</code></p><p>Importeremo questo modulo per poi dichiarare una funzione che scarica l'audio in un formato mp3 di qualità accettabile da un URL di YouTube.</p><pre><code class="language-python">import youtube_dl # client per molti portali multimediali

# scarica yt_url nella stessa cartella da cui viene eseguito lo script
def download_audio(yt_url):
    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
    }
    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        ydl.download([yt_url])

def main():
    yt_url = "https://www.youtube.com/watch?v=8OAPLk20epo"
    download_audio(yt_url)

main()
</code></pre><p>Il metodo <code>.download()</code> scaricherà gradualmente lo stream audio come file <code>.webm</code>. Una volta che avrà determinato che l'intero file è disponibile, userà <code>ffmpeg</code> per convertirlo in un file MP3. Ciò significa che se succedesse qualcosa, ad esempio se ci fosse un calo di connessione quando solo il 90% del file è stato scaricato, il download riprenderà dal 90% invece che dall'inizio - molto conveniente.</p><p>Nota che se hai già il file mp3 scaricato, il download ricomincerà e sovrascriverà il file.</p><p>Esegui il tuo script di Python. Il download dell'audio di questa interpretazione del Quarto movimento della Nona sinfonia di Beethoven dovrebbe scaricare un file MP3 di ~33MB con il titolo del video disponibile localmente. Probabilmente sarà un po' lento, quindi vai pure a farti una tazza di tè.</p><p>Come puoi vedere, è possibile passare parametri opzionali a youtube-dl (che sarà disponibile anche come programma CLI autonomo al di fuori dello script). Una delle sue capacità è quella di <a href="https://github.com/ytdl-org/youtube-dl#video-selection">scaricare una serie di video dall'URL di una playlist</a>. Se sei interessato, puoi leggere la loro documentazione. In questo tutorial continuerò a farne un uso più superficiale.</p><h2 id="come-tagliare-il-file-scaricato"><strong>Come Tagliare il File Scaricato</strong></h2><p>Una volta scaricato il file, andremo a tagliarlo arbitrariamente in locale (potresti esserti chiesto se fosse o meno possibile scaricare semplicemente una clip da YouTube. Tutti i metodi affidabili che ho trovato portano sempre a scaricare l'intero file e poi a modificarlo localmente). Per quello useremo la <a href="https://github.com/jiaaro/pydub">libreria pydub</a>. Puoi installarla così:</p><pre><code class="language-python">pip install pydub</code></pre><p>Questa è una libreria molto buona che ti permette di manipolare completamente l'audio, riducendo o aumentando il volume a determinati intervalli, ripetendo delle clip, e così via. Per ora, ci interessa solo tagliarlo.</p><p>Per tagliare il nostro file scaricato, dovremo prendere il nome del nostro nuovo file MP3, convertire il punto di inizio e il punto di fine dell'intervallo audio che desideriamo da 'ore:minuti:secondi' a millisecondi, e finalmente usare <code>pydub</code> per tagliare il nostro file audio.</p><h3 id="come-prendere-il-nome-del-file"><strong>Come prendere il nome del file</strong></h3><p>Sfortunatamente, il metodo <code>.download()</code> non restituisce il nome del file generato, a cui non avremmo comunque accesso avendo passato l'URL come parametro. Ma abbiamo Python che è uno strumento fantastico.</p><p>Sappiamo che stiamo cercando un file <code>.mp3</code> che è stato generato giusto poco prima della nostra ricerca del nome del file (Python è un linguaggio a thread singolo e eseguirà il codice in modo sincrono di default). Prenderemo il nome del nostro file MP3 più recente nella cartella dello script, e quello sarà il nostro file.</p><p>Possiamo eseguire questa operazione elencando tutti i file <code>.mp3</code> nella cartella locale, prendendo le loro marche temporali come numeri interi (dunque il tempo in millisecondi contato da una data del passato. Ciò significa che più alto sarà il valore, più lontano nel tempo il file sarà stato creato.) e scegliendo il file con il valore più alto.</p><p>Per questo avremo bisogno dei moduli <code>glob</code> per navigare nella cartella e <code>os</code> per prendere le informazioni delle marche temporali, entrambi già disponibili.</p><pre><code class="language-python">import glob
import os

def newest_mp3_filename():
    # elenca tutti gli mp3 nella cartella locale
    list_of_mp3s = glob.glob('./*.mp3')
    # restituisce l'mp3 con il valore di marca temporale più alto
    return max(list_of_mp3s, key = os.path.getctime)
</code></pre><h3 id="come-ottenere-hh-mm-ss-in-millisecondi"><strong>Come ottenere HH:MM:SS in millisecondi</strong></h3><p>Una volta tagliato il nostro file, <code>pydub</code> si aspetta degli intervalli di tempo in millisecondi. Ma per noi esseri umani, calcolare il momento esatto in millisecondi ogni volta che tagliamo un video potrebbe risultare abbastanza fastidioso, quindi chiederemo gentilmente al computer di farlo per noi.</p><p>Il nostro input sarà una stringa nel formato <strong>HH:MM:SS</strong>. Questa cosa funziona bene se vogliamo tagliare un video più lungo di un'ora, ma la maggior parte delle volte vogliamo solo ottenere l'intervallo di tempo da un intervallo minuto:secondo ad un altro. Quindi dobbiamo tenere in considerazione anche questo.</p><p>Un millisecondo è un 1/1000 di un secondo, un minuto è formato da 60 secondi e un'ora è formata da 60 minuti. Dunque dobbiamo prima ottenere il valore per le ore, poi per i minuti, poi per i secondi, eseguire la conversione in millisecondi per ognuno e poi sommare le parti per ottenere il risultato.</p><pre><code class="language-python">def get_video_time_in_ms(video_timestamp):
    vt_split = video_timestamp.split(":")
    if (len(vt_split) == 3): # se in formato HH:MM:SS
        hours = int(vt_split[0]) * 60 * 60 * 1000
        minutes = int(vt_split[1]) * 60 * 1000
        seconds = int(vt_split[2]) * 1000
    else: # formato MM:SS
        hours = 0
        minutes = int(vt_split[0]) * 60 * 1000
        seconds = int(vt_split[1]) * 1000
    # tempo in millisecondi
    return hours + minutes + seconds
</code></pre><h3 id="come-ottenere-l-audio-tagliato"><strong>Come Ottenere l'Audio Tagliato</strong></h3><p>Adesso leggeremo il nostro MP3 come oggetto <code>pydub</code> e taglieremo l'intervallo che desideriamo. La sintassi è la stessa dell'operazione di taglio per stringhe e array, ma invece di un indice per ogni elemento useremo i millisecondi per istanti specifici all'interno dell'audio.</p><pre><code class="language-python">def get_trimmed(mp3_filename, initial, final = ""):
    if (not mp3_filename):
        # restituisci un errore per fermare immediatamente l'esecuzione del programma
        raise Exception("Nessun MP3 nella cartella locale.")
    # legge l'mp3 come oggetto PyDub
    sound = AudioSegment.from_mp3(mp3_filename)
    t0 = get_video_time_in_ms(initial)
    print("Inizio del processo di taglio del file ", mp3_filename, ".\n")
    print("Inizia da ", initial, "...")
    if (len(final) &gt; 0):
        print("...fino a ", final, ".\n")
        t1 = get_video_time_in_ms(final)
        return sound[t0:t1] # da t0 fino a t1
    return sound[t0:] # t0 fino alla fine
</code></pre><h2 id="come-mettere-tutto-insieme">Come Mettere Tutto Insieme</h2><blockquote>Alle Menschen werden Brüder,<br>Wo dein sanfter Flügel weilt.<br>-- Friedrich Schiller</blockquote><p>Nel caso te lo stessi chiedendo, la traduzione del frammento qui sopra è "Tutti gli uomini diventano fratelli, dove la tua ala soave freme." È un frammento dell'<em>Inno alla Gioia</em>, un poema di Friedrich Schiller, che fa da testo alla maggior parte delle parti corali del Quarto movimento.</p><p>Questo è il frammento più famoso del movimento più famoso della sinfonia più famosa di Beethoven. Chiunque tu sia, dovunque e comunque tu sia stato cresciuto, quasi sicuramente riconoscerai questo brano.</p><p>Adesso metteremo insieme tutto ciò che abbiamo fatto. Scaricheremo l'audio da YouTube, taglieremo la parte corale dell'Inno alla Gioia (da <code>9:51</code> a <code>14:04</code>), e lo salveremo come <code>&lt;filename&gt; - TRIM.mp3</code>.</p><p>Se hai seguito correttamente il tutorial, aggiorna la tua funzione <code>main()</code> per eseguire ogni fase in modo da avere sia l'MP3 intero che la versione tagliata nella cartella da cui eseguirai lo script. Non dimenticarti di eseguire la funzione <code>main()</code> alla fine dello script.</p><pre><code class="language-python">def main():
    yt_url = "https://www.youtube.com/watch?v=8OAPLk20epo"
    download_audio(yt_url)
    initial = "9:51"
    final = "14:04"
    filename = newest_mp3_filename()
    trimmed_file = get_trimmed(filename, initial, final)
    trimmed_filename = "".join([filename.split(".mp3")[0], "- TRIM.mp3"])
    print("Processo concluso con successo. Salvataggio del file tagliato con il nome ", trimmed_filename)
    # salva il file con il nuovo nome
    trimmed_file.export(trimmed_filename, format="mp3")
</code></pre><h2 id="come-aggiungere-l-interazione-dell-utente-direttamente-da-cli"><strong>Come Aggiungere l'Interazione dell'Utente Direttamente da CLI</strong></h2><p>Per questa parte avremo bisogno del modulo <code>sys</code> di Python, che legge l'input passato dalla linea di comando (tra le altre cose). Aggiorneremo semplicemente le variabili della funzione <code>main()</code> per leggere l'input dalla CLI invece dei dati che sono scritti nel codice.</p><p>ARGV legge l'input in modo sequenziale come un array, iniziando dall'indice 1 (0 rappresenta il nome dello script di Python in esecuzione). Lo imposteremo in modo da fargli leggere un URL come primo argomento, poi (questo è opzionale) gli istanti iniziali e finali per tagliarlo.</p><pre><code class="language-python">import sys

def main():
    if (not len(sys.argv) &gt; 1):
        print("Per favore, inserisci l'URL di una piattaforma multimediale supportata da youtube-dl come primo argomento.")
        return
    yt_url = sys.argv[1]
    download_audio(yt_url)
    if (not len(sys.argv &gt; 2)): # esci se non vengono inseriti istanti come argomenti
        return
    initial = sys.argv[2]
    final = ""
    if (sys.argv[3]):
        final = sys.argv[3]
    filename = newest_mp3_filename()
    trimmed_file = get_trimmed(filename, initial, final)
    trimmed_filename = "".join([filename.split(".mp3")[0], "- TRIM.mp3"])
    print("Processo concluso con successo. Salvataggio del file tagliato con il nome ", trimmed_filename)
    # salva il file con il nuovo nome
    trimmed_file.export(trimmed_filename, format="mp3")
</code></pre><p>Esegui il file per collaudarlo. Ricordati di usare il nome dello script che si trova sul tuo dispositivo.</p><pre><code class="language-bash">python ytauddown.py https://www.youtube.com/watch?v=8OAPLk20epo 9:51 14:04
</code></pre><h2 id="script-finale"><strong>Script Finale</strong></h2><p>Ecco la versione finale di tutto quanto messo insieme. Nota che i commenti sui moduli sono solo relativi a quello per cui dobbiamo usarli e che la funzione <code>main()</code> viene chiamata nell'ultima riga.</p><pre><code class="language-python">import youtube_dl # client per scaricare da molti portali multimediali
import glob # operazioni nelle cartelle
import os # interfaccia per prendere le informazioni sui file fornite dal sistema operativo
import sys # interfaccia per la linea di comando
from pydub import AudioSegment # solo operazioni audio

def newest_mp3_filename():
    # elenca tutti gli mp3 nella cartella locale
    list_of_mp3s = glob.glob('./*.mp3')
    # restituisce l'mp3 con il valore di marca temporale più alto
    return max(list_of_mp3s, key = os.path.getctime)

def get_video_time_in_ms(video_timestamp):
    vt_split = video_timestamp.split(":")
    if (len(vt_split) == 3): # se in formato HH:MM:SS
        hours = int(vt_split[0]) * 60 * 60 * 1000
        minutes = int(vt_split[1]) * 60 * 1000
        seconds = int(vt_split[2]) * 1000
    else: # formato MM:SS
        hours = 0
        minutes = int(vt_split[0]) * 60 * 1000
        seconds = int(vt_split[1]) * 1000
    # tempo in millisecondi
    return hours + minutes + seconds

def get_trimmed(mp3_filename, initial, final = ""):
    if (not mp3_filename):
        # restituisci un errore per fermare immediatamente l'esecuzione del programma
        raise Exception("Nessun MP3 nella cartella locale.")
    # legge l'mp3 come oggetto PyDub
    sound = AudioSegment.from_mp3(mp3_filename)
    t0 = get_video_time_in_ms(initial)
    print("Inizio del processo di taglio del file ", mp3_filename, ".\n")
    print("Inizia da ", initial, "...")
    if (len(final) &gt; 0):
        print("...fino a ", final, ".\n")
        t1 = get_video_time_in_ms(final)
        return sound[t0:t1] # da t0 fino a t1
    return sound[t0:] # t0 fino alla fine



# scarica yt_url nella stessa cartella da cui viene eseguito lo script
def download_audio(yt_url):
    ydl_opts = {
        'format': 'bestaudio/best',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
    }
    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
        ydl.download([yt_url])

def main():
    if (not len(sys.argv) &gt; 1):
        print("Per favore, inserisci l'URL di una piattaforma multimediale supportata da youtube-dl come primo argomento.")
        return
    yt_url = sys.argv[1]
    download_audio(yt_url)
    if (not len(sys.argv &gt; 2)): # esci se non vengono inseriti istanti come argomenti
        return
    initial = sys.argv[2]
    final = ""
    if (sys.argv[3]):
        final = sys.argv[3]
    filename = newest_mp3_filename()
    trimmed_file = get_trimmed(filename, initial, final)
    trimmed_filename = "".join([filename.split(".mp3")[0], "- TRIM.mp3"])
    print("Processo concluso con successo. Salvataggio del file tagliato con il nome ", trimmed_filename)
    # salva il file con il nuovo nome
    trimmed_file.export(trimmed_filename, format="mp3")

# esempio d'uso:
# python ytauddown.py https://www.youtube.com/watch?v=8OAPLk20epo 9:51 14:04
main()
</code></pre><h2 id="esercizi-consigliati"><strong>Esercizi Consigliati</strong></h2><ol><li>Individua se il primo input è un URL valido oppure no. Dai un'occhiata alle RegEx di Python se non sai da dove partire.</li><li>Individua se il secondo e il terzo input sono in un formato valido (ore:minuti:secondi <strong>OPPURE </strong>minuti:secondi).</li><li>Aggiungi un'opzione per rinominare il file MP3 direttamente dalla CLI. Ricorda che gli argomenti di ARGV vengono eseguiti in ordine.</li><li>Riscrivi lo script per interagire con le sue funzionalità usando una GUI. Può essere sia un'app locale che un'app web, come preferisci.</li></ol><h2 id="considerazioni-finali"><strong>Considerazioni Finali</strong></h2><p>Spero che ti divertirai con questo progetto e che ne farai buon uso.</p><p>Ricorda che guadagnarsi da vivere come artista è molto difficile, specialmente per la maggior parte di coloro che non hanno il supporto di un'azienda. Ricorda di supportare gli artisti che ti piacciono ogni volta che puoi e ricordati inoltre di supportare i software open-source.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come Installare Python 3 su Mac – Tutorial per Installare e Aggiornare Brew ]]>
                </title>
                <description>
                    <![CDATA[ MacOS ha già Python pre-installato. Ma è la versione 2.7, che adesso è superata (abbandonata dalla comunità di sviluppatori di Python). L'intera comunità di Python adesso usa Python 3.x (la versione più recente al momento in cui viene scritto questo articolo è la 3.9). E presto verrà rilasciato Python 4.x, ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-installare-python-3-su-mac-tutorial-per-installare-e-aggiornare-brew/</link>
                <guid isPermaLink="false">6490167ca524800686f5fdb9</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Fri, 30 Jun 2023 07:26:42 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/06/606ba4e1d5756f080ba94d0c.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/python-version-on-mac-update/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Install Python 3 on Mac – Brew Install Update Tutorial</a>
      </p><p>MacOS ha già Python pre-installato. Ma è la versione 2.7, che adesso è superata (abbandonata dalla comunità di sviluppatori di Python).</p><p>L'intera comunità di Python adesso usa Python 3.x (la versione più recente al momento in cui viene scritto questo articolo è la 3.9). E presto verrà rilasciato Python 4.x, ma sarà totalmente retrocompatibile.</p><p>Se provi ad avviare Python dal tuo terminale di MacOS, vedrai questo avviso:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/04/freecodecamp_-_freecodecamp_MacBook-Pro_-___-_-zsh_-_84-24-1.png" class="kg-image" alt="freecodecamp_-_freecodecamp_MacBook-Pro_-___-_-zsh_-_84-24-1" width="600" height="400" loading="lazy"><figcaption>ATTENZIONE: Python 2.7 non è consigliato. Questa versione è inclusa in macOS per motivi di compatibilità con il vecchio software. Le versioni future di macOS non includeranno Python 2.7. Per questo, si consiglia di usare 'python3' dal terminale.</figcaption></figure><p>Fino a quando Apple non deciderà di impostare Python 3.x come versione predefinita, dovrai installarlo per conto tuo.</p><h2 id="un-singolo-comando-per-eseguire-python-3"><strong>Un Singolo Comando per Eseguire Python 3</strong></h2><p>Per alcune delle persone che stanno leggendo questo articolo, questo comando potrebbe essere sufficiente. Puoi eseguire Python 3 usando questo comando (con il 3 alla fine).</p><pre><code class="language-bash">python3</code></pre><p>Se questo è tutto ciò per cui siete qui, non preoccupatevi. Buona giornata e buona programmazione.</p><p>Ma se vuoi un vero e proprio sistema di controllo di versione di Python per tenere traccia delle varie versioni - e avere un maggiore controllo su quale versione usi - questo tutorial ti mostrerà esattamente come ottenerlo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/04/Megaman-810x600.jpeg" class="kg-image" alt="Megaman-810x600" width="600" height="400" loading="lazy"><figcaption>Comunque, se ti stai chiedendo perché continuo a fare riferimento a Python 3.x - la x è un sostituto per le sottoversioni (o, come le chiamano gli sviluppatori, "point release".) Sta a indicare qualsiasi versione di Python 3.</figcaption></figure><h2 id="come-installare-homebrew-su-mac"><strong>Come Installare Homebrew su Mac</strong></h2><p>Per prima cosa hai bisogno di installare Homebrew, un potente sistema di gestione dei pacchetti per Mac.</p><p>Apri il tuo terminale. Puoi farlo usando MacOS spotlight (command + spazio) e scrivendo "terminal".</p><p>Ora che sei su una linea di comando, puoi installare l'ultima versione di Homebrew eseguendo questo comando:</p><pre><code class="language-bash">/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"</code></pre><p>Il tuo terminale chiederà i permessi di accesso di livello Super User. Avrai bisogno di inserire la tua password per eseguire questo comando. È la stessa password che inserisci quando fai log in sul tuo Mac. Inseriscila e premi invio.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/04/freecodecamp_-__bin_bash_-c__-__bin_bash_-_sudo_-_bash_-c____bin_bash_012set_-u_012_012abort___-_012__printf___s_n_______012__exit_1_012-_012_012if___-z___-BASH_VERSION_--_____then_012__abort__Bash_is_required_to_interpret_this_script___012.png" class="kg-image" alt="freecodecamp_-__bin_bash_-c__-__bin_bash_-_sudo_-_bash_-c____bin_bash_012set_-u_012_012abort___-_012__printf___s_n_______012__exit_1_012-_012_012if___-z___-BASH_VERSION_--_____then_012__abort__Bash_is_required_to_interpret_this_script___012" width="600" height="400" loading="lazy"><figcaption>Uno screenshot del mio terminale estremamente personalizzato. Probabilmente il tuo terminale sarà diverso da questo.</figcaption></figure><p>Homebrew ti chiederà di confermare di voler installare i seguenti elementi. Devi premere invio per continuare (o premere qualsiasi altro tasto se ci hai ripensato.)</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/04/freecodecamp_-__bin_bash_-c__-__bin_bash_-_bash_-c____bin_bash_012set_-u_012_012abort___-_012__printf___s_n_______012__exit_1_012-_012_012if___-z___-BASH_VERSION_--_____then_012__abort__Bash_is_required_to_interpret_this_script___012fi_012_.png" class="kg-image" alt="freecodecamp_-__bin_bash_-c__-__bin_bash_-_bash_-c____bin_bash_012set_-u_012_012abort___-_012__printf___s_n_______012__exit_1_012-_012_012if___-z___-BASH_VERSION_--_____then_012__abort__Bash_is_required_to_interpret_this_script___012fi_012_" width="600" height="400" loading="lazy"></figure><h2 id="come-installare-pyenv-per-gestire-le-tue-versioni-di-python"><strong>Come Installare pyenv per Gestire le Tue Versioni di Python</strong></h2><p>Adesso prendiamoci un momento per installare PyEnv. Questa libreria ti aiuterà a passare da una versione di Python all'altra (in caso avessi bisogno di eseguire Python 2.x per qualche motivo, e in vista dell'arrivo di Python 4.0).</p><p>Esegui questo comando:</p><pre><code class="language-bash">brew install pyenv</code></pre><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/04/freecodecamp_-_freecodecamp_MacBook-Pro_-___-_-zsh_-_90-24.png" class="kg-image" alt="freecodecamp_-_freecodecamp_MacBook-Pro_-___-_-zsh_-_90-24" width="600" height="400" loading="lazy"><figcaption>Installazione di PyEnv</figcaption></figure><p>Adesso puoi installare l'ultima versione di Python.</p><h2 id="come-usare-pyenv-per-installare-python-o-aggiornare-la-tua-versione-di-python"><strong>Come Usare pyenv per Installare Python o Aggiornare la Tua Versione di Python</strong></h2><p>Adesso devi solamente eseguire il seguente comando:</p><pre><code class="language-bash">pyenv install 3.9.2 </code></pre><p>Nota che puoi sostituire 3.9.2 con qualunque sia l'ultima versione di Python. Per esempio, quando uscirà Python 4.0.0, potrai eseguire questo:</p><pre><code class="language-bash">pyenv install 4.0.0</code></pre><h2 id="risoluzione-problemi-dell-installazione-di-pyenv"><strong>Risoluzione Problemi dell'Installazione di pyenv </strong></h2><p>Se incorri in un errore che dice "C compiler cannot create executables" (Il compilatore C non può creare file eseguibili), il modo più semplice di risolverlo è installare da capo Xcode di Apple.</p><p>Xcode è uno strumento creato da Apple che include tutte le librerie di C e altri strumenti che Python usa quando viene eseguito su MacOS. Xcode occupa la bellezza di 11 gigabyte, ma vorrai avere la versione più aggiornata. Potresti voler eseguire l'installazione mentre stai dormendo.</p><p>Puoi <a href="https://developer.apple.com/download/">ottenere l'ultima versione di Xcode di Apple qui</a>. Ho dovuto farlo dopo aver aggiornato MacOS Big Sur, ma una volta fatto tutti i comandi hanno funzionato senza problemi. Semplicemente esegui di nuovo il comando <code>pyenv install 3.9.2</code> e adesso dovrebbe funzionare.</p><h2 id="come-configurare-il-tuo-path-di-macos-per-pyenv-bash-o-zsh-"><strong>Come Configurare il tuo PATH di MacOS per pyenv (Bash o ZSH)</strong></h2><p>Per prima cosa hai bisogno di aggiornare il tuo path Unix per fare in modo che PyEnv possa interagire con il tuo sistema.</p><p>Ecco una lunga spiegazione di come funziona il PATH su MacOS (e Unix), direttamente dal <a href="https://github.com/pyenv/pyenv">repository di GitHub di pyenv</a>.</p><blockquote>Quando esegui un comando come <code>python</code> o <code>pip</code>, il tuo sistema operativo cerca in una lista di cartelle un file eseguibile con quel nome. Questa lista di cartelle si trova in una variabile d'ambiente chiamata <code>PATH</code>, con ogni cartella della lista separata da due punti:</blockquote><pre><code>/usr/local/bin:/usr/bin:/bin
</code></pre><blockquote>Le cartelle all'interno di <code>PATH</code> vengono cercare da sinistra a destra, quindi il file eseguibile corrispondente che si trova in una cartella all'inizio della lista ha la precedenza su un altro che si trova alla fine. In questo esempio, la cartella &nbsp;<code>/usr/local/bin</code> verrà ispezionata prima, poi <code>/usr/bin</code>, poi <code>/bin</code>.</blockquote><p>Ed ecco la spiegazione di cosa è uno Shim. Sto citando di nuovo il documento per esteso perché non riesco davvero a spiegarlo meglio di così.</p><blockquote>pyenv funziona inserendo una cartella di shim all'inizio del tuo <code>PATH</code>:</blockquote><pre><code>$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
</code></pre><blockquote>Attraverso un processo chiamato rehashing, pyenv mantiene gli shim in quella cartella così che trovi le corrispondenze per ogni comando di Python attraverso tutte le versioni di Python installate —<code>python</code>, <code>pip</code>, e così via.</blockquote><blockquote>Gli shim sono file eseguibili leggeri che passano semplicemente il tuo comando a pyenv.</blockquote><p>Ecco come aggiornare il tuo <code>.bash_profile</code> su Bash (che è già installato su MacOS):</p><pre><code>echo 'export PYENV_ROOT="$HOME/.pyenv"' &gt;&gt; ~/.bash_profile</code></pre><p>Poi esegui:</p><pre><code>echo 'export PATH="$PYENV_ROOT/bin:$PATH"' &gt;&gt; ~/.bash_profile</code></pre><p><strong><strong>Not</strong>a<strong>:</strong></strong> se non hai una cartella <code>/bin</code> nella tua cartella <code>pyenv_root</code> (puoi avere solo una cartella <code>/shims</code>) potresti aver bisogno di eseguire questa versione del comando:</p><pre><code>`echo 'export PATH="$PYENV_ROOT/shims:$PATH"' &gt;&gt; ~/.bash_profile`</code></pre><p>Dopodiché vorrai aggiungere PyEnv Init al tuo terminale. Esegui questo comando se stai usando Bash (che, ripeto, è già installato su MacOS):</p><pre><code>echo -e 'if command -v pyenv 1&gt;/dev/null 2&gt;&amp;1; then\n  eval "$(pyenv init -)"\nfi' &gt;&gt; ~/.bash_profile
</code></pre><p>Adesso resetta il tuo terminale eseguendo questo comando:</p><pre><code>reset</code></pre><h2 id="come-configurare-il-tuo-path-su-macos-per-pyenv-su-zsh-o-ohmyzsh"><strong>Come Configurare il tuo PATH su MacOS per pyenv su ZSH o OhMyZSH</strong></h2><p>Se invece di Bash, già installato su Mac, stai usando ZSH (o OhMyZSH) come me, potresti voler modificare il file <code>.zshrc</code>:</p><pre><code>echo 'export PYENV_ROOT="$HOME/.pyenv"' &gt;&gt; ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' &gt;&gt; ~/.zshrc</code></pre><p>Poi esegui questo:</p><pre><code>echo -e 'if command -v pyenv 1&gt;/dev/null 2&gt;&amp;1; then\n  eval "$(pyenv init --path)"\n  eval "$(pyenv init -)"\nfi' &gt;&gt; ~/.zshrc</code></pre><h2 id="come-impostare-una-versione-globale-predefinita-di-python-bash-o-zsh-"><strong>Come Impostare una Versione Globale Predefinita di Python (Bash o ZSH)</strong></h2><p>Puoi impostare la versione più recente di Python come globale, il che significa che sarà la versione predefinita di Python che MacOS usa quando esegui delle applicazioni di Python.</p><p>Esegui questo comando:</p><pre><code class="language-bash">pyenv global 3.9.2</code></pre><p>Di nuovo, puoi sostituire 3.9.2 con qualunque sia l'ultima versione.</p><p>Adesso puoi verificare che abbia funzionato controllando la versione globale di Python:</p><pre><code class="language-bash">pyenv versions</code></pre><p>Dovresti visualizzare questo output:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/04/freecodecamp_-_freecodecamp_MacBook-Pro_-_-zsh_-_84-24.png" class="kg-image" alt="freecodecamp_-_freecodecamp_MacBook-Pro_-_-zsh_-_84-24" width="600" height="400" loading="lazy"><figcaption>Il * significa che la versione adesso è quella globale predefinita.</figcaption></figure><h2 id="ultima-fase-chiudi-il-tuo-terminale-e-riavvialo"><strong>Ultima Fase: Chiudi il Tuo Terminale e Riavvialo</strong></h2><p>Dopo aver riavviato il tuo terminale, esegui il comando <code>python</code> e avvierai la nuova versione di Python invece di quella vecchia.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/04/freecodecamp_-_python_-_python_-_python_-_119-36.png" class="kg-image" alt="freecodecamp_-_python_-_python_-_python_-_119-36" width="600" height="400" loading="lazy"><figcaption>Yay. Python 3.9.2 e nessun avviso</figcaption></figure><p>Congratulazioni. Grazie per aver letto, e buona programmazione.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ pip Command Not Found – Risoluzione Errore per Mac e Linux ]]>
                </title>
                <description>
                    <![CDATA[ Quando usi Python, potresti aver bisogno di installare ed usare determinati pacchetti. E c'è un comando disponibile per questo, conosciuto come 'pip'. Con pip puoi installare, aggiornare e disinstallare vari pacchetti di Python. In questo articolo imparerai come usarlo e come gestire gli errori di pip. Come usare pip Pip ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/pip-command-not-found-risoluzione-errore-per-mac-e-linux/</link>
                <guid isPermaLink="false">6495bd1da524800686f5ffaf</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Wed, 28 Jun 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/06/pip.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/pip-command-not-found-mac-and-linux-error-solved/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">pip Command Not Found – Mac and Linux Error Solved</a>
      </p><p>Quando usi Python, potresti aver bisogno di installare ed usare determinati pacchetti. E c'è un comando disponibile per questo, conosciuto come 'pip'.</p><p>Con pip puoi installare, aggiornare e disinstallare vari pacchetti di Python. In questo articolo imparerai come usarlo e come gestire gli errori di pip.</p><h2 id="come-usare-pip"><strong>Come usare pip</strong></h2><p>Pip è un comando che puoi usare sulla linea di comando di Linux o Mac. Puoi selezionare un pacchetto da <a href="https://pypi.org/">qui</a>.</p><p>In basso vediamo un esempio di come puoi installare il pacchetto <code>mock-open</code> con <code>pip</code>.</p><pre><code class="language-python">pip3 install mock-open</code></pre><p>Output:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image.png" class="kg-image" alt="image" width="600" height="400" loading="lazy"></figure><p>Poiché questo pacchetto era già stato installato, ci viene mostrato un messaggio che dice che il requisito è già stato soddisfatto.</p><p>Nota che ho usato pip3 perché sto usando Python3. Discuteremo di questo nel dettaglio più avanti.</p><h2 id="che-cos-l-errore-pip-command-not-found"><strong>Che cos'è l'errore <code>pip: command not found</code>?</strong></h2><p>A volte, quando stai installando dei pacchetti, potresti ritrovarti con l'errore: <strong><strong><code>pip: command not found</code></strong> </strong>(pip: comando non trovato). Questo errore potrebbe essere dovuto alle seguenti ragioni:</p><ol><li>Pip non è installato.</li><li>Pip è installato, ma non è compatibile con l'ambiente attuale.</li></ol><p>Su Linux, devi installare il gestore di pacchetti di pip separatamente, poiché si tratta di un pacchetto indipendente. Ma su Mac non hai bisogno di installare pip manualmente, a patto che tu stia lavorando con Python 3.x.</p><h3 id="risolvere-l-errore-pip-command-not-found"><strong>Risolvere l'errore <strong><strong><code>pip: command not found</code></strong></strong></strong></h3><ol><li><strong>Controlla che pip sia installato.</strong></li></ol><p>Su Mac e Linux, puoi usare il comando seguente per controllare se pip è installato.</p><pre><code> python3 -m pip --version </code></pre><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-1.png" class="kg-image" alt="pip installed" width="600" height="400" loading="lazy"><figcaption>Ecco l'output se pip è installato correttamente</figcaption></figure><p>Se pip non è installato, puoi seguire i passaggi per installarlo <a href="https://pip.pypa.io/en/stable/installation/">qui</a> per il sistema operativo corrispondente.</p><p><strong><strong>2. </strong>Aggiorna pip all'ultima versione</strong></p><p>Se pip non funziona ancora, prova ad aggiornarlo all'ultima versione:</p><pre><code>python -m pip install --upgrade pip</code></pre><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-2.png" class="kg-image" alt="Output after upgrading pip" width="600" height="400" loading="lazy"><figcaption>Output dopo aver aggiornato pip</figcaption></figure><p><strong><strong>3. </strong>Risolvi problemi relativi all'ambiente di sviluppo</strong></p><p>È possibile che tu stia provando ad usare la versione sbagliata di pip. Per esempio, <code>pip3</code> funziona per <code>Python3</code>, mentre <code>pip</code> funziona solo per <code>Python2</code>.</p><p>Puoi controllare la tua versione di Python su Linux e Mac in questo modo:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/03/image-3.png" class="kg-image" alt="image-3" width="600" height="400" loading="lazy"><figcaption>Sto usando Python3</figcaption></figure><p>Se il tuo codice è in Python 2 e vuoi comunque usare una vecchia versione di pip, puoi seguire i passaggi qui in basso.</p><p>Nota che Python 2 ha ormai fatto il suo corso. È meglio aggiornare il tuo codice sorgente a Python 3 e usare la versione più aggiornata di pip.</p><p>Segui i passaggi qui in basso solo se stai usando Python2:</p><ol><li>Installa pip (una vecchia versione)</li></ol><pre><code>sudo easy_install pip</code></pre><p>Questo comando installa il comando pip sul tuo sistema.</p><p>Adesso prova ad usare il comando pip - dovrebbe funzionare senza errori.</p><h2 id="ricapitolando">Ricapitolando</h2><p>Pip è un comando utile per installare pacchetti di Python. Abbiamo parlato di alcuni metodi per risolvere l'errore <strong><strong><code>pip: command not found</code>.</strong></strong></p><p>Spero che tu abbia trovato utile questo tutorial.</p><p>Connettiamoci su <a href="https://twitter.com/hira_zaira">Twitter</a>!</p><p>Puoi leggere gli altri miei post <a href="https://www.freecodecamp.org/news/author/zaira/">qui</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Le Funzioni in Python – Spiegate con Esempi di Codice ]]>
                </title>
                <description>
                    <![CDATA[ In qualsiasi linguaggio di programmazione, le funzioni facilitano la  riutilizzabilità del codice. In poche parole, quando vuoi fare qualcosa ripetutamente puoi definire qualcosa come una funzione e chiamare quella funzione ogni volta che ne hai bisogno. In questo tutorial, impareremo di più sulle funzioni definite dall'utente in Python. Quando ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/le-funzioni-in-python-spiegate-con-esempi-di-codice/</link>
                <guid isPermaLink="false">6478b5791647bb059b5417ab</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Paola Rosati ]]>
                </dc:creator>
                <pubDate>Thu, 22 Jun 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2023/06/FUNCTIONS-IN-PYTHON.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/functions-in-python-a-beginners-guide/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Functions in Python – Explained with Code Examples</a>
      </p><p>In qualsiasi linguaggio di programmazione, le funzioni facilitano la <em>riutilizzabilità del codice</em>. In poche parole, quando vuoi fare qualcosa ripetutamente puoi definire qualcosa come una funzione e chiamare quella funzione ogni volta che ne hai bisogno.</p><p>In questo tutorial, impareremo di più sulle funzioni definite dall'utente in Python.</p><p>Quando hai iniziato a programmare in Python, avrai dovuto usare la funzione integrata <code>print()</code> nel tuo programma <code>Hello World!</code> 😀 e la funzione <code>input()</code> per leggere gli input forniti dall'utente.</p><p>Fintanto che sai come <em>usare </em>queste funzioni, non devi preoccuparti di come sono state implementate. </p><p>Nell'ambito della programmazione, ciò viene chiamato <em>astrazione</em>. Ti permette di usare delle funzioni chiamandole con gli argomenti richiesti, senza doverti preoccupare di come funzionino effettivamente.</p><p>Ci sono moltissime funzioni integrate in Python. In questo articolo, vedremo come definire e usare delle funzioni scritte da noi. Iniziamo!</p><h2 id="sintassi-delle-funzioni-di-python"><strong>Sintassi delle Funzioni di Python</strong></h2><p>Il seguente blocco di codice mostra la sintassi generale che serve a definire una funzione in Python:</p><pre><code class="language-python">def nome_funzione(parametri):
    # Quello che fa la funzione va qui
    return risultato </code></pre><ul><li>Devi usare la parola chiave <code>def</code> , dare un nome alla funzione seguito da un paio di parentesi, e chiudere la riga con i due punti (:).</li><li>Se la tua funzione prende degli argomenti, i nomi degli argomenti (parametri) vengono menzionati all'interno delle parentesi.</li><li>Nota bene che nella <em>definizione di funzione</em>, gli argomenti che la tua funzione utilizza vengono chiamati <em>parametri</em>.</li><li>Quando chiami la funzione specificando dei valori per questi parametri, essi vengono chiamati <em>argomenti </em>o <em>parametri effettivi</em>. Questo perché, nella <em>chiamata della funzione</em>, gli <em>argomenti </em>sono i valori dei parametri della funzione.</li><li>Dopodiché, inizi un blocco rientrato. Esso sarà il corpo della funzione che descrive che cosa fa la tua funzione.</li><li>C'è una dichiarazione <code>return</code> che restituisce il risultato dell'operazione eseguita sugli argomenti. La dichiarazione <code>return</code> restituisce il comando al punto in cui la funzione è stata originariamente chiamata.</li></ul><p>Nota che gli argomenti e la dichiarazione <code>return</code> sono opzionali. Ciò significa che potresti avere una funzione che non prende <em>nessun argomento</em>, e <em>non restituisce niente</em>. 😀</p><p>Proviamo ora a capire ciò che è stato detto sopra usando dei semplici esempi.</p><h2 id="come-creare-una-semplice-funzione-in-python"><strong>Come Creare una Semplice Funzione in Python</strong></h2><p>Creiamo ora una semplice funzione di Python che saluta l'utente, come mostrato di seguito:</p><pre><code class="language-python">def my_func():
  print("Ciao! Spero che tu stia bene")

</code></pre><p>Come puoi vedere, la funzione <code>my_func()</code>:</p><ul><li>non prende argomenti,</li><li>non restituisce nulla, e</li><li>stampa <code>"Ciao! Spero che tu stia bene"</code> ogni volta che viene <em>chiamata</em>.</li></ul><p>Nota che la definizione di funzione in alto è inerte finché la funzione non viene attivata o chiamata. Facciamo una prova e chiamiamo la funzione <code>my_func()</code> e controlliamo il suo output.</p><pre><code class="language-python">my_func()

# Output
Ciao! Spero che tu stia bene</code></pre><h2 id="come-creare-una-funzione-con-argomenti-in-python"><strong>Come Creare una Funzione con Argomenti in Python</strong></h2><p>Adesso modificheremo la funzione <code>my_func()</code> così che includa il <code>nome</code> e la <code>città</code> dell'utente.</p><pre><code class="language-python">def my_func(nome, città):
  print(f"Ciao {nome}! Vieni da {città}?")</code></pre><p>Possiamo chiamare <code>my_func()</code> passando due stringhe per il <code>nome</code> e la <code>città</code> dell'utente, come mostrato in basso.</p><pre><code class="language-python">my_func("Jane","Parigi")

# Output
Ciao Jane! Vieni da Parigi?</code></pre><p>Cosa succede se inserisci prima la <code>città</code> e poi il <code>nome</code>? Scopriamolo.</p><pre><code class="language-python">my_func("Roma","Robert")

# Output
Ciao Roma! Vieni da Robert?</code></pre><p>Otteniamo <code>Ciao Roma! Vieni da Robert?</code> – e non ha senso! 🙂Che cosa causa questo problema?</p><p>Gli argomenti passati nella chiamata della funzione sono <em>argomenti posizionali</em>. Ciò significa che il primo argomento nella chiamata di funzione è usato come valore del primo parametro (<code>nome</code>) e il secondo argomento nella chiamata di funzione è usato come valore del secondo parametro (<code>città</code>).</p><p>Osserva il blocco di codice in basso. Invece di specificare solo gli argomenti, abbiamo menzionato i parametri e il valore che prendono.</p><pre><code class="language-python">my_func(città="Roma",nome="Robert")

# Output
Ciao Robert! Vieni da Roma?</code></pre><p>Questi sono chiamati <em>argomenti a parola chiave</em>. L'ordine degli argomenti nella chiamata della funzione non è importante a patto che i nomi dei parametri siano corretti.</p><h2 id="come-creare-una-funzione-con-argomenti-predefiniti-in-python"><strong>Come Creare una Funzione con Argomenti Predefiniti in Python</strong></h2><p>E se avessimo determinati parametri che assumono uno specifico valore la maggior parte delle volte in cui viene chiamata la funzione?</p><p>Non esiste un modo migliore di chiamare la funzione specificando sempre lo stesso valore per un parametro in particolare?</p><p>Certo che esiste, ed è a questo che servono i <code>default arguments</code> (argomenti predefiniti)! 😀</p><p>Creiamo una funzione <code>total_calc()</code> che ci aiuta a calcolare e visualizzare il totale da pagare al ristorante. Dati un <code>conto</code> e la percentuale del <code>conto</code> che scegli di lasciare come mancia (<code>perc_mancia</code>), questa funzione calcola il totale da pagare.</p><p>Nota che la definizione della funzione include il valore predefinito del parametro <code>perc_mancia</code> da usare quando l'utente non specifica una percentuale di mancia.</p><p>Esegui il blocco di codice in basso.👇🏽 Ora la tua funzione è pronta!</p><pre><code class="language-python">def total_calc(conto, perc_mancia=10):
  totale = conto * (1 + 0.01*perc_mancia)
  totale = round(totale, 2)
  print(f"Si prega di pagare ${totale}")</code></pre><p>Ora chiamiamo la funzione in modi diversi. Il blocco di codice in basso mostra le seguenti situazioni:</p><ul><li>Quando chiami la funzione <code>total_calc</code> specificando solo il <code>conto</code>, in automatico viene usata la percentuale di mancia del 10%.</li><li>Quando specifichi esplicitamente la percentuale di mancia, viene usata la percentuale specificata nella chiamata di funzione.</li></ul><pre><code class="language-python"># specifica solo il conto
# viene usato solo il valore predefinito della percentuale di mancia

 total_calc(150)
 # Output
 Si prega di pagare $165.0
 
 # specifica sia il conto che una percentuale di mancia a scelta
 # viene usata la percentuale di mancia specificata nella chiamata di funzione
 
 total_calc(200,15)
 # Output
 Si prega di pagare $230.0
 
 total_calc(167,7.5)
 # Output
 Si prega di pagare $179.53
 </code></pre><h2 id="come-creare-una-funzione-che-restituisce-un-valore-in-python"><strong>Come Creare una Funzione che Restituisce un Valore in Python</strong></h2><p>Fino ad ora abbiamo creato solo funzioni che possono prendere o non prendere argomenti e non restituiscono nulla. Adesso, creiamo una semplice funzione che restituisce il volume di un cuboide dati la <code>lunghezza</code>, la <code>larghezza</code> e l'<code>altezza</code>.</p><pre><code class="language-python">def volume_di_cuboide(lunghezza,larghezza,altezza):
  return lunghezza*larghezza*altezza
  
  </code></pre><p>Ricorda che la parola chiave <code>return</code> restituisce il comando al punto in cui la funzione è stata chiamata. La chiamata di funzione viene restituita dal <code>return value</code> (valore restituito) dalla funzione.</p><p>Chiamiamo la funzione <code>volume_di_cuboide()</code> con gli argomenti di dimensione necessari, come mostrato nel blocco di codice in basso. Fai caso al modo in cui usiamo la variabile <code>volume</code> per immagazzinare il valore restituito dalla funzione.</p><pre><code>volume = volume_di_cuboide(5.5,20,6)
print(f"Il volume del cuboide è di {volume} unità cubiche")

# Output
Il volume del cuboide è di 660.0 unità cubiche</code></pre><h2 id="come-creare-una-funzione-che-restituisce-molteplici-valori-in-python"><strong>Come Creare una Funzione che Restituisce Molteplici Valori in Python</strong></h2><p>Negli esempi che abbiamo fatto prima, la funzione <code>volume_di_cuboide()</code> restituiva un solo valore, ossia il volume del cuboide date le sue dimensioni. Vediamo come possiamo far restituire molteplici valori a una funzione.</p><ul><li>Per far restituire molteplici valori a una funzione, dobbiamo semplicemente specificare i valori da restituire, separati da una virgola.</li><li>In automatico, la funzione restituisce i valori come tupla. Se ci sono <code>N</code> valori di ritorno, otterremo una tupla di dimensione <code>N</code>.</li></ul><p>Creiamo una semplice funzione <code>cubo()</code> che restituisce il volume e l'area di superficie totale di un cubo, data la lunghezza del suo spigolo.</p><pre><code class="language-python">def cubo(spigolo):
  volume = spigolo **3
  area_superficie = 6 * (spigolo**2)
  return volume, area_superficie</code></pre><p>Per verificare che sia stata restituita una tupla, immagazziniamola in una variabile <code>valori_restituiti</code>, come mostrato in basso:</p><pre><code>valori_restituiti = cubo(8)
print(valori_restituiti)

# Output
(512, 384)</code></pre><p>Adesso, possiamo <em>spacchettare la tupla</em> e inserire i valori in due variabili diverse.</p><pre><code>volume, area = cubo(6.5)
print(f"Il volume del cubo è di {volume} unità cubiche e l'area di superficie totale è di {area} unità quadrate.")

# Outputs
Il volume del cubo 274.625 è di unità cubiche e l'area di superficie totale è di 253.5 unità quadrate</code></pre><h2 id="come-creare-una-funzione-che-prende-un-numero-variabile-di-argomenti-in-python"><strong>Come Creare una Funzione che Prende un Numero Variabile di Argomenti in Python</strong></h2><p>Cominciamo ponendoci alcune domande:</p><ul><li>E se non sapessimo in anticipo il numero esatto di argomenti che ci servono?</li><li>Possiamo creare funzioni che lavorano con un numero variabile di argomenti?</li></ul><p>La risposta è sì! E creeremo una funzione del genere proprio adesso.</p><p>Creiamo una semplice funzione <code>my_var_sum()</code> che restituisce la somma di tutti i numeri passati come argomento. Tuttavia, il numero di argomenti potrebbe essere diverso ogni volta che chiamiamo la funzione.</p><p>Nota come la definizione di funzione adesso ha <code>*args</code> invece di avere semplicemente il nome del parametro. Nel corpo della funzione, iteriamo attraverso <code>args</code> finché non abbiamo usato tutti gli argomenti. La funzione <code>my_var_sum</code> restituisce la somma di tutti i numeri passati come argomento.</p><pre><code class="language-python">def my_var_sum(*args):
  somma = 0
  for arg in args:
    somma += arg
  return somma</code></pre><p>Adesso chiamiamo la funzione <code>my_var_sum()</code> con un numero diverso di argomenti ogni volta e controlliamo velocemente che le risposte restituite siano corrette! 🙂</p><pre><code class="language-python"># Esempio 1 con 4 numeri
somma = my_var_sum(99,10,54,23)
print(f"La somma dei tuoi numeri è {somma}")
# Output
La somma dei tuoi numeri è 186

# Esempio 2 con 3 numeri
somma = my_var_sum(9,87,45)
print(f"La somma dei tuoi numeri è {somma}")
# Output
La somma dei tuoi numeri è 141

# Esempio 3 con 6 numeri
somma = my_var_sum(5,21,36,79,45,65)
print(f"La somma dei tuoi numeri è {somma}")
# Output
La somma dei tuoi numeri è 251</code></pre><h2 id="-un-veloce-riepilogo"><strong>⌛ Un Veloce Riepilogo</strong></h2><p>Riassumiamo velocemente ciò di cui abbiamo parlato. In questo tutorial abbiamo imparato:</p><ul><li>come definire delle funzioni,</li><li>come passare argomenti ad una funzione,</li><li>come creare funzioni con argomenti predefiniti e con un numero variabile di argomenti, e</li><li>come creare una funzione che restituisca dei valori.</li></ul><p>Spero che ti sia piaciuto leggere questo articolo. Grazie per aver letto. Come sempre, alla prossima! 😀</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
