<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://wiki.golem.linux.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Malatext</id>
	<title>GolemWiki - Contributi utente [it]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.golem.linux.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Malatext"/>
	<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/Speciale:Contributi/Malatext"/>
	<updated>2026-06-09T09:29:15Z</updated>
	<subtitle>Contributi utente</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Groff&amp;diff=9947</id>
		<title>Groff</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Groff&amp;diff=9947"/>
		<updated>2026-04-14T23:06:05Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Groff o GNU troff è un sistema per creare documenti partendo da file di testo molto più leggero di LaTeX. Su questa pagina verrà usato il pacchetto di macro ''ms'', gli altri pacchetti sono ''man'', ''mdoc'', ''me'', ''mm'' e ''mom''. Le macro ''ms'' sono buone per scrivere reports, lettere, libri, ma anche papers. Il file su cui il documento verrà scritto ha tipicamente l'estensione ''.ms'' e inizia con la copertina:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Groff&amp;quot;&amp;gt;&lt;br /&gt;
.TL&lt;br /&gt;
Titolo&lt;br /&gt;
.AU&lt;br /&gt;
Autore&lt;br /&gt;
.AB&lt;br /&gt;
Abstract&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ci sono altre cose che possono essere messe nella copertina, ma potete limitarvi a titolo e autore. Il documento continua con sezioni, sottosezioni e paragrafi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Groff&amp;quot;&amp;gt;&lt;br /&gt;
.NH&lt;br /&gt;
Sezione&lt;br /&gt;
.NH 2&lt;br /&gt;
Sottosezione&lt;br /&gt;
.PP&lt;br /&gt;
paragrafo con prima riga indentata&lt;br /&gt;
.NH 2&lt;br /&gt;
Altra sottosezione&lt;br /&gt;
.LP&lt;br /&gt;
paragrafo senza indentazione&lt;br /&gt;
.NH&lt;br /&gt;
Sezione 2&lt;br /&gt;
.PP&lt;br /&gt;
fine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Category:Howto]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Groff&amp;diff=9946</id>
		<title>Groff</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Groff&amp;diff=9946"/>
		<updated>2026-04-14T22:28:09Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Groff o GNU troff è un sistema per creare documenti partendo da file di testo molto più leggero di LaTeX. Su questa pagina verrà usato il pacchetto di macro ''ms'', gli altri pacchetti sono ''man'', ''mdoc'', ''me'', ''mm'' e ''mom''. Le macro ''ms'' sono buone per scrivere reports, lettere, libri, ma anche papers. Il file su cui il documento verrà scritto ha tipicamente l'estensione ''.ms'' e inizia con la copertina:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Groff&amp;quot;&amp;gt;&lt;br /&gt;
.TL&lt;br /&gt;
Titolo&lt;br /&gt;
.AU&lt;br /&gt;
Autore&lt;br /&gt;
.AB&lt;br /&gt;
Abstract&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ci sono altre cose che possono essere messe nella copertina, ma potete limitarvi a titolo e autore. Il documento continua con sezioni, sottosezioni e paragrafi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Groff&amp;quot;&amp;gt;&lt;br /&gt;
.NH&lt;br /&gt;
Sezione&lt;br /&gt;
.NH 2&lt;br /&gt;
Sottosezione&lt;br /&gt;
.PP&lt;br /&gt;
paragrafo con prima riga indentata&lt;br /&gt;
.NH 2&lt;br /&gt;
Altra sottosezione&lt;br /&gt;
.LP&lt;br /&gt;
paragrafo senza indentazione&lt;br /&gt;
.NH&lt;br /&gt;
Sezione 2&lt;br /&gt;
.PP&lt;br /&gt;
fine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Groff&amp;diff=9945</id>
		<title>Groff</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Groff&amp;diff=9945"/>
		<updated>2026-04-14T22:16:46Z</updated>

		<summary type="html">&lt;p&gt;Malatext: Creata pagina con &amp;quot;Groff o GNU troff è un sistema per creare documenti partendo da file di testo molto più leggero di LaTeX. Su questa pagina verrà usato il pacchetto di macro ''ms'', gli alt...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Groff o GNU troff è un sistema per creare documenti partendo da file di testo molto più leggero di LaTeX. Su questa pagina verrà usato il pacchetto di macro ''ms'', gli altri pacchetti sono ''man'', ''mdoc'', ''me'', ''mm'' e ''mom''. Le macro ''ms'' sono buone per scrivere reports, lettere, libri, ma anche papers. Il file su cui il documento verrà scritto ha tipicamente l'estensione ''.ms'' e inizia con la copertina:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Troff&amp;quot;&amp;gt;&lt;br /&gt;
.TL&lt;br /&gt;
Titolo&lt;br /&gt;
.AU&lt;br /&gt;
Autore&lt;br /&gt;
.AB&lt;br /&gt;
Abstract&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ci sono altre cose che possono essere messe nella copertina, ma potete limitarvi a titolo e autore. Il documento continua con sezioni, sottosezioni e paragrafi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Troff&amp;quot;&amp;gt;&lt;br /&gt;
.NH&lt;br /&gt;
Sezione&lt;br /&gt;
.NH 2&lt;br /&gt;
Sottosezione&lt;br /&gt;
.PP&lt;br /&gt;
paragrafo con prima riga indentata&lt;br /&gt;
.NH 2&lt;br /&gt;
Altra sottosezione&lt;br /&gt;
.LP&lt;br /&gt;
paragrafo senza indentazione&lt;br /&gt;
.NH&lt;br /&gt;
Sezione 2&lt;br /&gt;
.PP&lt;br /&gt;
fine&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9795</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9795"/>
		<updated>2026-03-14T16:09:10Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Note per l'amministratore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Matrix in due parole ==&lt;br /&gt;
[[Image:Federazione.png|right|200px]]&lt;br /&gt;
&lt;br /&gt;
[https://matrix.org/ Matrix] è un sistema di messaggistica federato e decentralizzato.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Matrix è in fase di sperimentazione al GOLEM: le informazioni che seguono, relative al nostro servizio, sono soggette a cambiamenti senza preavviso, e l'homeserver potrebbe divenire irraggiungibile in qualsiasi momento. Non si fornisce alcuna garanzia.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Per accedere alle stanze del GOLEM:&lt;br /&gt;
&lt;br /&gt;
# unirsi alla stanza pubblica &amp;lt;code&amp;gt;#presentazione:golem.linux.it&amp;lt;/code&amp;gt; e presentarsi&lt;br /&gt;
# una volta presentati, un amministratore vi inviterà nello spazio privato&lt;br /&gt;
&lt;br /&gt;
Se non si ha già Matrix:&lt;br /&gt;
# registrare un account su un server (su [https://matrix.org/try-matrix/ matrix.org] è gratuito)&lt;br /&gt;
# installare un client, per esempio [https://matrix.org/ecosystem/clients/element-x/ Element] o [https://matrix.org/ecosystem/clients/fluffychat/ FluffyChat]&lt;br /&gt;
# entrare nella stanza pubblica e presentarsi, come indicato sopra&lt;br /&gt;
&lt;br /&gt;
Nota: le stanze private del GOLEM non sono crittografate.&lt;br /&gt;
&lt;br /&gt;
== Maggiori informazioni ==&lt;br /&gt;
&lt;br /&gt;
* '''Federazione''': ogni utente può scegliere un ''homeserver'' su cui registrare il proprio account, allo stesso modo in cui può scegliere il provider per la propria posta elettronica. Da ogni homeserver è possibile raggiungere qualunque altro utente della rete Matrix, anche se si trova su un altro homeserver, allo stesso modo in cui funziona la posta elettronica.&lt;br /&gt;
** Se un homeserver diventa non raggiungibile (per questioni tecniche, legali o di censura), la rete continua a funzionare in modo indipendente.&lt;br /&gt;
** Gli utenti sono identificati col formato &amp;lt;code&amp;gt;@utente:homeserver.tld&amp;lt;/code&amp;gt;, in modo simile alle email.&lt;br /&gt;
** Il più grande homeserver è &amp;lt;code&amp;gt;matrix.org&amp;lt;/code&amp;gt;, fornito direttamente dalla Element Foundation. Al fine di favorire la decentralizzazione, è consigliabile scegliere un provider/una comunità affine, e registrare il proprio utente presso un altro homeserver.&lt;br /&gt;
&lt;br /&gt;
* '''Riservatezza''': Matrix include un sistema di crittografia a chiave pubblica end-to-end: le conversazioni possono essere lette solo tramite i dispositivi degli interlocutori. L'autenticità dell'interlocutore può essere verificata avviando una procedura da eseguirsi di persona col proprio interlocutore. I server e qualunque altra terza parte non può accedere ai messaggi. I metadati, tuttavia, sono in chiaro (i server possono sapere tra quali persone avvengono le conversazioni)&lt;br /&gt;
&lt;br /&gt;
== Note per l'amministratore ==&lt;br /&gt;
'''Creare nuovo utente'''&lt;br /&gt;
 docker exec -it chat-synapse-1 register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u &amp;lt;username&amp;gt; -p &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configurare il bridge gruppo Telegram &amp;lt;-&amp;gt; stanza Matrix'''&lt;br /&gt;
&lt;br /&gt;
Il docker-compose.yaml attuale è un adattamento di https://docs.mau.fi/bridges/general/docker-setup.html?bridge=telegram#docker-compose&lt;br /&gt;
&lt;br /&gt;
Una volta cambiata la configurazione del bridge in /var/chat/bridge/config.yml, è necessario fare&lt;br /&gt;
 docker compose restart mautrixbridge&lt;br /&gt;
non c'è bisogno di riavviare gli altri container.&lt;br /&gt;
[[Categoria:Sysop]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9794</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9794"/>
		<updated>2026-03-14T15:48:16Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Note per l'amministratore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Matrix in due parole ==&lt;br /&gt;
[[Image:Federazione.png|right|200px]]&lt;br /&gt;
&lt;br /&gt;
[https://matrix.org/ Matrix] è un sistema di messaggistica federato e decentralizzato.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Matrix è in fase di sperimentazione al GOLEM: le informazioni che seguono, relative al nostro servizio, sono soggette a cambiamenti senza preavviso, e l'homeserver potrebbe divenire irraggiungibile in qualsiasi momento. Non si fornisce alcuna garanzia.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Per accedere alle stanze del GOLEM:&lt;br /&gt;
&lt;br /&gt;
# unirsi alla stanza pubblica &amp;lt;code&amp;gt;#presentazione:golem.linux.it&amp;lt;/code&amp;gt; e presentarsi&lt;br /&gt;
# una volta presentati, un amministratore vi inviterà nello spazio privato&lt;br /&gt;
&lt;br /&gt;
Se non si ha già Matrix:&lt;br /&gt;
# registrare un account su un server (su [https://matrix.org/try-matrix/ matrix.org] è gratuito)&lt;br /&gt;
# installare un client, per esempio [https://matrix.org/ecosystem/clients/element-x/ Element] o [https://matrix.org/ecosystem/clients/fluffychat/ FluffyChat]&lt;br /&gt;
# entrare nella stanza pubblica e presentarsi, come indicato sopra&lt;br /&gt;
&lt;br /&gt;
Nota: le stanze private del GOLEM non sono crittografate.&lt;br /&gt;
&lt;br /&gt;
== Maggiori informazioni ==&lt;br /&gt;
&lt;br /&gt;
* '''Federazione''': ogni utente può scegliere un ''homeserver'' su cui registrare il proprio account, allo stesso modo in cui può scegliere il provider per la propria posta elettronica. Da ogni homeserver è possibile raggiungere qualunque altro utente della rete Matrix, anche se si trova su un altro homeserver, allo stesso modo in cui funziona la posta elettronica.&lt;br /&gt;
** Se un homeserver diventa non raggiungibile (per questioni tecniche, legali o di censura), la rete continua a funzionare in modo indipendente.&lt;br /&gt;
** Gli utenti sono identificati col formato &amp;lt;code&amp;gt;@utente:homeserver.tld&amp;lt;/code&amp;gt;, in modo simile alle email.&lt;br /&gt;
** Il più grande homeserver è &amp;lt;code&amp;gt;matrix.org&amp;lt;/code&amp;gt;, fornito direttamente dalla Element Foundation. Al fine di favorire la decentralizzazione, è consigliabile scegliere un provider/una comunità affine, e registrare il proprio utente presso un altro homeserver.&lt;br /&gt;
&lt;br /&gt;
* '''Riservatezza''': Matrix include un sistema di crittografia a chiave pubblica end-to-end: le conversazioni possono essere lette solo tramite i dispositivi degli interlocutori. L'autenticità dell'interlocutore può essere verificata avviando una procedura da eseguirsi di persona col proprio interlocutore. I server e qualunque altra terza parte non può accedere ai messaggi. I metadati, tuttavia, sono in chiaro (i server possono sapere tra quali persone avvengono le conversazioni)&lt;br /&gt;
&lt;br /&gt;
== Note per l'amministratore ==&lt;br /&gt;
'''Creare nuovo utente'''&lt;br /&gt;
 docker exec -it chat-synapse-1 register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u &amp;lt;username&amp;gt; -p &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configurare il bridge gruppo Telegram &amp;lt;-&amp;gt; stanza Matrix'''&lt;br /&gt;
&lt;br /&gt;
La configurazione attuale è stata adattata a partire da https://docs.mau.fi/bridges/general/docker-setup.html?bridge=telegram#docker-compose&lt;br /&gt;
&lt;br /&gt;
Una volta cambiata la configurazione del bridge in /var/chat/bridge/config.yml, è necessario fare&lt;br /&gt;
 docker compose restart mautrixbridge&lt;br /&gt;
non c'è bisogno di riavviare gli altri container.&lt;br /&gt;
[[Categoria:Sysop]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9793</id>
		<title>Matrix</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Matrix&amp;diff=9793"/>
		<updated>2026-03-14T15:46:35Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Note per l'amministratore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Matrix in due parole ==&lt;br /&gt;
[[Image:Federazione.png|right|200px]]&lt;br /&gt;
&lt;br /&gt;
[https://matrix.org/ Matrix] è un sistema di messaggistica federato e decentralizzato.&lt;br /&gt;
&lt;br /&gt;
{{Note&lt;br /&gt;
|type=attention&lt;br /&gt;
|text=Matrix è in fase di sperimentazione al GOLEM: le informazioni che seguono, relative al nostro servizio, sono soggette a cambiamenti senza preavviso, e l'homeserver potrebbe divenire irraggiungibile in qualsiasi momento. Non si fornisce alcuna garanzia.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Per accedere alle stanze del GOLEM:&lt;br /&gt;
&lt;br /&gt;
# unirsi alla stanza pubblica &amp;lt;code&amp;gt;#presentazione:golem.linux.it&amp;lt;/code&amp;gt; e presentarsi&lt;br /&gt;
# una volta presentati, un amministratore vi inviterà nello spazio privato&lt;br /&gt;
&lt;br /&gt;
Se non si ha già Matrix:&lt;br /&gt;
# registrare un account su un server (su [https://matrix.org/try-matrix/ matrix.org] è gratuito)&lt;br /&gt;
# installare un client, per esempio [https://matrix.org/ecosystem/clients/element-x/ Element] o [https://matrix.org/ecosystem/clients/fluffychat/ FluffyChat]&lt;br /&gt;
# entrare nella stanza pubblica e presentarsi, come indicato sopra&lt;br /&gt;
&lt;br /&gt;
Nota: le stanze private del GOLEM non sono crittografate.&lt;br /&gt;
&lt;br /&gt;
== Maggiori informazioni ==&lt;br /&gt;
&lt;br /&gt;
* '''Federazione''': ogni utente può scegliere un ''homeserver'' su cui registrare il proprio account, allo stesso modo in cui può scegliere il provider per la propria posta elettronica. Da ogni homeserver è possibile raggiungere qualunque altro utente della rete Matrix, anche se si trova su un altro homeserver, allo stesso modo in cui funziona la posta elettronica.&lt;br /&gt;
** Se un homeserver diventa non raggiungibile (per questioni tecniche, legali o di censura), la rete continua a funzionare in modo indipendente.&lt;br /&gt;
** Gli utenti sono identificati col formato &amp;lt;code&amp;gt;@utente:homeserver.tld&amp;lt;/code&amp;gt;, in modo simile alle email.&lt;br /&gt;
** Il più grande homeserver è &amp;lt;code&amp;gt;matrix.org&amp;lt;/code&amp;gt;, fornito direttamente dalla Element Foundation. Al fine di favorire la decentralizzazione, è consigliabile scegliere un provider/una comunità affine, e registrare il proprio utente presso un altro homeserver.&lt;br /&gt;
&lt;br /&gt;
* '''Riservatezza''': Matrix include un sistema di crittografia a chiave pubblica end-to-end: le conversazioni possono essere lette solo tramite i dispositivi degli interlocutori. L'autenticità dell'interlocutore può essere verificata avviando una procedura da eseguirsi di persona col proprio interlocutore. I server e qualunque altra terza parte non può accedere ai messaggi. I metadati, tuttavia, sono in chiaro (i server possono sapere tra quali persone avvengono le conversazioni)&lt;br /&gt;
&lt;br /&gt;
== Note per l'amministratore ==&lt;br /&gt;
'''Creare nuovo utente'''&lt;br /&gt;
 docker exec -it chat-synapse-1 register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u &amp;lt;username&amp;gt; -p &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configurare il bridge gruppo Telegram &amp;lt;-&amp;gt; stanza Matrix'''&lt;br /&gt;
La configurazione attuale è stata adattata a partire da `https://docs.mau.fi/bridges/general/docker-setup.html?bridge=telegram#docker-compose`.&lt;br /&gt;
Una volta cambiata la configurazione del bridge in /var/chat/bridge/config.yml, è necessario fare docker compose restart mautrixbridge, non c'è bisogno di riavviare gli altri container.&lt;br /&gt;
[[Categoria:Sysop]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez6.pdf&amp;diff=9730</id>
		<title>File:Python lez6.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez6.pdf&amp;diff=9730"/>
		<updated>2025-07-01T04:50:39Z</updated>

		<summary type="html">&lt;p&gt;Malatext: Malatext ha caricato una nuova versione di File:Python lez6.pdf.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9729</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9729"/>
		<updated>2025-06-30T21:32:37Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Demo Matplotlib &amp;quot;migliorata&amp;quot; con Pandas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 6 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides] - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 6''' [https://wiki.golem.linux.it/images/0/06/Python_lez6.pdf slides] - ''Lunedì 30 Giugno'': utilizzo della libreria Pandas (https://pandas.pydata.org/)&lt;br /&gt;
&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5, facendo scalare la libreria Pandas alla lezione 6&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==same_pv==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
def same_pv(A, B):&lt;br /&gt;
    m = min(len(A), len(B))&lt;br /&gt;
    return np.arange(m)[A[:m] == B[:m]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Demo Matplotlib =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return np.loadtxt('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                      delimiter=',',&lt;br /&gt;
                      dtype=[('score', 'i4'),&lt;br /&gt;
                             ('race','U20'),&lt;br /&gt;
                             ('back', 'U20')])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(im.shape[0])&lt;br /&gt;
    x = im.argmin(axis = 1)&lt;br /&gt;
    c = im.min(axis = 1)&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def loadattrs():&lt;br /&gt;
    # gli attributi devono essere in ordine!&lt;br /&gt;
    attributes = ('xl', 'str', 'int', 'dex', 'ac', 'ev', 'sh')&lt;br /&gt;
    anything = '.*'&lt;br /&gt;
    return np.fromregex('https://crawl.xtahua.com/crawl/meta/0.33/logfile',&lt;br /&gt;
                        anything + anything.join(':' + s + '=([0-9]+)' for s in attributes) + anything,&lt;br /&gt;
                        dtype=[(s,'i4') for s in attributes])&lt;br /&gt;
&lt;br /&gt;
def plotscatter(d, x, y, minxl = None):&lt;br /&gt;
    if minxl is not None:&lt;br /&gt;
        d = d[d['xl'] &amp;gt;= minxl]&lt;br /&gt;
    plt.scatter(d[x], d[y], c = d['xl'], alpha=0.1)&lt;br /&gt;
&lt;br /&gt;
def strtoidx(strings):&lt;br /&gt;
    d = {n:i for i,n in enumerate(set(strings))}&lt;br /&gt;
    return d, np.array([d[s] for s in strings])&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    img = np.full((data['race'].max()+1, data['back'].max()+1), -1).astype('u4')&lt;br /&gt;
    for score, race, back in data:&lt;br /&gt;
        img[race,back] = min(img[race, back], score)&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    img = np.zeros((data['race'].max()+1, data['back'].max()+1),dtype = 'u4')&lt;br /&gt;
    for _, race, back in data:&lt;br /&gt;
        img[race,back] += 1&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def translate(data):&lt;br /&gt;
    rd, r = strtoidx(data['race'])&lt;br /&gt;
    bd, b = strtoidx(data['back'])&lt;br /&gt;
    arr = np.array(list(zip(data['score'], r, b)),&lt;br /&gt;
                   dtype=[('score','u4'),('race','u4'),('back','u4')])&lt;br /&gt;
    return rd,bd,arr&lt;br /&gt;
&lt;br /&gt;
def plotusage(backgrounds, races, matrix):&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    plt.imshow(matrix)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=[(b if r &amp;gt; 0 else '') for r,b in zip(race, backgrounds)])&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[np.logical_not(cond)]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(rd, bd, matrix, ax):&lt;br /&gt;
    races = ('Minotaur', 'Spriggan', 'Mountain Dwarf')&lt;br /&gt;
    backgrounds = ('Berserker', 'Fighter', 'Enchanter', 'Hexslinger')&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(backgrounds)), np.arange(len(races)))&lt;br /&gt;
    xyh = np.stack((xpos.ravel(), ypos.ravel(),&lt;br /&gt;
                    matrix[np.ix_([rd[r] for r in races],&lt;br /&gt;
                               [bd[b] for b in backgrounds])].ravel()))&lt;br /&gt;
    xyh = xyh[:, xyh[2]&amp;lt;np.array(-1).astype(matrix.dtype)]&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh[0]-0.25, xyh[1]-0.25, 0, 0.5, 0.5, xyh[2])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    rd,bd,arr = translate(data)&lt;br /&gt;
    im1, im2 = tocount(arr), tobest(arr)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(bd.keys(), rd.keys(), im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1[rd['Minotaur']], bd.keys(), 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(rd, bd, im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Demo Matplotlib &amp;quot;migliorata&amp;quot; con Pandas =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return pd.read_csv('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                       names=['score', 'race', 'back'])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(len(im.index))&lt;br /&gt;
    im = im.T.reset_index(drop=True)&lt;br /&gt;
    x = im.idxmin()&lt;br /&gt;
    c = im.min()&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    return data.pivot_table(columns='race', index='back', values='score', aggfunc='min')&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    return data[['race', 'back']].pivot_table(columns='race', index='back', aggfunc=len, fill_value=0)&lt;br /&gt;
&lt;br /&gt;
def plotusage(table):&lt;br /&gt;
    plt.xticks(np.arange(len(table.columns)), table.columns, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(table.index)), table.index)&lt;br /&gt;
    plt.imshow(table)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=backgrounds.where(race &amp;gt; 0, ''))&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[~cond]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(table, ax):&lt;br /&gt;
    races = ['Minotaur', 'Spriggan', 'Mountain Dwarf']&lt;br /&gt;
    backgrounds = ['Berserker', 'Fighter', 'Enchanter', 'Hexslinger']&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(races)), np.arange(len(backgrounds)))&lt;br /&gt;
    xyh = pd.DataFrame({'pos_x':xpos.ravel(), 'pos_y':ypos.ravel(),&lt;br /&gt;
                        'best_score':table.loc[backgrounds, races].to_numpy().ravel()})&lt;br /&gt;
    xyh = xyh[xyh['best_score'].notna()]&lt;br /&gt;
    plt.yticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.xticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh['pos_x']-0.25, xyh['pos_y']-0.25, 0, 0.5, 0.5, xyh['best_score'])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    im1, im2 = tocount(data), tobest(data)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1['Minotaur'], im1.index, 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9728</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9728"/>
		<updated>2025-06-30T18:36:01Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 6 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides] - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 6''' [https://wiki.golem.linux.it/images/0/06/Python_lez6.pdf slides] - ''Lunedì 30 Giugno'': utilizzo della libreria Pandas (https://pandas.pydata.org/)&lt;br /&gt;
&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5, facendo scalare la libreria Pandas alla lezione 6&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==same_pv==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
def same_pv(A, B):&lt;br /&gt;
    m = min(len(A), len(B))&lt;br /&gt;
    return np.arange(m)[A[:m] == B[:m]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Demo Matplotlib =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return np.loadtxt('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                      delimiter=',',&lt;br /&gt;
                      dtype=[('score', 'i4'),&lt;br /&gt;
                             ('race','U20'),&lt;br /&gt;
                             ('back', 'U20')])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(im.shape[0])&lt;br /&gt;
    x = im.argmin(axis = 1)&lt;br /&gt;
    c = im.min(axis = 1)&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def loadattrs():&lt;br /&gt;
    # gli attributi devono essere in ordine!&lt;br /&gt;
    attributes = ('xl', 'str', 'int', 'dex', 'ac', 'ev', 'sh')&lt;br /&gt;
    anything = '.*'&lt;br /&gt;
    return np.fromregex('https://crawl.xtahua.com/crawl/meta/0.33/logfile',&lt;br /&gt;
                        anything + anything.join(':' + s + '=([0-9]+)' for s in attributes) + anything,&lt;br /&gt;
                        dtype=[(s,'i4') for s in attributes])&lt;br /&gt;
&lt;br /&gt;
def plotscatter(d, x, y, minxl = None):&lt;br /&gt;
    if minxl is not None:&lt;br /&gt;
        d = d[d['xl'] &amp;gt;= minxl]&lt;br /&gt;
    plt.scatter(d[x], d[y], c = d['xl'], alpha=0.1)&lt;br /&gt;
&lt;br /&gt;
def strtoidx(strings):&lt;br /&gt;
    d = {n:i for i,n in enumerate(set(strings))}&lt;br /&gt;
    return d, np.array([d[s] for s in strings])&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    img = np.full((data['race'].max()+1, data['back'].max()+1), -1).astype('u4')&lt;br /&gt;
    for score, race, back in data:&lt;br /&gt;
        img[race,back] = min(img[race, back], score)&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    img = np.zeros((data['race'].max()+1, data['back'].max()+1),dtype = 'u4')&lt;br /&gt;
    for _, race, back in data:&lt;br /&gt;
        img[race,back] += 1&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def translate(data):&lt;br /&gt;
    rd, r = strtoidx(data['race'])&lt;br /&gt;
    bd, b = strtoidx(data['back'])&lt;br /&gt;
    arr = np.array(list(zip(data['score'], r, b)),&lt;br /&gt;
                   dtype=[('score','u4'),('race','u4'),('back','u4')])&lt;br /&gt;
    return rd,bd,arr&lt;br /&gt;
&lt;br /&gt;
def plotusage(backgrounds, races, matrix):&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    plt.imshow(matrix)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=[(b if r &amp;gt; 0 else '') for r,b in zip(race, backgrounds)])&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[np.logical_not(cond)]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(rd, bd, matrix, ax):&lt;br /&gt;
    races = ('Minotaur', 'Spriggan', 'Mountain Dwarf')&lt;br /&gt;
    backgrounds = ('Berserker', 'Fighter', 'Enchanter', 'Hexslinger')&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(backgrounds)), np.arange(len(races)))&lt;br /&gt;
    xyh = np.stack((xpos.ravel(), ypos.ravel(),&lt;br /&gt;
                    matrix[np.ix_([rd[r] for r in races],&lt;br /&gt;
                               [bd[b] for b in backgrounds])].ravel()))&lt;br /&gt;
    xyh = xyh[:, xyh[2]&amp;lt;np.array(-1).astype(matrix.dtype)]&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh[0]-0.25, xyh[1]-0.25, 0, 0.5, 0.5, xyh[2])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    rd,bd,arr = translate(data)&lt;br /&gt;
    im1, im2 = tocount(arr), tobest(arr)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(bd.keys(), rd.keys(), im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1[rd['Minotaur']], bd.keys(), 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(rd, bd, im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Demo Matplotlib &amp;quot;migliorata&amp;quot; con Pandas =&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return pd.read_csv('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                       names=['score', 'race', 'back'])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(len(im.index))&lt;br /&gt;
    im = im.T.reset_index(drop=True)&lt;br /&gt;
    x = im.idxmin()&lt;br /&gt;
    c = im.min()&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    return data.pivot_table(columns='race', index='back', values='score', aggfunc='min')&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    return data[['race', 'back']].pivot_table(columns='race', index='back', aggfunc=len, fill_value=0)&lt;br /&gt;
&lt;br /&gt;
def plotusage(table):&lt;br /&gt;
    plt.xticks(np.arange(len(table.columns)), table.columns, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(table.index)), table.index)&lt;br /&gt;
    plt.imshow(table)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=backgrounds.where(race &amp;gt; 0, ''))&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[~cond]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(table, ax):&lt;br /&gt;
    races = ['Minotaur', 'Spriggan', 'Mountain Dwarf']&lt;br /&gt;
    backgrounds = ['Berserker', 'Fighter', 'Enchanter', 'Hexslinger']&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(races)), np.arange(len(backgrounds)))&lt;br /&gt;
    xyh = pd.DataFrame({'pos_x':xpos.ravel(), 'pos_y':ypos.ravel(),&lt;br /&gt;
                        'best_score':table.loc[backgrounds, races].to_numpy().ravel()})&lt;br /&gt;
    xyh = xyh[xyh['best_score'].notna()]&lt;br /&gt;
    plt.yticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.xticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh['pos_x']-0.25, xyh['pos_y']-0.25, 0, 0.5, 0.5, xyh['best_score'])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    im1, im2 = tocount(data), tobest(data)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1['Minotaur'], im1.index, 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez6.pdf&amp;diff=9727</id>
		<title>File:Python lez6.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez6.pdf&amp;diff=9727"/>
		<updated>2025-06-30T18:34:19Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9726</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9726"/>
		<updated>2025-06-26T10:23:55Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* same_pv */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides] - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 6''' - ''Lunedì 30 Giugno'': utilizzo della libreria Pandas (https://pandas.pydata.org/)&lt;br /&gt;
&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5, facendo scalare la libreria Pandas alla lezione 6&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==same_pv==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
def same_pv(A, B):&lt;br /&gt;
    m = min(len(A), len(B))&lt;br /&gt;
    return np.arange(m)[A[:m] == B[:m]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Demo Matplotlib =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return np.loadtxt('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                      delimiter=',',&lt;br /&gt;
                      dtype=[('score', 'i4'),&lt;br /&gt;
                             ('race','U20'),&lt;br /&gt;
                             ('back', 'U20')])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(im.shape[0])&lt;br /&gt;
    x = im.argmin(axis = 1)&lt;br /&gt;
    c = im.min(axis = 1)&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def loadattrs():&lt;br /&gt;
    # gli attributi devono essere in ordine!&lt;br /&gt;
    attributes = ('xl', 'str', 'int', 'dex', 'ac', 'ev', 'sh')&lt;br /&gt;
    anything = '.*'&lt;br /&gt;
    return np.fromregex('https://crawl.xtahua.com/crawl/meta/0.33/logfile',&lt;br /&gt;
                        anything + anything.join(':' + s + '=([0-9]+)' for s in attributes) + anything,&lt;br /&gt;
                        dtype=[(s,'i4') for s in attributes])&lt;br /&gt;
&lt;br /&gt;
def plotscatter(d, x, y, minxl = None):&lt;br /&gt;
    if minxl is not None:&lt;br /&gt;
        d = d[d['xl'] &amp;gt;= minxl]&lt;br /&gt;
    plt.scatter(d[x], d[y], c = d['xl'], alpha=0.1)&lt;br /&gt;
&lt;br /&gt;
def strtoidx(strings):&lt;br /&gt;
    d = {n:i for i,n in enumerate(set(strings))}&lt;br /&gt;
    return d, np.array([d[s] for s in strings])&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    img = np.full((data['race'].max()+1, data['back'].max()+1), -1).astype('u4')&lt;br /&gt;
    for score, race, back in data:&lt;br /&gt;
        img[race,back] = min(img[race, back], score)&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    img = np.zeros((data['race'].max()+1, data['back'].max()+1),dtype = 'u4')&lt;br /&gt;
    for _, race, back in data:&lt;br /&gt;
        img[race,back] += 1&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def translate(data):&lt;br /&gt;
    rd, r = strtoidx(data['race'])&lt;br /&gt;
    bd, b = strtoidx(data['back'])&lt;br /&gt;
    arr = np.array(list(zip(data['score'], r, b)),&lt;br /&gt;
                   dtype=[('score','u4'),('race','u4'),('back','u4')])&lt;br /&gt;
    return rd,bd,arr&lt;br /&gt;
&lt;br /&gt;
def plotusage(backgrounds, races, matrix):&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    plt.imshow(matrix)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=[(b if r &amp;gt; 0 else '') for r,b in zip(race, backgrounds)])&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[np.logical_not(cond)]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(rd, bd, matrix, ax):&lt;br /&gt;
    races = ('Minotaur', 'Spriggan', 'Mountain Dwarf')&lt;br /&gt;
    backgrounds = ('Berserker', 'Fighter', 'Enchanter', 'Hexslinger')&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(backgrounds)), np.arange(len(races)))&lt;br /&gt;
    xyh = np.stack((xpos.ravel(), ypos.ravel(),&lt;br /&gt;
                    matrix[np.ix_([rd[r] for r in races],&lt;br /&gt;
                               [bd[b] for b in backgrounds])].ravel()))&lt;br /&gt;
    xyh = xyh[:, xyh[2]&amp;lt;np.array(-1).astype(matrix.dtype)]&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh[0]-0.25, xyh[1]-0.25, 0, 0.5, 0.5, xyh[2])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    rd,bd,arr = translate(data)&lt;br /&gt;
    im1, im2 = tocount(arr), tobest(arr)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(bd.keys(), rd.keys(), im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1[rd['Minotaur']], bd.keys(), 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(rd, bd, im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9723</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9723"/>
		<updated>2025-06-17T22:43:24Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides] - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 6''' - ''Lunedì 30 Giugno'': utilizzo della libreria Pandas (https://pandas.pydata.org/)&lt;br /&gt;
&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5, facendo scalare la libreria Pandas alla lezione 6&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==same_pv==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
def same_pv(A, B):&lt;br /&gt;
    m = min(len(A), len(B))&lt;br /&gt;
    return A[:m][A[:m] == B[:m]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Demo Matplotlib =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return np.loadtxt('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                      delimiter=',',&lt;br /&gt;
                      dtype=[('score', 'i4'),&lt;br /&gt;
                             ('race','U20'),&lt;br /&gt;
                             ('back', 'U20')])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(im.shape[0])&lt;br /&gt;
    x = im.argmin(axis = 1)&lt;br /&gt;
    c = im.min(axis = 1)&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def loadattrs():&lt;br /&gt;
    # gli attributi devono essere in ordine!&lt;br /&gt;
    attributes = ('xl', 'str', 'int', 'dex', 'ac', 'ev', 'sh')&lt;br /&gt;
    anything = '.*'&lt;br /&gt;
    return np.fromregex('https://crawl.xtahua.com/crawl/meta/0.33/logfile',&lt;br /&gt;
                        anything + anything.join(':' + s + '=([0-9]+)' for s in attributes) + anything,&lt;br /&gt;
                        dtype=[(s,'i4') for s in attributes])&lt;br /&gt;
&lt;br /&gt;
def plotscatter(d, x, y, minxl = None):&lt;br /&gt;
    if minxl is not None:&lt;br /&gt;
        d = d[d['xl'] &amp;gt;= minxl]&lt;br /&gt;
    plt.scatter(d[x], d[y], c = d['xl'], alpha=0.1)&lt;br /&gt;
&lt;br /&gt;
def strtoidx(strings):&lt;br /&gt;
    d = {n:i for i,n in enumerate(set(strings))}&lt;br /&gt;
    return d, np.array([d[s] for s in strings])&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    img = np.full((data['race'].max()+1, data['back'].max()+1), -1).astype('u4')&lt;br /&gt;
    for score, race, back in data:&lt;br /&gt;
        img[race,back] = min(img[race, back], score)&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    img = np.zeros((data['race'].max()+1, data['back'].max()+1),dtype = 'u4')&lt;br /&gt;
    for _, race, back in data:&lt;br /&gt;
        img[race,back] += 1&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def translate(data):&lt;br /&gt;
    rd, r = strtoidx(data['race'])&lt;br /&gt;
    bd, b = strtoidx(data['back'])&lt;br /&gt;
    arr = np.array(list(zip(data['score'], r, b)),&lt;br /&gt;
                   dtype=[('score','u4'),('race','u4'),('back','u4')])&lt;br /&gt;
    return rd,bd,arr&lt;br /&gt;
&lt;br /&gt;
def plotusage(backgrounds, races, matrix):&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    plt.imshow(matrix)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=[(b if r &amp;gt; 0 else '') for r,b in zip(race, backgrounds)])&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[np.logical_not(cond)]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(rd, bd, matrix, ax):&lt;br /&gt;
    races = ('Minotaur', 'Spriggan', 'Mountain Dwarf')&lt;br /&gt;
    backgrounds = ('Berserker', 'Fighter', 'Enchanter', 'Hexslinger')&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(backgrounds)), np.arange(len(races)))&lt;br /&gt;
    xyh = np.stack((xpos.ravel(), ypos.ravel(),&lt;br /&gt;
                    matrix[np.ix_([rd[r] for r in races],&lt;br /&gt;
                               [bd[b] for b in backgrounds])].ravel()))&lt;br /&gt;
    xyh = xyh[:, xyh[2]&amp;lt;np.array(-1).astype(matrix.dtype)]&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh[0]-0.25, xyh[1]-0.25, 0, 0.5, 0.5, xyh[2])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    rd,bd,arr = translate(data)&lt;br /&gt;
    im1, im2 = tocount(arr), tobest(arr)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(bd.keys(), rd.keys(), im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1[rd['Minotaur']], bd.keys(), 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(rd, bd, im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9722</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9722"/>
		<updated>2025-06-17T13:29:13Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides] - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 6''' - ''Lunedì 23 Giugno'': utilizzo della libreria Pandas (https://pandas.pydata.org/)&lt;br /&gt;
&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5, facendo scalare la libreria Pandas alla lezione 6&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==same_pv==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
def same_pv(A, B):&lt;br /&gt;
    m = min(len(A), len(B))&lt;br /&gt;
    return A[:m][A[:m] == B[:m]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Demo Matplotlib =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return np.loadtxt('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                      delimiter=',',&lt;br /&gt;
                      dtype=[('score', 'i4'),&lt;br /&gt;
                             ('race','U20'),&lt;br /&gt;
                             ('back', 'U20')])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(im.shape[0])&lt;br /&gt;
    x = im.argmin(axis = 1)&lt;br /&gt;
    c = im.min(axis = 1)&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def loadattrs():&lt;br /&gt;
    # gli attributi devono essere in ordine!&lt;br /&gt;
    attributes = ('xl', 'str', 'int', 'dex', 'ac', 'ev', 'sh')&lt;br /&gt;
    anything = '.*'&lt;br /&gt;
    return np.fromregex('https://crawl.xtahua.com/crawl/meta/0.33/logfile',&lt;br /&gt;
                        anything + anything.join(':' + s + '=([0-9]+)' for s in attributes) + anything,&lt;br /&gt;
                        dtype=[(s,'i4') for s in attributes])&lt;br /&gt;
&lt;br /&gt;
def plotscatter(d, x, y, minxl = None):&lt;br /&gt;
    if minxl is not None:&lt;br /&gt;
        d = d[d['xl'] &amp;gt;= minxl]&lt;br /&gt;
    plt.scatter(d[x], d[y], c = d['xl'], alpha=0.1)&lt;br /&gt;
&lt;br /&gt;
def strtoidx(strings):&lt;br /&gt;
    d = {n:i for i,n in enumerate(set(strings))}&lt;br /&gt;
    return d, np.array([d[s] for s in strings])&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    img = np.full((data['race'].max()+1, data['back'].max()+1), -1).astype('u4')&lt;br /&gt;
    for score, race, back in data:&lt;br /&gt;
        img[race,back] = min(img[race, back], score)&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    img = np.zeros((data['race'].max()+1, data['back'].max()+1),dtype = 'u4')&lt;br /&gt;
    for _, race, back in data:&lt;br /&gt;
        img[race,back] += 1&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def translate(data):&lt;br /&gt;
    rd, r = strtoidx(data['race'])&lt;br /&gt;
    bd, b = strtoidx(data['back'])&lt;br /&gt;
    arr = np.array(list(zip(data['score'], r, b)),&lt;br /&gt;
                   dtype=[('score','u4'),('race','u4'),('back','u4')])&lt;br /&gt;
    return rd,bd,arr&lt;br /&gt;
&lt;br /&gt;
def plotusage(backgrounds, races, matrix):&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    plt.imshow(matrix)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=[(b if r &amp;gt; 0 else '') for r,b in zip(race, backgrounds)])&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[np.logical_not(cond)]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(rd, bd, matrix, ax):&lt;br /&gt;
    races = ('Minotaur', 'Spriggan', 'Mountain Dwarf')&lt;br /&gt;
    backgrounds = ('Berserker', 'Fighter', 'Enchanter', 'Hexslinger')&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(backgrounds)), np.arange(len(races)))&lt;br /&gt;
    xyh = np.stack((xpos.ravel(), ypos.ravel(),&lt;br /&gt;
                    matrix[np.ix_([rd[r] for r in races],&lt;br /&gt;
                               [bd[b] for b in backgrounds])].ravel()))&lt;br /&gt;
    xyh = xyh[:, xyh[2]&amp;lt;np.array(-1).astype(matrix.dtype)]&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh[0]-0.25, xyh[1]-0.25, 0, 0.5, 0.5, xyh[2])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    rd,bd,arr = translate(data)&lt;br /&gt;
    im1, im2 = tocount(arr), tobest(arr)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(bd.keys(), rd.keys(), im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1[rd['Minotaur']], bd.keys(), 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(rd, bd, im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9721</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9721"/>
		<updated>2025-06-17T13:21:25Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* raggruppa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides] - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 6''' - ''Lunedì 23 Giugno'': utilizzo della libreria Pandas (https://pandas.pydata.org/)&lt;br /&gt;
&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==same_pv==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
def same_pv(A, B):&lt;br /&gt;
    m = min(len(A), len(B))&lt;br /&gt;
    return A[:m][A[:m] == B[:m]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Demo Matplotlib =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return np.loadtxt('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                      delimiter=',',&lt;br /&gt;
                      dtype=[('score', 'i4'),&lt;br /&gt;
                             ('race','U20'),&lt;br /&gt;
                             ('back', 'U20')])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(im.shape[0])&lt;br /&gt;
    x = im.argmin(axis = 1)&lt;br /&gt;
    c = im.min(axis = 1)&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def loadattrs():&lt;br /&gt;
    # gli attributi devono essere in ordine!&lt;br /&gt;
    attributes = ('xl', 'str', 'int', 'dex', 'ac', 'ev', 'sh')&lt;br /&gt;
    anything = '.*'&lt;br /&gt;
    return np.fromregex('https://crawl.xtahua.com/crawl/meta/0.33/logfile',&lt;br /&gt;
                        anything + anything.join(':' + s + '=([0-9]+)' for s in attributes) + anything,&lt;br /&gt;
                        dtype=[(s,'i4') for s in attributes])&lt;br /&gt;
&lt;br /&gt;
def plotscatter(d, x, y, minxl = None):&lt;br /&gt;
    if minxl is not None:&lt;br /&gt;
        d = d[d['xl'] &amp;gt;= minxl]&lt;br /&gt;
    plt.scatter(d[x], d[y], c = d['xl'], alpha=0.1)&lt;br /&gt;
&lt;br /&gt;
def strtoidx(strings):&lt;br /&gt;
    d = {n:i for i,n in enumerate(set(strings))}&lt;br /&gt;
    return d, np.array([d[s] for s in strings])&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    img = np.full((data['race'].max()+1, data['back'].max()+1), -1).astype('u4')&lt;br /&gt;
    for score, race, back in data:&lt;br /&gt;
        img[race,back] = min(img[race, back], score)&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    img = np.zeros((data['race'].max()+1, data['back'].max()+1),dtype = 'u4')&lt;br /&gt;
    for _, race, back in data:&lt;br /&gt;
        img[race,back] += 1&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def translate(data):&lt;br /&gt;
    rd, r = strtoidx(data['race'])&lt;br /&gt;
    bd, b = strtoidx(data['back'])&lt;br /&gt;
    arr = np.array(list(zip(data['score'], r, b)),&lt;br /&gt;
                   dtype=[('score','u4'),('race','u4'),('back','u4')])&lt;br /&gt;
    return rd,bd,arr&lt;br /&gt;
&lt;br /&gt;
def plotusage(backgrounds, races, matrix):&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    plt.imshow(matrix)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=[(b if r &amp;gt; 0 else '') for r,b in zip(race, backgrounds)])&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[np.logical_not(cond)]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(rd, bd, matrix, ax):&lt;br /&gt;
    races = ('Minotaur', 'Spriggan', 'Mountain Dwarf')&lt;br /&gt;
    backgrounds = ('Berserker', 'Fighter', 'Enchanter', 'Hexslinger')&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(backgrounds)), np.arange(len(races)))&lt;br /&gt;
    xyh = np.stack((xpos.ravel(), ypos.ravel(),&lt;br /&gt;
                    matrix[np.ix_([rd[r] for r in races],&lt;br /&gt;
                               [bd[b] for b in backgrounds])].ravel()))&lt;br /&gt;
    xyh = xyh[:, xyh[2]&amp;lt;np.array(-1).astype(matrix.dtype)]&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh[0]-0.25, xyh[1]-0.25, 0, 0.5, 0.5, xyh[2])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    rd,bd,arr = translate(data)&lt;br /&gt;
    im1, im2 = tocount(arr), tobest(arr)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(bd.keys(), rd.keys(), im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1[rd['Minotaur']], bd.keys(), 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(rd, bd, im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9720</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9720"/>
		<updated>2025-06-17T13:21:08Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Esercizi Corretti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides] - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 6''' - ''Lunedì 23 Giugno'': utilizzo della libreria Pandas (https://pandas.pydata.org/)&lt;br /&gt;
&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
def same_pv(A, B):&lt;br /&gt;
    m = min(len(A), len(B))&lt;br /&gt;
    return A[:m][A[:m] == B[:m]]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Demo Matplotlib =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return np.loadtxt('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                      delimiter=',',&lt;br /&gt;
                      dtype=[('score', 'i4'),&lt;br /&gt;
                             ('race','U20'),&lt;br /&gt;
                             ('back', 'U20')])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(im.shape[0])&lt;br /&gt;
    x = im.argmin(axis = 1)&lt;br /&gt;
    c = im.min(axis = 1)&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def loadattrs():&lt;br /&gt;
    # gli attributi devono essere in ordine!&lt;br /&gt;
    attributes = ('xl', 'str', 'int', 'dex', 'ac', 'ev', 'sh')&lt;br /&gt;
    anything = '.*'&lt;br /&gt;
    return np.fromregex('https://crawl.xtahua.com/crawl/meta/0.33/logfile',&lt;br /&gt;
                        anything + anything.join(':' + s + '=([0-9]+)' for s in attributes) + anything,&lt;br /&gt;
                        dtype=[(s,'i4') for s in attributes])&lt;br /&gt;
&lt;br /&gt;
def plotscatter(d, x, y, minxl = None):&lt;br /&gt;
    if minxl is not None:&lt;br /&gt;
        d = d[d['xl'] &amp;gt;= minxl]&lt;br /&gt;
    plt.scatter(d[x], d[y], c = d['xl'], alpha=0.1)&lt;br /&gt;
&lt;br /&gt;
def strtoidx(strings):&lt;br /&gt;
    d = {n:i for i,n in enumerate(set(strings))}&lt;br /&gt;
    return d, np.array([d[s] for s in strings])&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    img = np.full((data['race'].max()+1, data['back'].max()+1), -1).astype('u4')&lt;br /&gt;
    for score, race, back in data:&lt;br /&gt;
        img[race,back] = min(img[race, back], score)&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    img = np.zeros((data['race'].max()+1, data['back'].max()+1),dtype = 'u4')&lt;br /&gt;
    for _, race, back in data:&lt;br /&gt;
        img[race,back] += 1&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def translate(data):&lt;br /&gt;
    rd, r = strtoidx(data['race'])&lt;br /&gt;
    bd, b = strtoidx(data['back'])&lt;br /&gt;
    arr = np.array(list(zip(data['score'], r, b)),&lt;br /&gt;
                   dtype=[('score','u4'),('race','u4'),('back','u4')])&lt;br /&gt;
    return rd,bd,arr&lt;br /&gt;
&lt;br /&gt;
def plotusage(backgrounds, races, matrix):&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    plt.imshow(matrix)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=[(b if r &amp;gt; 0 else '') for r,b in zip(race, backgrounds)])&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[np.logical_not(cond)]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(rd, bd, matrix, ax):&lt;br /&gt;
    races = ('Minotaur', 'Spriggan', 'Mountain Dwarf')&lt;br /&gt;
    backgrounds = ('Berserker', 'Fighter', 'Enchanter', 'Hexslinger')&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(backgrounds)), np.arange(len(races)))&lt;br /&gt;
    xyh = np.stack((xpos.ravel(), ypos.ravel(),&lt;br /&gt;
                    matrix[np.ix_([rd[r] for r in races],&lt;br /&gt;
                               [bd[b] for b in backgrounds])].ravel()))&lt;br /&gt;
    xyh = xyh[:, xyh[2]&amp;lt;np.array(-1).astype(matrix.dtype)]&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh[0]-0.25, xyh[1]-0.25, 0, 0.5, 0.5, xyh[2])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    rd,bd,arr = translate(data)&lt;br /&gt;
    im1, im2 = tocount(arr), tobest(arr)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(bd.keys(), rd.keys(), im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1[rd['Minotaur']], bd.keys(), 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(rd, bd, im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9719</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9719"/>
		<updated>2025-06-17T13:12:57Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides] - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 6''' - ''Lunedì 23 Giugno'': utilizzo della libreria Pandas (https://pandas.pydata.org/)&lt;br /&gt;
&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Demo Matplotlib =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return np.loadtxt('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                      delimiter=',',&lt;br /&gt;
                      dtype=[('score', 'i4'),&lt;br /&gt;
                             ('race','U20'),&lt;br /&gt;
                             ('back', 'U20')])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(im.shape[0])&lt;br /&gt;
    x = im.argmin(axis = 1)&lt;br /&gt;
    c = im.min(axis = 1)&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def loadattrs():&lt;br /&gt;
    # gli attributi devono essere in ordine!&lt;br /&gt;
    attributes = ('xl', 'str', 'int', 'dex', 'ac', 'ev', 'sh')&lt;br /&gt;
    anything = '.*'&lt;br /&gt;
    return np.fromregex('https://crawl.xtahua.com/crawl/meta/0.33/logfile',&lt;br /&gt;
                        anything + anything.join(':' + s + '=([0-9]+)' for s in attributes) + anything,&lt;br /&gt;
                        dtype=[(s,'i4') for s in attributes])&lt;br /&gt;
&lt;br /&gt;
def plotscatter(d, x, y, minxl = None):&lt;br /&gt;
    if minxl is not None:&lt;br /&gt;
        d = d[d['xl'] &amp;gt;= minxl]&lt;br /&gt;
    plt.scatter(d[x], d[y], c = d['xl'], alpha=0.1)&lt;br /&gt;
&lt;br /&gt;
def strtoidx(strings):&lt;br /&gt;
    d = {n:i for i,n in enumerate(set(strings))}&lt;br /&gt;
    return d, np.array([d[s] for s in strings])&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    img = np.full((data['race'].max()+1, data['back'].max()+1), -1).astype('u4')&lt;br /&gt;
    for score, race, back in data:&lt;br /&gt;
        img[race,back] = min(img[race, back], score)&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    img = np.zeros((data['race'].max()+1, data['back'].max()+1),dtype = 'u4')&lt;br /&gt;
    for _, race, back in data:&lt;br /&gt;
        img[race,back] += 1&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def translate(data):&lt;br /&gt;
    rd, r = strtoidx(data['race'])&lt;br /&gt;
    bd, b = strtoidx(data['back'])&lt;br /&gt;
    arr = np.array(list(zip(data['score'], r, b)),&lt;br /&gt;
                   dtype=[('score','u4'),('race','u4'),('back','u4')])&lt;br /&gt;
    return rd,bd,arr&lt;br /&gt;
&lt;br /&gt;
def plotusage(backgrounds, races, matrix):&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    plt.imshow(matrix)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=[(b if r &amp;gt; 0 else '') for r,b in zip(race, backgrounds)])&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[np.logical_not(cond)]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(rd, bd, matrix, ax):&lt;br /&gt;
    races = ('Minotaur', 'Spriggan', 'Mountain Dwarf')&lt;br /&gt;
    backgrounds = ('Berserker', 'Fighter', 'Enchanter', 'Hexslinger')&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(backgrounds)), np.arange(len(races)))&lt;br /&gt;
    xyh = np.stack((xpos.ravel(), ypos.ravel(),&lt;br /&gt;
                    matrix[np.ix_([rd[r] for r in races],&lt;br /&gt;
                               [bd[b] for b in backgrounds])].ravel()))&lt;br /&gt;
    xyh = xyh[:, xyh[2]&amp;lt;np.array(-1).astype(matrix.dtype)]&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh[0]-0.25, xyh[1]-0.25, 0, 0.5, 0.5, xyh[2])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    rd,bd,arr = translate(data)&lt;br /&gt;
    im1, im2 = tocount(arr), tobest(arr)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(bd.keys(), rd.keys(), im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1[rd['Minotaur']], bd.keys(), 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(rd, bd, im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9718</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9718"/>
		<updated>2025-06-16T18:51:31Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Demo Matplotlib =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
def loadpacif():&lt;br /&gt;
    return np.loadtxt('https://wiki.golem.linux.it/images/a/af/Pacif.txt',&lt;br /&gt;
                      delimiter=',',&lt;br /&gt;
                      dtype=[('score', 'i4'),&lt;br /&gt;
                             ('race','U20'),&lt;br /&gt;
                             ('back', 'U20')])&lt;br /&gt;
&lt;br /&gt;
def plotstars(im):&lt;br /&gt;
    y = np.arange(im.shape[0])&lt;br /&gt;
    x = im.argmin(axis = 1)&lt;br /&gt;
    c = im.min(axis = 1)&lt;br /&gt;
    c = c.max() - c&lt;br /&gt;
    plt.scatter(x, y, c=c, cmap='inferno', marker = '*', label = 'punteggi migliori')&lt;br /&gt;
    plt.legend(loc = 'upper left')&lt;br /&gt;
&lt;br /&gt;
def loadattrs():&lt;br /&gt;
    # gli attributi devono essere in ordine!&lt;br /&gt;
    attributes = ('xl', 'str', 'int', 'dex', 'ac', 'ev', 'sh')&lt;br /&gt;
    anything = '.*'&lt;br /&gt;
    return np.fromregex('https://crawl.xtahua.com/crawl/meta/0.33/logfile',&lt;br /&gt;
                        anything + anything.join(':' + s + '=([0-9]+)' for s in attributes) + anything,&lt;br /&gt;
                        dtype=[(s,'i4') for s in attributes])&lt;br /&gt;
&lt;br /&gt;
def plotscatter(d, x, y, minxl = None):&lt;br /&gt;
    if minxl is not None:&lt;br /&gt;
        d = d[d['xl'] &amp;gt;= minxl]&lt;br /&gt;
    plt.scatter(d[x], d[y], c = d['xl'], alpha=0.1)&lt;br /&gt;
&lt;br /&gt;
def strtoidx(strings):&lt;br /&gt;
    d = {n:i for i,n in enumerate(set(strings))}&lt;br /&gt;
    return d, np.array([d[s] for s in strings])&lt;br /&gt;
&lt;br /&gt;
def tobest(data):&lt;br /&gt;
    img = np.full((data['race'].max()+1, data['back'].max()+1), -1).astype('u4')&lt;br /&gt;
    for score, race, back in data:&lt;br /&gt;
        img[race,back] = min(img[race, back], score)&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def tocount(data):&lt;br /&gt;
    img = np.zeros((data['race'].max()+1, data['back'].max()+1),dtype = 'u4')&lt;br /&gt;
    for _, race, back in data:&lt;br /&gt;
        img[race,back] += 1&lt;br /&gt;
    return img&lt;br /&gt;
&lt;br /&gt;
def translate(data):&lt;br /&gt;
    rd, r = strtoidx(data['race'])&lt;br /&gt;
    bd, b = strtoidx(data['back'])&lt;br /&gt;
    arr = np.array(list(zip(data['score'], r, b)),&lt;br /&gt;
                   dtype=[('score','u4'),('race','u4'),('back','u4')])&lt;br /&gt;
    return rd,bd,arr&lt;br /&gt;
&lt;br /&gt;
def plotusage(backgrounds, races, matrix):&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds, rotation=45, ha='right')&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    plt.imshow(matrix)&lt;br /&gt;
    plt.colorbar()&lt;br /&gt;
    plt.title('utilizzi per (razza,background)')&lt;br /&gt;
&lt;br /&gt;
def plotbackgrounds(race, backgrounds, razza):&lt;br /&gt;
    plt.pie(race, labels=[(b if r &amp;gt; 0 else '') for r,b in zip(race, backgrounds)])&lt;br /&gt;
    plt.title(&amp;quot;background usati per &amp;quot; + razza)&lt;br /&gt;
&lt;br /&gt;
def plothist(score, cond, labels):&lt;br /&gt;
    plt.hist([score[cond], score[np.logical_not(cond)]], 30, histtype = 'barstacked', label=labels)&lt;br /&gt;
    plt.xlabel('punti (meno sono meglio è)')&lt;br /&gt;
    plt.legend()&lt;br /&gt;
&lt;br /&gt;
def plth3d(rd, bd, matrix, ax):&lt;br /&gt;
    races = ('Minotaur', 'Spriggan', 'Mountain Dwarf')&lt;br /&gt;
    backgrounds = ('Berserker', 'Fighter', 'Enchanter', 'Hexslinger')&lt;br /&gt;
    xpos, ypos = np.meshgrid(np.arange(len(backgrounds)), np.arange(len(races)))&lt;br /&gt;
    xyh = np.stack((xpos.ravel(), ypos.ravel(),&lt;br /&gt;
                    matrix[np.ix_([rd[r] for r in races],&lt;br /&gt;
                               [bd[b] for b in backgrounds])].ravel()))&lt;br /&gt;
    xyh = xyh[:, xyh[2]&amp;lt;np.array(-1).astype(matrix.dtype)]&lt;br /&gt;
    plt.xticks(np.arange(len(backgrounds)), backgrounds)&lt;br /&gt;
    plt.yticks(np.arange(len(races)), races)&lt;br /&gt;
    ax.bar3d(xyh[0]-0.25, xyh[1]-0.25, 0, 0.5, 0.5, xyh[2])&lt;br /&gt;
    &lt;br /&gt;
def showall(data):&lt;br /&gt;
    rd,bd,arr = translate(data)&lt;br /&gt;
    im1, im2 = tocount(arr), tobest(arr)&lt;br /&gt;
    plt.style.use('dark_background')&lt;br /&gt;
    plt.subplot(1,2,1)&lt;br /&gt;
    plotusage(bd.keys(), rd.keys(), im1)&lt;br /&gt;
    plotstars(im2)&lt;br /&gt;
    plt.subplot(222)&lt;br /&gt;
    plotbackgrounds(im1[rd['Minotaur']], bd.keys(), 'minotauro')&lt;br /&gt;
    plt.subplot(224)&lt;br /&gt;
    plothist(data['score'], data['race'] == 'Minotaur', ('minotauro','altre razze'))&lt;br /&gt;
    plt.legend()&lt;br /&gt;
    plt.show()&lt;br /&gt;
    plth3d(rd, bd, im2, plt.subplot(projection = '3d'))&lt;br /&gt;
    plt.show()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9717</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9717"/>
		<updated>2025-06-16T18:50:16Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/5/57/Python_lez5.pdf slides] [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria matplotlib (https://matplotlib.org/)&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez5.pdf&amp;diff=9716</id>
		<title>File:Python lez5.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez5.pdf&amp;diff=9716"/>
		<updated>2025-06-16T18:49:28Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez4.pdf&amp;diff=9710</id>
		<title>File:Python lez4.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez4.pdf&amp;diff=9710"/>
		<updated>2025-06-09T22:22:25Z</updated>

		<summary type="html">&lt;p&gt;Malatext: Malatext ha caricato una nuova versione di File:Python lez4.pdf.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9709</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9709"/>
		<updated>2025-06-09T18:14:51Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Esercizi Corretti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==raggruppa==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
''' 2 liste:&lt;br /&gt;
lista di espressioni regolari regs&lt;br /&gt;
lista di directory dirs&lt;br /&gt;
per ogni i, i file con un nome che fa match con regs[i] devono essere spostati in dirs[i], &lt;br /&gt;
'''&lt;br /&gt;
def raggruppa(regs, dirs):&lt;br /&gt;
    from os import listdir, renames&lt;br /&gt;
    from re import match&lt;br /&gt;
    for r,d in zip(regs, dirs):&lt;br /&gt;
            matches = [match(r,f) for f in listdir()]&lt;br /&gt;
            matches = [m for m in matches if m is not None]&lt;br /&gt;
            for m in matches:&lt;br /&gt;
                    renames(m.string,&lt;br /&gt;
                            d + &amp;quot;/&amp;quot; + &amp;quot;/&amp;quot;.join(m.groups()) + &amp;quot;/&amp;quot; + m.string)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9708</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9708"/>
		<updated>2025-06-09T18:11:17Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 16 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9707</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9707"/>
		<updated>2025-06-09T18:10:19Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/d/de/Python_lez4.pdf slides] - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Luendì 16 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez4.pdf&amp;diff=9706</id>
		<title>File:Python lez4.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez4.pdf&amp;diff=9706"/>
		<updated>2025-06-09T18:08:32Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9705</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9705"/>
		<updated>2025-06-09T18:07:45Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4'''  - ''Lunedì 9 Giugno'': funzionamento e utilizzo della libreria numpy (https://numpy.org/)&lt;br /&gt;
*'''Lezione 5''' [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Luendì 16 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
Nota: la libreria Matplotlib è stata spostata alla lezione 5&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9704</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9704"/>
		<updated>2025-06-05T22:55:13Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' [https://wiki.golem.linux.it/images/a/af/Pacif.txt dataset da utilizzare] - ''Lunedì 9 Giugno'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''Luendì 16 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Pacif.txt&amp;diff=9703</id>
		<title>File:Pacif.txt</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Pacif.txt&amp;diff=9703"/>
		<updated>2025-06-05T22:53:28Z</updated>

		<summary type="html">&lt;p&gt;Malatext: file CSV con la classifica dei giocatori che hanno ottenuto una vittoria con meno punti possibili, ovvero i giocatori con le vittorie più pacifiche nel torneo https://crawl.develz.org/tournament/0.32/overview.html&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dettagli ==&lt;br /&gt;
file CSV con la classifica dei giocatori che hanno ottenuto una vittoria con meno punti possibili, ovvero i giocatori con le vittorie più pacifiche nel torneo https://crawl.develz.org/tournament/0.32/overview.html&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9702</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9702"/>
		<updated>2025-06-01T13:01:58Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''Lunedì 9 Giugno'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''Luendì 16 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9701</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9701"/>
		<updated>2025-05-30T23:51:51Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''Lunedì 2 Giugno, DA RIMANDARE?'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''Luendì 9 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9699</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9699"/>
		<updated>2025-05-27T12:09:14Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
=Programma=&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''Lunedì 2 Giugno'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''Luendì 9 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
= Esercizi Corretti =&lt;br /&gt;
==fattorizza==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def fattorizza(N):&lt;br /&gt;
    s = &amp;quot;&amp;quot;&lt;br /&gt;
    if N &amp;lt;= 1:&lt;br /&gt;
        s = str(N)&lt;br /&gt;
    for i in range(2, N+1):&lt;br /&gt;
        while N % i == 0:&lt;br /&gt;
            s += str(i) + (&amp;quot; * &amp;quot; if N &amp;gt; i else &amp;quot;&amp;quot;)&lt;br /&gt;
            N //= i&lt;br /&gt;
    return s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==distributore==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
def distributore(rifornimento):&lt;br /&gt;
    cents = yield rifornimento.keys()&lt;br /&gt;
    while True:&lt;br /&gt;
        while cents &amp;lt; 50:&lt;br /&gt;
            cents = cents + (yield)&lt;br /&gt;
        selezionato = yield &amp;quot;seleziona bibita&amp;quot;&lt;br /&gt;
        rifornimento[selezionato] -= 1&lt;br /&gt;
        if rifornimento[selezionato] == 0:&lt;br /&gt;
            del rifornimento[selezionato]&lt;br /&gt;
        cents = yield [selezionato, cents - 50]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
= Materiale didattico =&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
=Iscrizione=&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez3.pdf&amp;diff=9698</id>
		<title>File:Python lez3.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez3.pdf&amp;diff=9698"/>
		<updated>2025-05-27T11:34:00Z</updated>

		<summary type="html">&lt;p&gt;Malatext: Malatext ha caricato una nuova versione di File:Python lez3.pdf.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez2.pdf&amp;diff=9697</id>
		<title>File:Python lez2.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez2.pdf&amp;diff=9697"/>
		<updated>2025-05-27T11:33:22Z</updated>

		<summary type="html">&lt;p&gt;Malatext: Malatext ha caricato una nuova versione di File:Python lez2.pdf.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9696</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9696"/>
		<updated>2025-05-26T18:27:09Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' [https://wiki.golem.linux.it/images/4/42/Python_lez3.pdf slides]- ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''Lunedì 2 Giugno'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''Luendì 9 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez3.pdf&amp;diff=9695</id>
		<title>File:Python lez3.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez3.pdf&amp;diff=9695"/>
		<updated>2025-05-26T18:26:34Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez2.pdf&amp;diff=9694</id>
		<title>File:Python lez2.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez2.pdf&amp;diff=9694"/>
		<updated>2025-05-20T09:32:06Z</updated>

		<summary type="html">&lt;p&gt;Malatext: Malatext ha caricato una nuova versione di File:Python lez2.pdf.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9693</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9693"/>
		<updated>2025-05-19T18:14:19Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' [https://wiki.golem.linux.it/images/5/5a/Python_lez2.pdf slides] - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''Lunedì 2 Giugno'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''Luendì 9 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez2.pdf&amp;diff=9692</id>
		<title>File:Python lez2.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez2.pdf&amp;diff=9692"/>
		<updated>2025-05-19T18:13:36Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez1.pdf&amp;diff=9691</id>
		<title>File:Python lez1.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez1.pdf&amp;diff=9691"/>
		<updated>2025-05-09T10:44:15Z</updated>

		<summary type="html">&lt;p&gt;Malatext: Malatext ha caricato una nuova versione di File:Python lez1.pdf.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dettagli ==&lt;br /&gt;
Prima lezione del corso Python&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9690</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9690"/>
		<updated>2025-05-06T20:06:58Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il Lunedì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''Lunedì 2 Giugno'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''Luendì 9 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9689</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9689"/>
		<updated>2025-05-06T20:05:56Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il mercoledì (a meno che dai sondaggi non risulti un giorno scomodo), dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''Lunedì 12 Maggio'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''Lunedì 19 Maggio'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''Lunedì 26 Maggio'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''Lunedì 2 Giugno'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''Luendì 9 Giugno'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9688</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9688"/>
		<updated>2025-05-06T18:10:53Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il mercoledì (a meno che dai sondaggi non risulti un giorno scomodo), dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' [https://wiki.golem.linux.it/images/4/4b/Intro.pdf slides] - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''da decidere'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''da decidere'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''da decidere'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''da decidere'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''da decidere'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Intro.pdf&amp;diff=9687</id>
		<title>File:Intro.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Intro.pdf&amp;diff=9687"/>
		<updated>2025-05-06T18:09:24Z</updated>

		<summary type="html">&lt;p&gt;Malatext: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9686</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9686"/>
		<updated>2025-05-06T09:15:41Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Iscrizione */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il mercoledì (a meno che dai sondaggi non risulti un giorno scomodo), dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''da decidere'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''da decidere'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''da decidere'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''da decidere'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''da decidere'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro Martedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9685</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9685"/>
		<updated>2025-04-25T14:53:48Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il mercoledì (a meno che dai sondaggi non risulti un giorno scomodo), dalle 21 alle 23:30.&lt;br /&gt;
*'''Introduzione''' - ''Martedì 6 Maggio'': Serata di preparazione per presentare il corso&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''da decidere'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''da decidere'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''da decidere'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''da decidere'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''da decidere'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro lunedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9683</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9683"/>
		<updated>2025-04-15T20:18:35Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il mercoledì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Lezione 1''' [https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf slides] - ''da decidere'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''da decidere'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''da decidere'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''da decidere'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''da decidere'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro lunedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9682</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9682"/>
		<updated>2025-04-15T20:16:55Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il mercoledì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Lezione 1''' [[https://wiki.golem.linux.it/images/2/27/Python_lez1.pdf | slides]] - ''da decidere'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''da decidere'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''da decidere'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''da decidere'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''da decidere'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro lunedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9681</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9681"/>
		<updated>2025-04-15T20:16:24Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il mercoledì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Lezione 1''' [[https://wiki.golem.linux.it/File:Python_lez1.pdf | slides]] - ''da decidere'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''da decidere'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''da decidere'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''da decidere'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''da decidere'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro lunedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9680</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9680"/>
		<updated>2025-04-15T20:15:51Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il mercoledì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Lezione 1''' [[Python_lez1.pdf | slides]] - ''da decidere'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''da decidere'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''da decidere'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''da decidere'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''da decidere'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro lunedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9679</id>
		<title>Corso Python 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Corso_Python_2025&amp;diff=9679"/>
		<updated>2025-04-15T20:15:32Z</updated>

		<summary type="html">&lt;p&gt;Malatext: /* Programma */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Python-logo.png|right|80px]]&lt;br /&gt;
Corso di programmazione in Python3 di 5 lezioni: dai concetti introduttivi del linguaggio fino ad applicazioni di utilizzo pratico.&lt;br /&gt;
&lt;br /&gt;
==Programma==&lt;br /&gt;
&lt;br /&gt;
Il corso si terrà il mercoledì, dalle 21 alle 23:30.&lt;br /&gt;
*'''Lezione 1''' [[slides | Python_lez1.pdf]] - ''da decidere'': introduzione alla sintassi del linguaggio, variabili, operatori sui tipi primitivi, costrutto &amp;lt;code&amp;gt;if..else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, funzioni&lt;br /&gt;
*'''Lezione 2''' - ''da decidere'': liste, dizionari, iteratori e insiemi&lt;br /&gt;
*'''Lezione 3''' - ''da decidere'': tuple, stringhe, files, modulo os&lt;br /&gt;
*'''Lezione 4''' - ''da decidere'': funzionamento e utilizzo delle librerie numpy (https://numpy.org/) e matplotlib (https://matplotlib.org/)&lt;br /&gt;
*'''Lezione 5''' - ''da decidere'': utilizzo della libreria pandas (https://pandas.pydata.org)&lt;br /&gt;
&lt;br /&gt;
== Materiale didattico ==&lt;br /&gt;
''Materiale su Python''&lt;br /&gt;
&lt;br /&gt;
* [[Pillole_Python | Python3 in pillole]]&lt;br /&gt;
&lt;br /&gt;
==Iscrizione==&lt;br /&gt;
*È '''necessario''' pre-iscriversi compilando questo form: https://servizi.linux.it/shared/a2lStMGtu24qv5Z2DbwR57odp3rwA1hLBI7owZo236U. Il corso sarà attivato con un minimo di 5 partecipanti fino ad esaurimento della capienza dell'Officina. In caso di sovrannumero farà fede la data d'iscrizione tramite il modulo. Sarà inviata una comunicazione tramite email entro lunedì 6 maggio per la conferma definitiva.&lt;br /&gt;
&lt;br /&gt;
*È necessario un '''proprio PC'''. In caso di mancanza è possibile richiedere una postazione in fase di registrazione.&lt;br /&gt;
&lt;br /&gt;
*Il corso si terrà presso l'[[Officina Informatica | Officina Informatica]]. &lt;br /&gt;
&lt;br /&gt;
*Il '''costo di iscrizione''' è di €35, comprensivo della tessera associativa (€20). Per gli studenti (Under19) il costo è di €20, comprensivo di tessera associativa junior (€10).&lt;br /&gt;
&lt;br /&gt;
Per qualsiasi domanda è possibile scrivere una mail alla [mailto:golem@lists.linux.it lista], inserendo come Oggetto &amp;quot;Corso Python 2025&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Corsi]]&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=File:Python_lez1.pdf&amp;diff=9678</id>
		<title>File:Python lez1.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=File:Python_lez1.pdf&amp;diff=9678"/>
		<updated>2025-04-15T20:11:22Z</updated>

		<summary type="html">&lt;p&gt;Malatext: Prima lezione del corso Python&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dettagli ==&lt;br /&gt;
Prima lezione del corso Python&lt;/div&gt;</summary>
		<author><name>Malatext</name></author>
	</entry>
</feed>