nuzzopippo
Profilo di
Nome | nuzzopippo |
---|---|
Indirizzo email | nuzzopippo@gmail.com |
Avatar | |
Messaggi | 194 |
Firma forum | |
Fatti non foste a viver come bruti... |
-
- 2024-11-02 05:58:58
- Re: problema visualizzazione colonne pandas spider
- Forum >> Principianti
- Gino_2000 said @ 2024-11-01 11:06:42:Vedo che alcuni suggeriscono di operare in ambiente Jupiter, è questa l'unica soluzione ? Grazie.
Per nulla, esistono varie possibilità, cercando in rete e nella docs se ne trovano, si potrebbe, ad esempio, operare in un contesto temporaneamente modificato, vedi il test sotto, effettuato in una sessione idle
Python 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux Type "help", "copyright", "credits" or "license()" for more information. import numpy as np data = np.arange(80).reshape(4,20) data array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39], [40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], [60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79]]) import pandas as pd df = pd.DataFrame(data) df 0 1 2 3 4 5 6 7 8 ... 11 12 13 14 15 16 17 18 19 0 0 1 2 3 4 5 6 7 8 ... 11 12 13 14 15 16 17 18 19 1 20 21 22 23 24 25 26 27 28 ... 31 32 33 34 35 36 37 38 39 2 40 41 42 43 44 45 46 47 48 ... 51 52 53 54 55 56 57 58 59 3 60 61 62 63 64 65 66 67 68 ... 71 72 73 74 75 76 77 78 79 [4 rows x 20 columns] pd.option_context('display.max_columns', None) <pandas._config.config.option_context object at 0x7ecc63b6e480> df 0 1 2 3 4 5 6 7 8 ... 11 12 13 14 15 16 17 18 19 0 0 1 2 3 4 5 6 7 8 ... 11 12 13 14 15 16 17 18 19 1 20 21 22 23 24 25 26 27 28 ... 31 32 33 34 35 36 37 38 39 2 40 41 42 43 44 45 46 47 48 ... 51 52 53 54 55 56 57 58 59 3 60 61 62 63 64 65 66 67 68 ... 71 72 73 74 75 76 77 78 79 [4 rows x 20 columns] with pd.option_context('display.max_columns', None): df 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 \ 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 2 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 3 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 19 0 19 1 39 2 59 3 79
come puoi vedere, al secondo tentativo d'uso tutte le colonne vengono mostrate.
Ciao
Fatti non foste a viver come bruti...
-
- 2024-10-22 09:49:08
- Re: Non è più possibile scaricare Unofficial Windows Binaries for Python Extension Packages
- Forum >> Principianti
-
Hai provato con Pypi? Lato python viene richiesto genericamente la versione 3, perciò "dovrebbe" essere Ok.
Se i problemi vengono dalla versione di windows (spesso incompatibile con il pregresso) passo, non uso quel s.o. dagli anni '90
Ciao e auguri
Fatti non foste a viver come bruti...
-
- 2024-10-14 09:09:51
- Re: Calcolo disposizioni con ripetizione - itertools?
- Forum >> Principianti
- marcos said @ 2024-10-14 08:09:51:Ho visto che esiste il modulo itertools ma non mi pare contempli questo caso.
Ciao ... beh, forse esistePython 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux Type "help", "copyright", "credits" or "license()" for more information. import itertools data = ['a', 'b', 'c'] result = itertools.combinations_with_replacement(data, 4) for c in result: print(''.join(c)) aaaa aaab aaac aabb aabc aacc abbb abbc abcc accc bbbb bbbc bbcc bccc cccc
Leggendo meglio, forse vorresti ottenere "Tutte" le possibili combinazioni, dato che quella sopra non è completa ... in tal caso combinando con itertools.permutations e smanettando un pochino si potrebbe (occhio sono TANTE)
comp = [] result = itertools.combinations_with_replacement(data, 4) for e in result: per = itertools.permutations(e) for c in per: comp.append(''.join(c)) final = sorted(list(set(comp))) for v in final: print(v) aaaa aaab aaac aaba aabb aabc aaca aacb aacc abaa abab abac abba ... accc baaa baab baac baba ... etc ...
--- Ultima modifica di nuzzopippo in data 2024-10-14 09:43:20 ---Fatti non foste a viver come bruti...
-
- 2024-09-27 11:21:50
- Re: Sostituzione prima superdiagonale
- Forum >> Programmazione Python >> Calcolo scientifico
-
Rileggendo il post mi son reso conto di aver travisato il quesito posto a @Kolmogorov Scale, che probabilmente non verteva sul come ottenere la super-diagonale bensì su come variarne i valori con metodi propri di numpy ... chiedo venia per la mia risposta fuori logo.
In merito ai metodi di numpy (eventualmente mi si corregga) dalle ricerche effettuate non sembra sia possibile essendo il parametro "offset" implementato in funzioni tipo fill_diagonal e simili, è un argomento su cui si discute in merito ma di la da venire.
Pur non essendo l'algebra lineare materia a me familiare, giusto per chiedere scusa della mia precedente cattiva interpretazione, ho implementato una piccola funzione per la sostituzione dei valori diagonali e/o super/sub-diagonali tramite una funzione manipolatrice od anche un iterabile, segue il codice :
import numpy as np from typing import Any def my_fill_diag(a: np.array, val: Any, o: int=0, w: bool=True) -> None: ''' Emulazione di numpy.fill_diagonal con applicazione delle sostituzioni a super e sub diagonali. Parametri: - a : array multidimensionale cui applicare le sostituzioni; - val : iterabile o funzione per la definizione delle sostituzioni; - o : offset rispetto alla diagonale base, se positivo sarà applicato sulle colonne, se negativo sulle righe di "a", nel caso superi le colonne o le righe disponibili non sarà applicato; - w : se vero il ciclo di sostituzione si interromperà in caso si raggiunga l'ultima colonna, altrimenti si riposiziona sulla prima e continua. In ogni caso la sostituzione termina raggiunta l'ultima riga. Nota: Qualora "val" sia un iterabile ed abbia dimensioni inferiori a quelle della diagonale i valori saranno riproposti ciclicamente. ''' rows, cols = a.shape c = 0 r = 0 if o > 0 and o < cols: c = o elif o < 0 and abs(o) < rows: r = abs(o) if 'function' in repr(type(val)): while r < rows: a[r, c] = val(a[r, c]) r += 1 c += 1 if c == cols: if w: break else: c = 0 else: i = 0 while i < len(val): a[r, c] = val r += 1 c += 1 if r == rows: break if c == cols: if w: break else: c = 0 i += 1 if i == len(val): i = 0
Nella doc-string della funzione ho cercato di farne comprendere i parametri ed il funzionamento, eventuali suggerimenti per migliorarla (anche come stesura e/o elasticità) sono ben accetti
Segue una sessione shell di test per esemplificarne l'uso :
Python 3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0] on linux Type "help", "copyright", "credits" or "license()" for more information. from prova_01 import my_fill_diag import numpy as np A = np.arange(1, 17).reshape(4, 4) A array([[ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [13, 14, 15, 16]]) def my_func(value): return value * 2 my_fill_diag(A, my_func, 1) A array([[ 1, 4, 3, 4], [ 5, 6, 14, 8], [ 9, 10, 11, 24], [13, 14, 15, 16]]) A = np.arange(1, 17).reshape(4, 4) B = [100, 200] A = np.arange(1, 17).reshape(4, 4) my_fill_diag(A, B, 1, False) A array([[ 1, 100, 3, 4], [ 5, 6, 200, 8], [ 9, 10, 11, 100], [200, 14, 15, 16]]) A = np.arange(1, 17).reshape(4, 4) my_fill_diag(A, B, -1, False) A array([[ 1, 2, 3, 4], [100, 6, 7, 8], [ 9, 200, 11, 12], [ 13, 14, 100, 16]])
Spero possa essere utile a qualcuno e rinnovo le mie scuse per la precedente interpretazione.
I miei saluti
Fatti non foste a viver come bruti...
-
- 2024-09-23 14:53:29
- Re: Sostituzione prima superdiagonale
- Forum >> Programmazione Python >> Calcolo scientifico
-
Intendi qualcosa tipo questo?:
Python 3.12.3 (main, Jul 31 2024, 17:43:48) [GCC 13.2.0] on linux Type "help", "copyright", "credits" or "license()" for more information. import numpy as np A = np.array([[1,2,3],[4,5,6],[7,8,9]]) A array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) np.diagonal(A, 1) array([2, 6])
Non è farina del mio sacco, suggerimento ricevuto in questa pagina documentale, è sufficiente porre un ofset di una posizione rispetto alla diagonale ordinaria.
Ciao
Fatti non foste a viver come bruti...
-
- 2024-09-16 20:15:06
- Re: Cosa significa il seguente messaggio di python ? Grazie
- Forum >> Programmazione Python >> IDE ed Editor
-
Intrigato, ho cercato un po'. Suppongo sia un "qualcosa" individuabile nell'ambito dei così detti "type hints", un tipo di notazione complesso (vedi il link per avere idea) non obbligatorio ma sempre più utilizzato e sul quale, purtroppo, personalmente non ho conoscenze adeguate, speriamo in utenti più esperti.
Comunque, cercando in giro il tipo di errore lo ho trovato per lo più collegato alla libreria "mypy" per la quale sono stati aperte delle segnalazioni di bug in merito.
Ad occhio e croce penserei che la segnalazione possa derivare da una incoerente definizione di tipo, del genere discusso qui, ma sarebbe tutto da vedere.
Ora, con notizie scarne come quelle che Hai fornito, credo che ben poco si possa dire, riporta lo backtrace che ricevi e lo stralcio di codice che causa l'errore perché ci si possa ragionare su, magari non io (non essendo all'altezza) ma qualche utente più capace potrebbe dare una dritta in materia.
Ciao
Fatti non foste a viver come bruti...
-
- 2024-09-16 19:39:07
- Re: Confronto tra liste.
- Forum >> Principianti
- Kolmogorov Scale said @ 2024-09-16 13:16:39:Vorrei che il programma effettui il confronto e stampi semplicemente a fine slicing "niente in comune".
Come si può fare? le sto tentando tutte :\È piuttosto semplice, guarda sotto :
Python 3.12.3 (main, Jul 31 2024, 17:43:48) [GCC 13.2.0] on linux Type "help", "copyright", "credits" or "license()" for more information. A = [1, 2, 3, 4] B = [3, 4, 5, 6, 7] C = [6, 7, 8, 9] print() if [print(f'elemento in comune: {i}') for i in A if i in B] else print('niente in comune') elemento in comune: 3 elemento in comune: 4 print() if [print(f'elemento in comune: {i}') for i in A if i in C] else print('niente in comune') niente in comune print() if [print(f'elemento in comune: {i}') for i in B if i in C] else print('niente in comune') elemento in comune: 6 elemento in comune: 7
Ottenuto semplicemente sfruttando le definizioni base del linguaggio python, roba che val sempre la pena di approfondire
Ciao
Fatti non foste a viver come bruti...
-
- 2024-09-07 16:43:00
- Re: Confrontare date con Sqlite
- Forum >> Programmazione Python >> Database
-
Certo sai giò che sqlite ha uno scarso supporto per i dati temporali ... però non è difficile trattare direttamente stringhe con dati in formato "dd/mm/aaaa", basta utilizzare la funzione sqlite substr e creare una stringa ordinata per anno-mese-giorno ... p.e, ho creato una semplicissima tavola con date di eventi alla rinfusa, per poi ordinarli e selezionare una "data limite" utilizzando tali considerazioni, vedi sotto una sessione in shell sqlite :
sqlite> .schema eventi CREATE TABLE eventi ( data TEXT, evento TEXT); sqlite> select * from eventi; 25/06/1876|battaglia del Little Bighorn 06/04/1453|inizio assedio Costantinopoli 03/08/1492|Cristoforo Colombo parte sa Palos 06/06/1944|Sbarco in Normandia sqlite> SELECT * FROM eventi ...> ORDER BY (substr(data, 7, 4) || '-' || substr(data, 4, 2) || '-' || substr(data, 1, 2)); 06/04/1453|inizio assedio Costantinopoli 03/08/1492|Cristoforo Colombo parte sa Palos 25/06/1876|battaglia del Little Bighorn 06/06/1944|Sbarco in Normandia sqlite> SELECT * FROM eventi ...> WHERE (substr(data, 7, 4) || '-' || substr(data, 4, 2) || '-' || substr(data, 1, 2)) > '1500-01-01'; 25/06/1876|battaglia del Little Bighorn 06/06/1944|Sbarco in Normandia sqlite>
Venendo al Tuo "ottimizzare", non ne ho idea, non avendo presenti tanto i dati quanto il contesto ... certo che sarebbe bene registrare i dati temporali direttamente secondo le modalità previste in sqlite, semplificherebbe le query.
CIAO
Fatti non foste a viver come bruti...
-
- 2024-08-20 17:05:02
- Re: Problemi stampa messaggio formattato con web scraping
- Forum >> Principianti
- Ciao @Martinello
Premetto che la programmazione web e lo scraping in se non mi hanno mai interessato, quindi neanche conosco beautifulsoup, perciò prendimi con le molle e perdona eventuali caz...e eventualmente presenti.
Sfruttando il Tuo codice in una sessione idle, e considerando che in una tabella html una cella viene espansa su più colonne tramite la proprietà "colspan" ho ritenuto, per risolvere il problema orari, di manipolare il Tuo codice originale calcolando la colonna della cella con testo interessante e lo span relativo, la soluzione con output nel sottostante blocco di codice mi sembra risolva il quesito :Python 3.10.12 (main, Jul 29 2024, 16:56:4 8) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license()" for more information. from bs4 import BeautifulSoup import requests url = f"https://mrbs.dmi.unipg.it/day.php?year=2024&month=09&day=04&area=1&room=3" response = requests.get(url) cont = response.text soup = BeautifulSoup(cont, 'html.parser') table = soup.find("table", class_ = "dwm_main") rows = table.find_all("tr") headers = [header.get_text(strip=True) for header in rows0.find_all("th")] headers ['Sala:', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00'] messages = [] for r in rows[1:]: msg = '' tds = [x for x in r.find_all('td')] room = f'Aula: {tds[0].get_text(strip=True)}\n' col = 1 for cell in tds[1:]: if cell.get_text(strip=True): stime = headers[col] if not msg: msg += room if 'colspan' in cell.attrs: span = int(cell['colspan']) etime = headers[col + span - 1] col += span - 1 else: etime = ' ' msg += f'🔹 {stime} - {etime} : {cell.get_text(strip=True)}\n' col += 1 if msg: messages.append(msg) print(''.join(messages)) Aula: A0(180) 🔹 09:00 - 10:00 : Architettura degli elaboratoriAlfredo Navarra 🔹 14:00 - 18:00 : Esame Programmazione Procedurale con Lab.Francesco Santini Aula: A2(180) 🔹 09:00 - 12:00 : Esame Rossi (Discreta - Geometria)F. A. Rossi Aula: B3(35) 🔹 09:00 - 16:00 : Esami orali di Fisica Matematica 1 e Mathematical Physics 2Francesca Di Patti
Le variabili stime ed etime servono per individuare l'indice da leggere negli headers, collspan viene letto dagli attributi dell'oggetto "td" in esame (vedere documentazione "attrs" di beartiful; la logica applicata mi sembra abbastanza semplice ma se hai dubbi, chiedi
Riguardo al nome dell'insegnante appiccicato all'esame, ho estratto il contenuto di una riga con voci valide lette<td class="I" colspan="2"> <div class="celldiv slots1" data-id="101857"> <a href="view_entry.php?id=101857&area=1&day=4&month=9&year=2024" title="Corso di Laurea Informatica I Anno E' un esame Architettura degli elaboratori">Architettura degli elaboratori</a><sub style="color:blue;font-size:xx-small">Alfredo Navarra</sub> </div> </td> <td class="I" colspan="5"> <div class="celldiv slots1" data-id="101642"> <a href="view_entry.php?id=101642&area=1&day=4&month=9&year=2024" title="Corso di Laurea Informatica I Anno E' un esame ">Esame Programmazione Procedurale con Lab.</a><sub style="color:blue;font-size:xx-small">Francesco Santini</sub> </div> </td>
Qualora il formato sia costante si potrebbe separare il titolo dell'esame da quello del docente, analizzando i tags "a" e "sub", un po' troppo macchinoso per una sessione ifle, però.
Fai sapere, ciao
EDIT : corretti artefatti dell'editor
--- Ultima modifica di nuzzopippo in data 2024-08-20 17:11:28 ---Fatti non foste a viver come bruti...
-
- 2024-08-16 08:43:24
- Re: Python stringhe per creare Varianti
- Forum >> Principianti
- Intanto precisiamo una cosa riguardo al Tuo
cIò che hai esposto non sono "stringhe" (ossia oggetti di classe "str") bensì istruzioni python, ossia "codice", medita su questo punto e chiarisci cosa intendi nella Tua domanda, perché è fondamentale parlare la stessa lingua tra noi o non riusciremo a capirci.le stringhe finali scritte sono:
# La palla collide con le racchette
if palla.colliderect(racchetta_sinistra) or palla.colliderect(racchetta_destra):
velocita_palla_x = -velocita_palla_x
punteggio += 1
Venendo alla successiva richiesta
È ancora impossibile darti indicazioni pertinenti perché le tre righe di codice non dicono nulla tanto sull'algoritmo applicato (come tratti la componente verticale? e i rimbalzi di sponda? e gli incrementi vanno applicati alle componenti x/y od al solo vettore "velocità"?) quanto al paradigma utilizzato nella stesura del codice (imperativo? funzionale? ad oggetti?) oltre che alla tipologia di variabili adottate nella Tua implementazionequali variabili dovrei inserire e dove effettivamente?
Supposto, tanto per dialogare Tu stia implementando il Tuo codice con modalità funzionali e Tu voglia definire due variabili condivise dalle varie funzioni a livello di modulo una di tipo intero (definiamola RIMBALZI) per conteggiare i rimbalzi tra un incremento di velocità e l'altro ed una di tipo float (definiamola AMPLIFICA) che rappresenta un fattore di amplificazione da applicare ad un vettore "velocità" iniziale, anch'esso condiviso tra le funzioni del modulo, potremmo dichiarare PRIMA della definizione delle varie funzioni le variabilivelocita = 5.0 RIMBALZI = 0 AMPLIFICA = 1.0
ovviamente, tali variabili andrebbero dichiarate quali globali nelle funzioni che le utilizzano, supposto di voler incrementare il detto vettore di velocità iniziale del 10% solo ogni 10 rimbalzi orizzontali, potremmo porre nella funzione che contiene le tre righe da Te prima esposte:
global RIMBALZI global AMPLIFICA if palla.colliderect(racchetta_sinistra) or palla.colliderect(racchetta_destra): velocita_palla_x = -velocita_palla_x RIMBALZI += 1 if RIMBALZI >= 10: AMPLIFICA *= 1.1 RIMBALZI = 0 punteggio += 1
e, quindi trattare la velocità iniziale incrementata con il fattore di incremento raggiunto nelle varie funzioni di calcolo e/o rappresentazione che dovresti aver definito.
Intendiamoci, questo è solo uno dei numerosi scenari possibili, uno dei più semplici da esporre, in realtà cosa fare dipende tutto dalla Tua implementazione.
Ciao
--- Ultima modifica di nuzzopippo in data 2024-08-16 08:46:51 ---Fatti non foste a viver come bruti...