<commit_before>===============
Revisão Funções
===============


.. image:: img/TWP10_001.jpeg
   :height: 14.925cm
   :width: 9.258cm
   :align: center
   :alt: 

Sejamos mais organizados
========================


.. image:: img/TWP35_001.jpeg
   :height: 13.35cm
   :width: 17.801cm
   :align: center
   :alt: 


Sejamos mais organizados
========================


.. image:: img/TWP35_002.jpeg
   :height: 14.064cm
   :width: 16.601cm
   :align: center
   :alt: 


Sejamos organizados
===================



+ Quando os programas crescem, geralmente o código fica mais complexo
+ Uma forma de gerenciar essa complexidade é usar funções
+ Elas permitem separar ações comuns, assim seu código fica mais fácil
  de ler e mais fácil de manter


O Starbuzz está sem grãos
=========================



+ O diretor da Starbuzz quer uma opção para compra rápida, sem esperar
  abaixar o preço
+ Ao rodar o programa irei perguntar se quer comprar já ou não
+ Se o usuário responder sim, então irei pegar o preço atual e comprar
+ Caso negativo, irei esperar abaixar para menos que 4.74


Sugestão de novo programa
=========================


.. code-block:: python

   import urllib.request
   import time
   opcao = input('Deseja comprar ja? (S/N)')
   if opcao == 'S':
      pagina = urllib.request.urlopen('http://beans.itcarlow.ie/prices-loyalty.html')
      texto = pagina.read().decode('utf8')
      onde = texto.find('>$')
      inicio = onde + 2
      fim = inicio + 4
      preco = float(texto[inicio:fim])
      print('Comprar! Preco: %5.2f' %preco)
   else:
      preco = 99.99
      while preco >= 4.74:
        pagina = urllib.request.urlopen('http://beans.itcarlow.ie/prices-loyalty.html')
        texto = pagina.read().decode('utf8')
        onde = texto.find('>$')
        inicio = onde + 2
        fim = inicio + 4
        preco = float(texto[inicio:fim])
        if preco >= 4.74:
          time.sleep(600)
      print('Comprar! Preco: 5.2%f' %preco)


Programa feio...
================



+ Não duplique seu código...
+ Isso leva ao excesso de código, tornando a manutenção do seu código
  difícil
+ Procure reutilizar seu código
+ Definindo funções faremos reuso de código
+ Qual é a diferença?
+ Se eu tiver que mudar algo, irei alterar em apenas um lugar




Funções
=======



+ Funções são códigos compartilháveis
+ Defino um nome e chamo a função ao longo do programa
+ A função deve ser definida antes de você chamá-la
+ Se você quiser retornar um valor para quem chamou a função deverá
  utilizar o comando return


.. code-block:: python

   import urllib.request
   import time

   def pega_preco():
      pagina = urllib.request.urlopen('http://beans.itcarlow.ie/prices-loyalty.html')
      texto = pagina.read().decode('utf8')
      onde = texto.find('>$')
      inicio = onde + 2
      fim = inicio + 4
      return float(texto[inicio:fim])

   opcao = input('Deseja comprar ja? (S/N)')
   if opcao == 'S':
      preco = pega_preco()
      print('Comprar! Preco: %5.2f' %preco)
   else:
      preco = 99.99
      while preco >= 4.74:
        preco = pega_preco()
        if preco >= 4.74:
          time.sleep(600)
      print('Comprar! Preco: 5.2%f' %preco)



Não existem perguntas idiotas
=============================



+ O comando return é igual ao print? Não, print exibe algo na tela,
  enquanto return devolve um valor para quem chamou a função.
+ Se eu não der return dentro da função, o que ela retorna? None
+ Return sempre deve vir no final da função? Nem sempre, depende da
  lógica da função
+ Uma função pode devolver mais de um valor? Sim, inclusive listas ou
  dicionários.


.. image:: img/TWP35_005.jpeg
   :height: 16.402cm
   :width: 25.442cm
   :align: center
   :alt: 



+ `JSON <http://json.org>`_
+ Independente de linguagem
+ Pares nome/valor
+ Lista ordenada
+ Muito adotado atualmente
+ Alternativa para o XML

  + XML mais verbosa
  + XML menor legibilidade




.. code-block:: python 

   
    import urllib.request
    import json

    url = "http://api.icndb.com/jokes/random?limitTo=[nerdy]"
    resp = urrlib.request.urlopen(url).read()
    data = json.loads(resp.decode('utf-8'))
    print(data['value']['joke'])


Links de Palestras em Vídeo:
============================


.. youtube:: VxQBUPE6HbA
      :height: 315
      :width: 560
      :align: center

.. youtube:: EKCo0qcVYQU<commit_msg> Traduje del portugués al español "Revición de funciones"<commit_after>===================
Revición de strings
===================


.. image:: img/TWP10_001.jpeg
   :height: 14.925cm
   :width: 9.258cm
   :align: center
   :alt: 

Seamos más organizados
======================


.. image:: img/TWP35_001.jpeg
   :height: 13.35cm
   :width: 17.801cm
   :align: center
   :alt: 


Seamos más organizados
======================


.. image:: img/TWP35_002.jpeg
   :height: 14.064cm
   :width: 16.601cm
   :align: center
   :alt: 

Seamos organizados
==================

+ Cuando los programas crecen, el código generalmente se vuelve más complejo
+ Una forma de gestionar esta complejidad es usar funciones
+ Te permiten separar acciones comunes, por lo que tu código es más fácil
  fácil de leer y más fácil de mantener


Starbuzz no tiene granos
========================



+ El director de Starbuzz quiere una opción para comprar rápidamente, sin esperar
  bajar el precio
+ Al ejecutar el programa, te preguntaré si quieres comprar ahora o no
+ Si el usuario responde que sí, tomaré el precio actual y compraré
+ Si no, esperaré reducirlo a menos de 4.74


Nueva sugerencia de programa
============================


.. code-block:: python

   import urllib.request
   import time
   opcion = input('¿Quieres comprar ahora? (S/N)')
   if opcion == 'S':
      pagina = urllib.request.urlopen('http://beans.itcarlow.ie/prices-loyalty.html')
      texto = pagina.read().decode('utf8')
      donde = texto.find('>$')
      inicio = donde + 2
      fin = inicio + 4
      precio = float(texto[inicio:fin])
      print('¡Comprar! Precio: %5.2f' %precio)
   else:
      precio = 99.99
      while precio >= 4.74:
        pagina = urllib.request.urlopen('http://beans.itcarlow.ie/prices-loyalty.html')
        texto = pagina.read().decode('utf8')
        donde = texto.find('>$')
        inicio = donde + 2
        fin = inicio + 4
        precio = float(texto[inicio:fim])
        if precio >= 4.74:
          time.sleep(600)
      print('¡Comprar! Precio: 5.2%f' %precio)


Programa feo ...
================



+ No duplique su código ...
+ Esto conduce a un exceso de código, lo que hace que el mantenimiento de su código
  dificil
+ Intenta reutilizar tu código
+ Definiendo funciones reutilizaremos código
+ ¿Cuál es la diferencia?
+ Si tengo que cambiar algo, lo cambiaré en un solo lugar


Funciones
=========


+ Las funciones son códigos compartibles
+ Defino un nombre y llamo a la función en todo el programa
+ La función debe estar definida antes de poder llamarla
+ Si desea devolver un valor a la persona que llama, debe
  usa el comando de retorno


.. code-block:: python

   import urllib.request
   import time

   def precio_de_captura():
      pagina = urllib.request.urlopen('http://beans.itcarlow.ie/prices-loyalty.html')
      texto = pagina.read().decode('utf8')
      donde = texto.find('>$')
      inicio = donde + 2
      fin = inicio + 4
      return float(texto[inicio:fin])

   opcion = input('¿Quieres comprar ahora? (S/N)')
   if opcion == 'S':
      precio = precio_de_captura()
      print('¡Comprar! Precio: %5.2f' %precio)
   else:
      precio = 99.99
      while precio >= 4.74:
        precio = precio_de_captura()
        if precio >= 4.74:
          time.sleep(600)
      print('¡Comprar! Precio: 5.2%f' %precio)



No hay preguntas tontas
=======================



+ ¿Es el comando de retorno lo mismo que imprimir? No, imprimir muestra algo en la pantalla,
  while return devuelve un valor para quien llamó a la función.
+ Si no regreso dentro de la función, ¿qué devuelve? Ninguno
  ¿Debería + Volver siempre aparecer al final de la función? No siempre depende de
  lógica de función
+ ¿Puede una función devolver más de un valor? Sí, incluidas listas o
  diccionarios


.. image:: img/TWP35_005.jpeg
   :height: 16.402cm
   :width: 25.442cm
   :align: center
   :alt: 



+ `JSON <http://json.org>`_
+ Idioma independiente
+ Pares de nombre / valor
+ Lista ordenada
+ Muy adoptado hoy
+ Alternativa a XML

  + Más XML detallado
  + XML menos legibilidad




.. code-block:: python 

   
    import urllib.request
    import json

    url = "http://api.icndb.com/jokes/random?limitTo=[nerdy]"
    resp = urrlib.request.urlopen(url).read()
    data = json.loads(resp.decode('utf-8'))
    print(data['value']['joke'])


Enlaces de conferencias de video:
=================================


.. youtube:: VxQBUPE6HbA
      :height: 315
      :width: 560
      :align: center

.. youtube:: EKCo0qcVYQU
{'fraction_non_alphanumeric': 0.15045541437085347, 'fraction_numerical': 0.02541324637355223, 'mean_word_length': 3.0519362186788155, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5972484', 'n_tokens_mistral': 3403, 'n_tokens_neox': 3113, 'n_words': 930}