> orsomannaro wrote: >> Infatti per ora ho risolto cosi': >> >> def str2int(str): return int(str) if str.isdigit() else None >> >> numero1 = str2int(get_num(...)) >> numero2 = str2int(get_num(...)) >> numero3 = str2int(get_num(...)) >> ... >> if numero1 and numero2 and numero3 and ...: >> my_obj.codice1 = numero1 >> my_obj.codice2 = numero2 >> my_obj.codice3 = numero3
No, no, no, che orrore. Blindare la cardinalità dei dati nel codice in questo modo è una bestemmia. I fondamentali, per cortesia. Stefano Dal Pra wrote: > Ciao, ti propongo questa variante: > > str2int = lambda str : str.isdigit() and int(str) > n = 0 > while True: > n += 1 > k = str2int(get_num) > if not k: break > setattr(my_obj, 'codice%s'%n, k) E questa implementa in modo diverso parte dei presupposti sbagliati della precedente. Un buon approccio è quello di Marco M., col suo elegante uso di yield per separare il concern dell'estrazione dei numeri da quello della loro successiva elaborazione. Come Gianni V., neanch'io userei isdigit ma proverei direttamente a trasformare le stringhe in numeri, ed userei un valore sentinella ritornato da get_num, ad esempio None, per terminare l'elaborazione: >>> def iter_numeri(): ... while True: ... val = get_num() ... if val is None: ... raise StopIteration ... try: ... yield int(val) ... except ValueError: ... pass ... ... for num in iter_numeri(): ... elabora_numero(num) Si potrebbe anche semplificare sollevando StopIteration direttamente dentro get_num ma non mi piace, mischia i livelli. -- Nicola Larosa - http://www.tekNico.net/ The invisible hand of the free market, it turns out, is attached to an invisible idiot. - Dmitry Orlov, April 2012 _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python