A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Afirmaciones

30/31
Recursos

Aportes 201

Preguntas 12

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Para un mejor manejo 馃槂

def primera_letra(lista_palabras):
    primeras_letras = []
    
    for palabra in lista_palabras:
        try:
            assert type(palabra) == str, f'{palabra} no es String'
            assert len(palabra) > 0 , 'No se permiten vacios'
            primeras_letras.append(palabra[0])
        except AssertionError as e:
            print(e)

    return primeras_letras


lista = ['Angelo',5.5, '', 2 , '43952353', 0.35]
print('Primeras letras validas son : ' , primera_letra(lista))

Afirmaciones
Las afirmaciones son un mecanismo en la que podemos determinar si una afirmaci贸n se cumple o no se cumple y poder seguir adelante con la ejecuci贸n de nuestro programa o darle t茅rmino.

Las afirmaciones es un m茅todo de programaci贸n defensiva, esto significa que nos estamos preparando para verificar que los tipos de inputs de nuestro programa es del tipo que nosotros esperamos. Estos tambi茅n nos sirven para debuggear.

Para realizar una afirmaci贸n en nuestro programa lo hacemos con la expresi贸n assert <expresion booleana>, <mensaje de error>.

def primera_letra(lista_de_palabras):
    primeras_letras = []

    for palabra in lista_de_palabras:
        assert type(palabra) == str, f'{palabra} no es str'
        assert len(palabra) > 0, 'No se permiten str vacios'

        primeras_letras.append(palabra[0])

    return primeras_letras

Este curso lo tom茅 a manera de reforzar conceptos de Python. Este concepto nunca lo he escichado y espro pronto poder aplicarlo. 馃槃

Afirmaciones


Es un mecanismo por el cu谩l podemos determinar si una funci贸n se cumple o no se cumple. Y poder seguir adelante con la ejecuci贸n de nuestro programa o terminar dicha ejecuci贸n.

  • Programaci贸n defensiva
  • Pueden utilizarse para verificar que los tipos sean correctos en una funci贸n.
  • Tambi茅n sirven para debuguear.

Para generarlas tenemos que utlizar el keyword assert y dar una expresi贸n boleana y un mensaje de error

def primera_letra(lista_palabras):
    primeras_letras = []
    
    for palabra in lista_palabras:
        try:
            assert type(palabra) == str, f'{palabra} no es String'
            assert len(palabra) > 0 , 'No se permiten vacios'
            primeras_letras.append(palabra[0])
        except AssertionError as e:
            print(e)

    return primeras_letras

No tenia conocimiento de la existencia de los assert, sin embargo hacia algo muy parecido cuando programaba PLC ya que tenia que hacer condiciones de seguridad que previnieran un error en la ejecuci贸n de la tarea.

Sobre programaci贸n defensiva encontr茅 esta entrada que me pareci贸 bien estructurada:

https://aslisach.in/2019/what-is-defensive-programming/

Que incre铆ble clase, jamas sabia escuchado de los (assert) , pero creo que de ahora en adelante voy a utilizarlos muchos.
Por eso es que repito, que aun siendo un veterano en algo, es bueno ver como lo miran los principiantes para aprender cosas nueva.

Si la condicion del assert es falsa nos arroja un error y el programa se detiene si no lo capturamos con

try:
     <code conflictivo> 
except Exception:
     <codigo manejador> 

Si no lo detecta sigue con su vida. : )

Yo ya hac铆a esto pero desconoc铆a assert, me ahorraste muchas lineas de c贸digo en el futuro 馃槃

WOW python es realmente incre铆ble, bueno con los assert nunca lo he utilizado porque es mi primera vez que escribo en este lenguaje pero me parece fascinante todo lo que estoy aprendiendo de python.

Ya casi te tengo Data Tree Gardener 馃槃

Ejercicio resuelto aplicando afirmaciones

Hemos usado el sistema de afirmaciones pero por el lado de PHP a trav茅s del framework Laravel usando las validaciones en peticiones (requests) Http que llegan al backend.

https://laravel.com/docs/7.x/validation

Nunca escuche del keyword 鈥榓ssert鈥 ya que soy nuevo en la programaci贸n. pero es una forma muy interesante de 鈥榗ontrolar鈥 nuestro c贸digo o programa

C贸digo que utilic茅 en Visual.

def primera_letra(lista_de_palabras):
    primeras_letras = []

    for palabra in lista_de_palabras:
        assert type(palabra) == str, f'{palabra} no es de tipo str'
        assert len(palabra) > 0, 'No se permiten str vacios'

        primeras_letras.append(palabra[0])

    return primeras_letras


lista = ['hola', 'que', 'hace']
palabras = list(primera_letra(lista))
print(palabras)```

Me explicaron esto en el 2006, no lo llamaron programaci贸n defensiva era solamente estar atento a que el usuario no nos enga帽ara mandando inputs extra帽os y buggeando el programa.

Para convertir cada primera letra en mayuscula:

def primera_letra(lista_de_palabras):
    primeras_letras = []
    
    for palabra in lista_de_palabras:
        assert type(palabra) == str, f'{palabra} no es str'
        assert len(palabra) > 0, 'no se permiten srt vacios'
        
        primeras_letras.append(palabra[0].capitalize())
            
    return primeras_letras

Afirmaciones:
*Programaci贸n defensiva.
*Pueden utilizarse para verificar que los tipos sean correctos en una funci贸n.
*Tambi茅n sirven para debuguear.

ejemplo:
assert <expresi贸n booleana>, <mensaje de error>

assert numero>0, 鈥渆l n煤mero no es mayor que cero鈥
.
Si cumple la condici贸n NO muestra nada.
Si NO cumple la condici贸n muestra el mensaje.

Primera vez que escucha assert.


def primera_letra_enlista(lista_de_palabras):
    primeras_letras=[]

    for palabra in lista_de_palabras:
        assert type(palabra)==str, f'{palabra} no es str'
        assert len(palabra)>0, 'No se permiten str vacios'

        primeras_letras.append(palabra[0])

    return primeras_letras```

Nunca dejes de Aprender

Nunca hab铆a escuchado hablar de assert鈥ero excelente saber t茅cnicamente para que se utiliza.

afirmaciones es programaci贸n defensiva poner trabas en los imputs

No use antes los assert pero me parece una herramienta muy buena inclusive, como dec铆a David, para enfrontar bugs!

primera vez que escucho de ellos pero me parecen muy 煤tiles para complementar lo que hemos aprendido!

# -*_ coding:utf-8 -*-

lista_palabras = []
lista_primeras_letras = []

for i in range(5):
    word=input('Escribi una palabra: ')
    lista_palabras.append(word)
    

for palabra in lista_palabras:
    assert type(palabra) == str, f'{palabra} no es str'
    assert len(palabra) > 0, 'No se permiten str vacios'

    lista_primeras_letras.append(palabra[0])

print(lista_palabras,lista_primeras_letras)

Una forma m谩s sencilla que utilizar los 鈥渋f鈥

驴Podr铆a decir que assert es equivalente a una validaci贸n?

Ac谩 mi c贸digo de esta clases!

def primera_letra(lista_de_palabras):
    primeras_letras = []
    
    for palabra in lista_de_palabras:
        assert type(palabra) == str, f'{palabra} no es str'
        assert len(palabra) > 0, 'no se permiten srt vacios'
        
        primeras_letras.append(palabra[0])
            
    return primeras_letras

if __name__ == '__main__':
    hola = 'hola'
    lista_de_palabras = [hola]
    
    print(primera_letra(lista_de_palabras))

Tercera prueba: ingresando una lista con palabras adecuadas a las condiciones.

Afirmaciones:

  • Verificamos una condicion a partir de la cual decidimos si terminamos el programa o continuamos con la ejecucion
  • Metodo de programacion defensiva
  • Sirven para debuguear

Aqu铆 les muestro el c贸digo para manejo de asserts con el ejemplo del profesor:

def primera_letra(lista_de_palabras):
    primeras_letras = []

    for palabra in lista_de_palabras:
        try:
            assert type(palabra) == str, f'{palabra} no es str' 
            assert len(palabra) > 0, 'No se permiten str vacios'

            primeras_letras.append(palabra[0])
            
        except AssertionError as e:
            print(e)

    return primeras_letras


def run():

    lista = []
    for i in range(5):
        lista.append(input('Escribe las palabras: '))

    otra_lista = primera_letra(lista)
    print(otra_lista)


if __name__ == '__main__':
    run()

assert

se explica un poco sobre esta keyword

Otras funcionalidades del assert son:

  • Su uso en testing.
  • Su uso en funciones (como el ejemplo que vimos).
  • Su uso en clases.

En esta pagina puedes encontrar ejemplos con los que puedes interactuar sobre este tema.
https://www.w3schools.com/python/ref_keyword_assert.asp?msclkid=92071a35ac7611ec9bfb3a726660c3d0

Creo que este es como el throw de otros lenguajes de programaci贸n porque genera una excepci贸n tipo AssertionError

Hice que el algoritmo devolviera una letra

Un concepto nuevo:Afirmaciones
Recien estoy adentrandole a python y me parece un concepto nuevo, lo seguire estudiando y ver que ventajas tiene.

No conoc铆a nada acerca de los asserts, muy interesante.

Les comparto mis apuntes de esta clase
Notas

Para realizar una afirmaci贸n en nuestro programa lo hacemos con la expresi贸n assert <expresion booleana>, <mensaje de error>.

Las afirmaciones es un m茅todo de programaci贸n defensiva, esto significa que nos estamos preparando para verificar que los tipos de inputs de nuestro programa es del tipo que nosotros esperamos.

Las afirmaciones son un mecanismo en la que podemos determinar si una afirmaci贸n se cumple o no se cumple y poder seguir adelante con la ejecuci贸n de nuestro programa o darle t茅rmino.

En mi caso no los conoc铆a yo para esto usaba if statements y me parece muy bueno conocerlos y saber sobre el tema, ser谩n muy 煤tiles para usarlos dentro de nuestros programas en Python

La verdad nunca escuche sobre los asserts, me parece una forma mucho m谩s eficiente de programar que tratar de evitar los errores con if y elif鈥檚.

Practicamente es un operador ternario, en conjuncion con un raise de python https://es.wikipedia.org/wiki/Operador_ternario#:~:text=En inform谩tica un operador ternario,%2C C%2C C%23 o Java.

Me cost贸 trabajo entender c贸mo funciona pero creo que ya

def primera_letra(lista_de_palabras):
    primeras_letras = []

    for palabra in lista_de_palabras:
        try:
            assert type(palabra) == str, f'{palabra}: no es un string'
            assert len(palabra) > 0, 'No se permiten strings vacios'
            primeras_letras.append(palabra[0])
        except AssertionError as e:
            print(e)

    return primeras_letras

mi_lista = ['oso', 2, 'Carlos', 'arena', True, 5332, 'Youtube', '', 'cinco', 5,'pelusa', False]

print(f'Los caracteres correspondientes de la posici贸n solicitada son: ', primera_letra(mi_lista))


2: no es un string
True: no es un string
5332: no es un string
No se permiten strings vacios
5: no es un string
False: no es un string
Los caracteres correspondientes de la posici贸n solicitada son:  ['o', 'C', 'a', 'Y', 'c', 'p']

Me ha costado un poco entender las afirmaci贸nes. Aqu铆 un enlace que me permite entenderlas: https://ellibrodepython.com/assert-python

Concepto


鈥 鈥忊忊
Las afirmaciones son un mecanismo en la que podemos determinar si una afirmaci贸n se cumple o no se cumple y poder seguir adelante con la ejecuci贸n de nuestro programa o terminar dicha ejecuci贸n. Es adem谩s un m茅todo que nos asegura una programaci贸n defensiva, es decir, mediante este estilo nos podemos preparar por inesperados objetos que puedan ser una fuente de bugs para nuestro programa. Como por ejemplo, s铆 realizamos un programa que su l贸gica funcione en base a enteros, y un usuario ingresara un objeto != a enteros, nuestro programa tendr铆a errores o a煤n peor, bugs. Sin embargo, un punto principal a tener en cuenta es que este m茅todo tambi茅n sirve para debuggear, cosa similar con lo que har铆amos manualmente con el print() statement.
鈥 鈥忊忊

Afirmaciones en el c贸digo


鈥 鈥忊忊
La forma de generar afirmaciones es mediante el uso de keyword assert, con esta palabra reservada podemos formar estructuras similares al if. Veamos como utilizarlos en el siguiente c贸digo:

Si el assert funciona, se ejecutar谩 la expresi贸n; de lo contrario el flujo de nuestro programa seguir谩 corriendo normalmente.

Dejo un ejemplo de asserts que se vio en el curso intermedio de python 馃槃

La declaraci贸n de afirmaci贸n de Python es una ayuda de depuraci贸n, no un mecanismo para manejar errores de tiempo de ejecuci贸n. El objetivo de usar aserciones es permitir que los desarrolladores encuentren la causa ra铆z probable de un error m谩s r谩pidamente.

La forma mas com煤n de usar try except que he visto hasta ahora es par Validaci贸n de datos

Les dejo un ejemplo en combinaci贸n con el ciclo while true:
馃憣馃徎

def lee_entero():
   while True: # MIENTRAS NO HAYA RETURN SE REPETIRA EL CICLO
       entrada = input("Escribe un numero entero: ")
       try:
           entrada = int(entrada)
           return entrada
       except ValueError:
           print ("La entrada es incorrecta: escribe un numero entero")

lee_entero()

Me pueden decir si la especificaci贸n de la funci贸n est谩 bien hecha? Graciaaas

def primera_letra(lista_palabras):
    """ Te devuelve una lista con la primera letra de lista_palabras

    param list lista_palabras una lista de Strings
    returns lista de las primera letra de cada elemento de lista_palabras
    """

Yo no hab铆a escuchado nunca de los asserts. En mi experiencia en sitios web d贸nde necesitas registrar tus datos, no son muy utilizados, a veces es posible poder colocar datos incorrectos como <espacios> o <puntos> .

No hab铆a escuchado antes los assert, si los hubiese conocido antes, tal vez no me hubiese sentido tan frustrado pero de igual forma son un poco dif铆ciles de digerir.

# assert <expresion boolean>, <mensaje error>

def primera_letra(lista_de_palabras):
    primeras_letras = []


    for palabra in lista_de_palabras:
        try:
                
            assert type(palabra) == str, f'{palabra} no es str'
            assert type(palabra) != bool, f'{palabra} es un boleano y los bueleanos no son permitidos' 
            assert len(palabra) > 0, 'No se permiten str vac铆os'

            primeras_letras.append(palabra[0])
        
        except AssertionError as e:
            print(e)

    return primeras_letras    


lista = ['prueba', 2365, '"$ghs', '26762', True]    
print('Primeras letras v谩lidas son: ', primera_letra(lista))

Assert FlowChart

Articulo completo aqu铆

Normalmente trato de evitar las excepciones en todo nivel. Siempre uso un return (o pass) cuando no se cumple una condicion.

Lanzar una excepcion tiene bastantes implicaciones en bajo nivel (normalmente trabajo Java o C++, asumo que es extensible a Python)

Notas

#Afirmaciones

#Si una condicion es falsa, un error sera disparado al usuario.

#Ejemplo:

#assert <expresion booleana>, <mensaje de error>

def primera_letra(lista_de_palabras):
    primeras_letras = []
    
    for palabra in lista_de_palabras:
        assert type(palabra) == str, f'{palabra} nno es str'
        assert len(palabra) > 0, 'No se permiten str vacios'
        
        primeras_letras.append(palabra[0])
        
    return primeras_letras

lista = ['hello', '', 'pedro']
primera_letra(lista)

Reto

def divide(n, d):
    assert d != 0, 'Al dividir por cero nuestro resultado es indeterminado'
    
    return n / d


numerador = 5
denominador = 0

resultado = divide(numerador, denominador)
print(resultado)

Nunca escuche sobre el 鈥淎ssert鈥, muy informativo profe.

Muy interesante, nunca vi algo relacionado con 鈥榓ssert麓, en cada tema me siento m谩s atra铆do hacia Python.

Si tenemos dos assert statements estamos tratando el objeto dos veces?
Si tenemos 1000 assert estamos tratando el mismo objeto 1000 veces?
Como afecta esto al tiempo de ejecucion del codigo?

Hice uno con numeros, pero la idea es la misma

def numeros(lista_numeros):
    primeros_numeros = []

    for numeros in lista_numeros:
        try:
            assert type(numeros) == int, f'"{numeros}" no es un entero'
            primeros_numeros.append(numeros)
        except AssertionError as e:
            print(e)

    return primeros_numeros


lista_numeros = ["hola", 54458, 874512148, 87821, 5.4, "Mexico", 8.78, 95248, "Palabras"]
print('Numeros validos: ', numeros(lista_numeros))```

Buenas, programando con unittest me ha pasado algo muy curioso. Me gustaria saber si es posible el guardar en una variable la ejecucion de un assert de la siguiente manera.

A煤n no conoc铆a assert pero creo que es lo que estaba buscando para mejorar unos mini-juegos y asegurarme que el usuario no ingrese valores incorrectos, por lo tanto no se genere error y salga del programa.

  • Las afirmaciones es un m茅todo de programaci贸n de programaci贸n defensiva.
  • Pueden usarse para verificar que los tipos de datos sean correctos.
  • Tambi茅n pueden usarse para realizar debug.
assert condicion, mensaje

Con estos m茅todos, manejas mejor el comportamiento del programa, para evitar posibles errores y bugs.

Muy interesantes pues nunca hab铆a escuchado de los asserts pero me parece que estas sentencias pueden ser muy 煤tiles.

No conoc铆a el concepto de afirmaciones, pero me ha gustado mucho su utilidad.

Es muy parecido o igual al operador condicional ternario en JavaScript.

expresion ? true_value : false_value;

nunca habia escuchado de los assert鈥 donde se encuentra la documentaci贸n??

Solo habia esuchado de los try
esta cool

Es muy buen tema, en trabajos que he realizado en Python eh tenido que lidiar con lecturas del puerto Serial sin saber como manejar la entrada de datos que no esperaba, pero con esto ya puedo hacerlo sin probelmas.

Ni idea de los assert ten铆a

Las afirmaciones son declaraciones que afirman o declaran un hecho con confianza en su programa. Por ejemplo, mientras escribe una funci贸n de divisi贸n, est谩 seguro de que el divisor no deber铆a ser cero, afirma que el divisor no es igual a cero.

Las afirmaciones son simplemente expresiones booleanas que verifican si las condiciones devuelven verdadero o no. Si es cierto, el programa no hace nada y pasa a la siguiente l铆nea de c贸digo. Sin embargo, si es falso, el programa se detiene y arroja un error.

Existe algo similar en JS?

Interesante forma de adelantarte de los errores

Este tema es nuevo para mi; pero se ve muy 煤til para cubrirnos.Muy Buen Curso David.

[1:43] Para implementarlas debemos usar el keyword assert, dar una condici贸n boobleana (que evalue verdadeo o falso) y un mensaje de error a devolver si la asersion no funciona, si la asercion funciona el programa seguira funcionando.

Afirmaciones: es un mecanismo mediante el cual podemos determinar si una condici贸n se cumple o no se cumple y poder seguir adelante o terminar dicha instrucci贸n. Es un m茅todo de programaci贸n defensiva.

[0:56] Los resultados que el programa nos puede dar dependera que reciba los tipos correctos.

Key Points to Remember
Assertions are the condition or boolean expression which are always supposed to be true in the code.
assert statement takes an expression and optional message.
assert statement is used to check types, values of argument and the output of the function.
assert statement is used as debugging tool as it halts the program at the point where an error occurs

Usos cuando se est谩 optimizando c贸digo.

assert statements are great for helping you to refactor and optimize your code with greater confidence that you have preserved correctness

A refactoring or optimization is when you re-write an already-working block of code (say, a function) to make it more maintainable (for refactoring) or to improve performance (for optimization).
Say that you started with a function f(x) and refactored/optimized it to a new version f2(x). You want f(x) and f2(x) to behave identically on all inputs x (at least for those that satisfy pre-conditions).
You can add assert(f(x) == f2(x)) to your code in the appropriate places where f() was originally called (with the appropriate variables/values substituted for x, of course).
Now whenever your program executes and passes that assertion, you can have increased confidence that the two versions of the function behave identically.
It鈥檚 often difficult to convince yourself that two versions of a function work in identical ways just by manually inspecting the source code; this strategy defers the hard work to the runtime system! All you need to do is to run your program in some realistic ways to try to exercise that assertion.
Of course, you won鈥檛 actually get the performance benefits with the assertion in place since the original (presumably slow) f() is still being called; however, for testing purposes, you should care much more about correctness than performance.
Once you are confident that f() and f2() behave identically on many values of x during normal program executions, you can comment out the assertion and exclusively use f2(x) everywhere rather than f(x), thus completing your refactoring.

as a recap for refactoring/optimizing with assertions:

    // original code snippet:
      y = f(x);

    // code while refactoring and testing:
      assert(f(x) == f2(x));
      y = f2(x);

    // code after refactoring completed:
      y = f2(x);

Alguna vez tuve un profesor que me dec铆a 鈥渄ebemos crear software anti-bobos鈥 (bobos = estupidos 贸 similar en Colombia). Porque siempre est谩n aquellos que quieren ver 鈥渜u茅 hace el programa si hacen esto o aquello鈥. Me encanta ese tipo de gente xd

La afirmaci贸n de afirmaci贸n existe en casi todos los lenguajes de progtwigci贸n. Ayuda a detectar problemas al principio de su progtwig, donde la causa es clara, y no m谩s tarde como un efecto secundario de alguna otra operaci贸n.

Cuando tu lo hagas鈥

assert condition
鈥 le est谩 diciendo al progtwig que pruebe esa condici贸n, e inmediatamente active un error si la condici贸n es falsa.

Antes de esta clase no sabia que exist铆an los assserts 馃槄

Hab铆a o铆do de normalizar las funciones en otros lenguajes de programaci贸n, en este caso, el assert y los valores por default es una gran manera de blindar nuestras funciones.

Hola, tengo una duda, en vez de len(palabra) > 0 驴no deber铆amos poner len(palabra) == 0 ?

no habia escuchado sobre los assert, soy nuevo en python, pero este curso me ha dado la intro para poder sumirgirme mas en 茅l.

No habia escuchado de los asserts

Realmente no habia escuchado de los assert

Programaci贸n defensiva: Asegurar que quien consuma el algoritmo, funci贸n , servicio cometa un error enviando datos mal.
Validar que las entradas son correctas y validas antes de computar.

un poco de juego con el codigo:

def palabras(lista_palabras):
primeras_letras = []

palabra = ' '

while palabra != 'salir':
    for palabra in lista_palabras:
        assert type(palabra) == str, f'{palabra} no es str'
        assert len(palabra) > 0, 'no se permiten str vacios'

        primeras_letras.append(palabra[0])
    return primeras_letras

lista_pa =[]
for i in range(5):
word = input('Escriba una palabra: ')
lista_pa.append(word)

print(lista_pa)

lista_nueva = palabras(lista_pa)
print(lista_nueva)

No entend铆 qu茅 son los asserts, aiuda

Asegurarse de prevenir el error.

El assert es una instruccion de Python que te permite definir condiciones que deban cumplirse siempre. En caso que la expresion booleana sea True assert no hace nada y en caso de False dispara una excepcion.

assert 5 == 5 assert 6 < 2 Traceback (most recent call last): File "<stdin>", line 1, in ? AssertionError

Ni idea que exist铆an los asserts.