Forum >> Principianti >> incremento variabile

Pagina: Indietro 1 2 3 Avanti

beh non piace ripetermi ma è dobbligo sottolineare il fatto che per quanto mi concerne ho spiegato più volte cosa volessi dire con funzione standard (vedi riga sotto)

<si potrebbe creare una funzione di default come ho citato "enumerate e lambda"> <per default intendo una funzione standard propria di Python>

come anche il fatto di aver detto che assegnare e quindi creare una variabile sia indispensabile l'ho specificato dall'inizio e non successivamente come riporti tu


ora senza che ritorno sugli stessi punti, tanto basta rileggere con calma, lo so che non è facile essendo che tra il lavoro e faccende personali in questa vita frenetica concentrarsi a leggere i problemi di persone dietro ad una tastiera per poi dargli una risposta che lo aiuti a superarle non è semplice ma ti assicuro che non lo è nemmeno per noi, ad esempio alla fine hai riportato il codice di Danile (x = y = 0) facendo intendere che sia una manna dal cielo ma io non ho proprio idea di come giovare di questa stringa...

ps per come l'ho pensata io la funzione dovrebbe solo incrementare il valore della variabile perchè il mio scopo è quello di evitare di creare 4 / 5 o più variabili prima dei cicli "for o while" e l'ideale sarebbe quello di poterlo inserire all'interno di Python e farla funzionare come una qualsiasi altra funzione già esistente, poi se esiste già un contatore di "default" ben venga io non neconosco nessuno . . . .

Sorry, ma... non so proprio che cosa aggiungere. Ti ho spiegato quello che c'è. Ti ho spiegato quello che non c'è. Ti ho spiegato perché non c'è quello che non c'è. Ti ho spiegato di passaggio come funziona il sistema degli oggetti in Python. Più di questo non mi viene davvero in mente nulla.


Il modo canonico in Python di fare quello che stavi cercando di fare nel tuo post iniziale è proprio quello che io e altri ti abbiamo già suggerito:
>>> x = 0
>>> y = 0
>>> # o, in modo più compatto: x = y = 0
>>> for z in range(9):
...     if z % 2 == 0 : x += 1
...     if z % 2 == 1 : y += 1
Ce ne sono altri, più compatti ma non per questo molto diversi nella sostanza, tipo:
>>> x = sum([1 for z in range(9) if z%2==0])
>>> y = sum([1 for z in range(9) if z%2==1])
>>> # o anche
>>> from itertools import count
>>> x = count(0, 2)
>>> y = count(1, 2)
>>> next(x), next(y)
0, 1
>>> next(x), next(y)
2, 3

E ce ne sono anche altri. Ma alla fine tutti per essere usati richiedono la creazione di un oggetto e la sua assegnazione a una variabile. Perché Python funziona così. Niente oggetti = niente lavoro. E niente variabili = niente oggetti. Come ti ho spiegato.


Ma mi sto ripetendo. In ogni caso, se pensi che quello che vuoi tu manca in Python, non ti resta che spiegare chiaramente quello che vorresti (non a parole: con il codice) e chiedere che venga aggiunto (c'è una procedura apposta). Se la comunità Python lo riterrà effettivamente una buona idea, vedrai che lo aggiungerà.







ciao Ric, non c'era bisogno assolutissimamente del sorry per carità, anzi mi dispiace se hai ritenuto che fosse necessario :batti5:


non sapevo ci fosse una procedura apposita, sarebbe una bella cosa se una mia idea fosse accettata ed inserira in Python :fingers-crossed:


mi dovrò dare da fare allora, anche se già so chissà quante problematiche ci saranno dietro da superare che non conosco :D

nel frattempo ti ringrazio per tutte le spiegazioni ed esempi di codici postati ps ottimo metodo "x = y = 0" adesso mi è chiaro :ok:

non sapevo ci fosse una procedura apposita
Oh, certo che sì: https://www.python.org/dev/peps/pep-0001/

sarebbe una bella cosa se una mia idea fosse accettata ed inserira in Python
Certamente. Fatti sotto, allora!



ciao Ric giusto per info ho postato una bozza di

quello che avevo in mente, è tipo una cosa simile:

class Increase:
	def __init__(self):
		self.x = list()
	def increase(self, y):
		self.x.append(y)
	def tell_me(self, z):
		return self.x.count(z)
i = Increase()
incr = i.increase
tell = i.tell_me

for j in range(9):
	if j % 2 == 0 : incr("a")
	if j % 2 == 1 : incr("b")

print(tell("a"))  # output:5
print(tell("b"))  # output:4
ovviamente queste poche righe che ho scritto è giusto per dare un'idea

poi non saprei se in determinati casi una cosa del genere possa andare bene

ma credo che il team di Python riuscirebbe a risolvere i vari problemi dei casi




ovviamente come dicevi in una tua risposta qual'è il problema di fare x=0 e poi x+=1

nessun problema, ma come hai anche detto si può fare una cosa "in altri 1000 modi"

qui nasceva la mia domanda: come mai nessuno ha mai pensato ad una cosa simile?




ps veramente poi chissà, se una soluzione come questa sia fattibile? nel caso chiedo venia....
> quello che avevo in mente, è tipo una cosa simile

Sì, è copiato quasi esattamente da quello che avevo scritto io, solo che è peggio perché usa inutilmente una lista, invece di un più economico contatore.


>poi non saprei se in determinati casi una cosa del genere possa andare bene

>ma credo che il team di Python riuscirebbe a risolvere i vari problemi dei casi


Ehm no, temo di doverti dare un dispiacere ma guarda che non funziona in questo modo. Non è che puoi mandargli una roba come questa e poi dire "vabbè ragazzi, io vi ho dato l'idea, adesso sbrigatevela voi con i dettagli". Devi formulare una proposta molto più articolata e dettagliata. Il lavoro ce lo devi mettere tu.


> qui nasceva la mia domanda: come mai nessuno ha mai pensato ad una cosa simile?


OTTIMA domanda davvero. Se ti mettessi d'impegno anche solo a cercare di rispondere a questa domanda, credo che impareresti moltissimo sul design del software.


> veramente poi chissà, se una soluzione come questa sia fattibile?

Tecnicamente fattibile lo è di certo.

> Tecnicamente fattibile lo è di certo.
ed è questo che mi interessava sapere per me l'input è dato e se mi dici che tecnicamente è fattibile sono apposto cosi, non sono io un "Python Developer"

> Sì, è copiato quasi esattamente da quello che avevo scritto io, solo che è peggio perché usa inutilmente una lista, invece di un più economico contatore.
beh se la strada per creare una classe che inizializza tramite un costruttore e che contenga due funzioni, io non ci posso fare nulla se la sintassi è questa.
poi se ricordi, nelle mie spiegazioni di come dovesse funzionare avevo accennato al problema che occupasse più memoria avendo già in mente questo
non a caso di script simili per me non è la prima volta, per questo insistevo nel "spiegarmi" ritenendo superfluo scrivere 4 righe. infatti poi hai detto:

> Non è che puoi mandargli una roba come questa
beh io non posso andare oltre, e francamente ti dico che anche questa soluzione con la lista non'è che mi piaccia più di tanto anzi preferirei altro
se puoi ottenere lo stesso risultato in un'altro modo, senza usare le liste ne sarei veramente contento. può darsi che l'ha includeranno nella versione 3.8
magari scrivendo: ideata da "pypy" e sviluppata da "RicPol". questo sarebbe veramente fico :ok:

ovviamente non poteva mancare il mio solito ps: inserendo questo codice in un file specifico di Python e richiamandolo dovrebbe funzionare? e nel caso quale file?


--- Ultima modifica di pypy in data 2018-11-08 18:22:47 ---
> se mi dici che tecnicamente è fattibile sono apposto cosi

E' tecnicamente fattibile perché lo hai appena fatto, no? Anzi, lo avevo fatto io. Ma non è che adesso puoi tirarti indietro. Scrivi codice, migliora, studia, riflettici sopra. Altrimenti non impari.


> se la strada per creare una classe che inizializza tramite un
costruttore e che contenga due funzioni, io non ci posso fare nulla se
la sintassi è questa.


Ci sono altre strade, oltre a quella che ho fatto io. Prova a fare tu qualcosa di originale.


> nelle mie spiegazioni di come dovesse funzionare avevo accennato al
problema che occupasse più memoria avendo già in mente questo

Se "avevi già in mente questo", allora bastava usare un normale accumulatore invece di una lista. Come ti ho già spiegato. Come ti ho già fatto vedere. Non è che basta ogni volta (ma sempre dopo) dire "eh ma lo sapevo già, l'avevo già detto, l'avevo già previsto, io". Le chiacchiere stanno a zero. Prova a migliorare il codice, invece.


> se puoi ottenere lo stesso risultato in un'altro modo, senza usare le liste ne sarei veramente contento

Sì certo che puoi. Come ti ho già fatto vedere. Copia meglio quello che ho già scritto.


> magari scrivendo: ideata da "pypy" e sviluppata da "RicPol". questo sarebbe veramente fico

Ecco, no. Questo proprio no.




Ric vedo che hai una fissa sul dire che ti si copiano i codici ahahahah

quindi seguendo il tuo ragionamento copia anche chi studia su un libro oppure chi fa un corso, in pratica l'insegnante spiega come copiare meglio?

a questo punto anche chi scrive un libro, copia dalla guida di Python. in pratica chi sa fare più cose è perchè ha copiato più codici da più fonti?

ho usato il tuo codice per risolvere il problema che avevi "anche" evidenziato <Se devi avere due o più incrementatori attivi come fai?>

infatti mi chiesi come mai con la tua esperienza avevi sorto il problema senza risolverlo, anche copiare le idee bisogna farlo bene




ricordo come già detto, che di esempi per fare ciò c'è ne sono davvero tanti e di tutti i tipi, quindi potevo farlo senza problemi

il tuo codice l'ho modificato per farti un esempio pratico sul funzionamento, essendo che con le parole non c'è stato verso

oltre al fatto che usando una lista non mi piace come soluzione, confermando che è fattibile; rimane sempre la domanda iniziale.
Sigh.


Guarda, se posto un pezzo di codice è abbastanza ovvio che uno se vuole può usarlo, no? Il problema è che quel codice è una stupidaggine e che l'intera idea è una stupidaggine. Il secondo problema è che tu l'hai copiato senza neanche capire che lo stavi peggiorando. Il terzo e più grave problema è che stai parlando con disinvoltura di aggiungere feature a python ma intanto non ti ho ancora visto scrivere una singola linea di codice tuo che spieghi come e cosa vuoi fare (nonostante le ripetute insistenze).


Poi intendiamoci: se non impari a programmare in Python a me non viene alcun danno. Quindi vedi un po' tu che cosa preferisci, per me è davvero la stessa cosa.





Quindi, vediamo di darci da fare, vuoi? Come ho già detto, l'implementazione che ho proposto e che tu hai copiato è stupida, per molti motivi. Un motivo è che non puoi usare due incrementatori per volta. E tu (ma come sempre, dopo) hai detto che in effetti è chiaro che invece ti piacerebbe usare due o più incrementatori per volta. E io allora ti ho detto che si potrebbe fare una cosa che si usa in questo modo:
>>> incrementa("x") # nota le virgolette, perché la variabile x non esiste ancora
>>> incrementa("x")
>>> incrementa("y") # un secondo incrementatore
>>> x
2
>>> y
1
Un sistema del genere ti permetterebbe di usare più incrementatori contemporaneamente. Sarebbe comunque un'idea poco furba, ma almeno sarebbe un pochino più furba.


Solo che questa volta non ti ho messo l'implementazione di questa idea. Quindi non hai niente da cui... ehm... prendere spunto. Ed ecco la mia piccola sfida per te: scrivi una implementazione per questa cosa, da solo. Tra l'altro, se rileggi questo thread, trovi già tutto gli elementi che ti servono.


Se non vedo del codice scritto da te, dal mio punto di vista tutto quello che dovevo dire su questo problema ormai l'ho detto, quindi il thread può considerarsi chiuso.



Pagina: Indietro 1 2 3 Avanti



La discussione è chiusa.