Viendo una condición en una función Python, que puede resultar rara a simple vista, luego cree algo parecido en gambas,
pero sin esa condición.
Se trata de averiguar los números primos. En los bucles Python podemos usar una función llamada (range), la cual siempre
devuelve un número menos.
Así que si decimos range(2,10) , el intervalo es entre 2 y 9.
Veréis, esta es la función en Python y la parte desde donde se llama. Luego os muestro lo mismo en Gambas.
#!/usr/bin/python3
# Funciones
# Con las funciones reutilizamos el código, evitando la repeticion de este
# Es primo
def esprimo(n):
if n == 1:
print ('1 es especial')
return False
for x in range(2,n):
if n % x == 0:
print ('{} igual {} x {}'.format(n, x, n // x))
return False
else:
print (n, 'es un número primo')
return True
for n in range(1,20):
esprimo(n)
# Funciones
# Con las funciones reutilizamos el código, evitando la repeticion de este
# Es primo
def esprimo(n):
if n == 1:
print ('1 es especial')
return False
for x in range(2,n):
if n % x == 0:
print ('{} igual {} x {}'.format(n, x, n // x))
return False
else:
print (n, 'es un número primo')
return True
for n in range(1,20):
esprimo(n)
¿ Os habéis fijado en el ultimo else ?. ¿ Raro no ?.
( No he logrado entender ese else, ya que no parece hacer gran cosa, si lo elimino y quito la indetación a las lineas siguientes hace lo mismo)..
Como no sea algo propio para la demostración del código del autor.
Si no entendéis alguna instrucción del código os lo explico. Es sencillo.
Ahora bien, hagamos el mismo código en Gambas.
Public Sub Main()
Dim n As Integer
For n = 1 To 20
esprimo(n)
Next
End
Public Function esprimo(n As Integer)
Dim x As Integer
If n = 1 Then
Print "1 es especial"
Return
Endif
For x = 2 To n - 1
If n Mod x = 0 Then
Print Subst("&1 igual &2 x &3", n, x, n \ x)
Return
Endif
Next
Print (n & " es un número primo")
Return
End
Dim n As Integer
For n = 1 To 20
esprimo(n)
Next
End
Public Function esprimo(n As Integer)
Dim x As Integer
If n = 1 Then
Print "1 es especial"
Return
Endif
For x = 2 To n - 1
If n Mod x = 0 Then
Print Subst("&1 igual &2 x &3", n, x, n \ x)
Return
Endif
Next
Print (n & " es un número primo")
Return
End
Como era de esperar, necesitaba usar n - 1, sin eso, no funciona.
Las salida que se obtiene es:
Citar:
Cuando realiza el producto (no es un número primo) sale de la función con la instrucción return.
Saludos