continue in Python

Una storiella ma forse può essere utile per qualcuno. Questa è capitata per via della standardizzazione: “d’ora in poi tutto in Python (e Java e Octave e …)“. Inoltre a peggiorare le cose c’era il capo che continuava a girare nei paraggi, in questi casi sapete come ci si deve comportare, vero?

geek

Il codice era più complesso, questo è solo un esempio semplificato al massimo.

#!/usr/bin/python
# -*- coding: utf-8 -*-

n = 0
while n < 6:
	n += 1
	c = n % 3
	if c == 0:
		print n, "###"
	elif c == 1:
		print n, c, "*"
	else:
		print n, "**"
print "OK!"

0

In Python non esiste l’istruzione switch o case o cond, solo l’if. Quindi l’esempio è corretto, e funziona.

Però salta fuori che bisogna fare una modifica: nel caso in cui c vale 0 non bisogna far nulla.
Il geek ha modificato il codice così (prudentemente ha commentato anziché cancellare l’istruzione divenuta inutile):

#!/usr/bin/python
# -*- coding: utf-8 -*-

n = 0
while n < 6:
	n += 1
	c = n % 3
	if c == 0:
		#print n, "###"
	elif c == 1:
		print n, c, "*"
	else:
		print n, "**"
print "OK!"

1

Ops! non funziona, Python vuole qualcosa da fare, anche quando vogliamo non faccia nulla.

C’era il capo che girava e allora ecco la soluzione:

#!/usr/bin/python
# -*- coding: utf-8 -*-

n = 0
while n < 6:
	n += 1
	c = n % 3
	if c == 0:
		#print n, "###"
		k = 1
	elif c == 1:
		print n, c, "*"
	else:
		print n, "**"
print "OK!"

2

Sì, inserire un’istruzione qualunque dove Python la vuole, funziona, il capo queste cose non le guarda, caso risolto.

Però, secondo me, non vale. C’è il manuale online, dai, prova a cercare “continue“, c’è in altri linguaggi e fa proprio quello che vogliamo:

continue may only occur syntactically nested in a for or while loop, but not nested in a function or class definition or finally clause within that loop. It continues with the next cycle of the nearest enclosing loop.

Verifica:

#!/usr/bin/python
# -*- coding: utf-8 -*-

n = 0
while n < 6:
	n += 1
	c = n % 3
	if c == 0:
		continue
	elif c == 1:
		print n, c, "*"
	else:
		print n, "**"
print "OK!"

3

OK! Questa può essere intesa come la versione 2014 di “e leggere quel *bip* di manuale!” 🙄

Posta un commento o usa questo indirizzo per il trackback.

Commenti

  • Roberto Gambuzzi  Il 18 febbraio 2014 alle 10:21

    oppure anche un bel ‘pass’ al posto del ‘continue’, giusto nel caso qualcuno in futuro metta del codice dopo lo ‘switch’ e si stupisca che in alcuni casi non venga eseguito…

  • giuseppe  Il 18 febbraio 2014 alle 11:10

    pass?

Trackback

  • pass in Python | Ok, panico su 19 febbraio 2014 alle 10:44

    […] post precedente su continue ha generato un commento che mi sembra il caso di sviluppare. Anche perché voglio […]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: