Registrarse

[Otros] Escuela introducción a la programación con python (finalizada)

La tarea 3: ¿prefieren que sea en parejas o individual?

  • En parejas

    Votos: 2 66,7%
  • Individual

    Votos: 0 0,0%
  • Me es indiferente

    Votos: 1 33,3%

  • Votantes totales
    3
  • Encuesta cerrada .
Estado
Cerrado para nuevas respuestas.

Ngidol

Durmiendo en los laureles
Escuela de Introducción a la Programación con Python
(Finalizada)

Agregar los links de las clases no cuenta como actualización.

Bienvenidos a esta escuela. Este es el post principal que centralizará los enlaces a los otros temas de clases y tareas, contiene el temario y el registro de entrega de las tareas.

Servidor de discord para dudas y discusión: link

Temario:

1.- Lenguaje de programación (en qué consiste de forma básica y general)
2.- Algoritmos
3.- Variables y estructuras de datos: int, float, str, bool, list, tuple, dict y set.
4.- Lógica proposicional (básico).
5.- Control de flujo if - else - elif.
6.- Ciclos: while y for.
7.- Funciones definidas por el usuario.
8.- I/O: lectura y escritura de archivos.
9.- OOP: programación orientada a objetos.
10.- Ordenamiento y búsqueda.
11.- Recursividad.

Lista de alumnos:

@joaquino
@WhiterMaker
@Berserker1523
@旅団.Markuzz Kaizuka
@RioulMillan
@kurugane
@David Phunir
@Rodeduf
@Michurrumi

Calendario de clases:




Links a los temas:
--- Clases, tareas y demás ---
Avanza por los mensajes en este thread y podrás ver los posts de las distintas clases. Cuando acabó la escuela se combinaron los temas en uno. También están los enunciados de las tareas y demás material.

Registro de entrega de tareas:

 
Última edición:

Ngidol

Durmiendo en los laureles
Clase 1: el lenguaje y algoritmos

Clase 1: lenguaje de programación python y algoritmos

Parte 1: el lenguaje e instalación
El computador es una máquina estúpida, pero muy rápida. Puede realizar muchas tareas y muy complejas en cuestión de segundos, sin embargo, realmente no "entiende" qué está haciendo, solo sigue al pie de la letra las instrucciones que da el programador. Por tanto, los errores en el código normalmente son culpa de nosotros, los que escribimos dicho código.

Un lenguaje de programación es un "idioma" común entre el computador y el programador. Como cualquier idioma, este tiene una "estructura gramatical" a la que llamamos "sintaxis", que no es más que la forma de estructurar lo que escribimos. Dada la naturaleza de los computadores, todo lo que les digamos serán "instrucciones". La gracia de python es que su sintaxis es muy amigable por lo fácil que resulta de leer, a diferencia de otros lenguajes como ASM, Java o C y su familia. Esa sintaxis la iremos aprendiendo a lo largo del curso.

Lo primero que haremos será descargar el lenguaje e instalarlo en nuestro computador (no se preocupen por los requerimientos, se puede programar hasta en una lavadora).
1) Lo primero es entrar a la página oficial de python (https://www.python.org/downloads/ ) y descargar la versión más reciente que corresponda a la de sus sistemas operativos. Pesa al rededor de 30 MB.

2) Una vez descargado, lo ejecutamos y hacemos click en "Install Now", esperamos a que se instale y luego le damos a "Close".

3) Si usan windows van a inicio > todos los programas > Python: necesito que creen accesos directos en sus escritorios de "IDLE" y "Python 3.6" para que luego les sea más fácil en acceso en el futuro.

Python 3.6:
Es la consola de python (también se le dice "python shell"), esto es lo que ejecuta "por detrás" el código que ustedes escriban.

IDLE:
Es el editor de texto que viene con python, desde él se puede ejecutar directamente el código para probarlo. Es el que usaremos. Tiene dos modalidades que explicaré luego.


Uso de IDLE y la consola de python

Python shell:
1) Abran Python 3.6.
Aquí pueden escribir líneas de código que se ejecutarán. Los archivos .py (los de python) al hacer doble click sobre ellos se ejecutarán aquí y se cerrará automáticamente cuando haya terminado.


IDLE:
1) Abran el IDLE.
Aquí ustedes verán algo como esto:


Esta parte del IDLE es básicamente un python shell con fondo blanco (modalidad 1).

Si van a File > New File o aprietan Ctrl + N se les abrirá una ventana completamente en blanco (modalidad 2).


Ahí ustedes pueden escribir su código para ejecutarlo más tarde y guardarlo como un archivo .py. Si van a Run > Run Module(o aprietan F5) les pedirá guardar el código que hayan escrito en un archivo y luego se ejecutará en la ventana que vimos antes del IDLE. Con Ctrl + S pueden guardar el archivo en el que estén trabajando.

Para ver el código de un archivo .py y modificarlo o continuar trabajando en él van a hacer click derecho sobre el archivo > Edit with IDLE > Edit with IDLE y se les abrirá en el idle para modificar.



Parte 2: algoritmos

Todas las tareas que realizamos en nuestra vida diaria pueden ser descritas mediante una serie de pasos simples y ordenados, a eso le llamamos "algoritmo" y es lo que nos permite hacer que un computador haga lo que queramos sin tener que explicarle nada, tal como alguien que no sabe cocinal puede seguir una receta bien explicada. Vamos con un ejemplo:

Imaginen que nos piden hacer un programa que lance misiles nucleares a cualquier parte del planeta. Pensemos en cuáles son, a grandes rasgos, los pasos necesarios para esto: (en cursiva pondré los pasos que el usuario no ve)

(Notar que hay muchos tipos de misiles nucleares con diferentes alcances y poder destructivo.)

1. Pedir usuario y contraseña: no podemos permitir que cualquiera pueda lanzar un misil nuclear.
2. Si usuario y contraseña coinciden con alguno de los registros, pasar a la siguiente pantalla, si no, informar que el usuario o la contraseña no coinciden con nuestros registros.
(a partir de aquí, todos los pasos se ejecutarán si el usuario y la contraseña son correctos)
3. Pedir que ingrese destino.
4. Pedir que ingrese las potencias mínima y máxima deseada.
5. Tomar el grupo de todos los tipos de misiles disponibles.
6. Crear un segundo grupo pero vacío.
7. Recorrer el primer conjunto, si quedan en stock y llegan al lugar deseado y potencia del misil es mayor o igual a la mínima y menor o igual a la máxima, entonces agregar el misil al segundo conjunto e ir al siguiente de la lista, si no, ir al siguiente de la lista.

8. Si el segundo grupo de misiles (los que cumplen las condiciones solicitadas) tiene algún misil, mostrar en pantalla todos los que contiene y pedir al usuario que elija el que desea usar. De lo contrario, informar al usuario que no dispone de misiles que cumplan con las características solicitadas.

Si desean que el programa sea más sofisticado, podrían incluir información de los misiles que podrían hacerlo pero que no quedan en stock u ofrecer alternativas que se acerquen a dichas características. Luego vendrían los pasos referentes al lanzamiento del misil, pero ya se entiende la idea de un algoritmo. Notarán que el paso 1 a su vez se puede dividir en pasos más pequeños como abrir los registros, comprobar uno a uno la coincidencia de resultados usuario - contraseña, luego hacer efectivo el inicio de sesión, etc. El nivel de detalle al que tendrán que llegar está dado principalmente por el lenguaje de programación en el que estén trabajando y los requerimientos del problema al que se enfrenten.

No existe un plan maestro sobre cómo elaborar algoritmos de forma genérica, sino que es necesario introducirse en el problema para crear uno (la experiencia también ayuda mucho). A lo largo de las clases se irán enfrentando a problemas con una complejidad cada vez mayor de modo que vayan ejercitando sus habilidades para confeccionar algoritmos.


Ejercicios:
1) Tienen que ver este vídeo en el que se da un ejemplo de algoritmos.
2) Quiero que posteen en este tema en un spoiler una tarea compleja que se les ocurra (como robar un banco o restaurar una pintura al óleo, la que quieran) y me digan el algoritmo con el que realizarían la acción, pero teniendo que definir una herramienta con la que deban ejecutar esa tarea. Ejemplo: para robar un banco usarán una pistola, pero deben definir qué es la pistola dando características de la misma (peso, dimensiones, calibre, munición) y acciones que pueden realizar con la pistola (apuntar, disparar, intimidar, golpear). Con un objeto basta.

Cualquier duda pueden preguntarme por el servidor de discord cuyo link les envié vía MP.

NOTA: es muy común en el mundillo de la programación el buscar en internet cosas que uno no sabe o no se acuerda, los animaré durante todo el curso a hacerlo.


 
Última edición:
Respuesta: Clase 1: el lenguaje y algoritmos

Bueno os explicare como encender una pc de mesa y usarla apropiadamente
1)se debe conectar el cable de alimentacion
2) se debe prender el switch de la fuente de energia
3)posteriormente marcar el boton del Cpu y monitor
4)aparecera el logo de la empresa del pc y luego dira unos parametros donde sale tres opciones se marcara F1 para poder continuar
5) aparecera el usuario y nos pedira la clave
6 listo estamos en el escritorio arrastramos el mouse hacia el navegador y buscamos cualquier informacion
7) en caso de funcionamiento lento debe generarlo un virus que genere archivos basura en ese caso usaremos un antivirus
8) si el pc se torna infectado procederemos a formatearlo y reinstalar el sistema windows y luego de vaciar la unidad para poner el nuevo sistema se instalan los drivers para un funcionamiento optimo
 
Última edición:
Re: Clase 1: el lenguaje y algoritmos

A ver
1 conseguimos la cafetera, la cual debe de cumplir con las funciones de:
calentar el agua,una vez calentada pasarla por el filtro en donde estará el café
y una vez que se cumplan la anteriores 2 tareas tomar el producto resultante(café) y servirlo(en el lugar donde se supondría que esta la jarra)
2 Tomamos el paquete de café en polvo y si tiene café lo ponemos en la cafetera solo si esta no tiene café en polvo ya,de lo contrario no hay café :'u.
3 Si la cafetera esta conectada pasamos al paso 3 sino la conectamos nosotros.
4 Sino tiene agua le ponemos y si tiene pasamos al paso 4.
5 Verificamos que la Jarra este en su lugar y de no estarlo buscarla y sino lo encuentras busca cualquier wea que se le asemeje.
6 Verificamos que hayamos hecho todo bien sino ver en que nos equivocamos pero, si lo hicimos todo bien oprimimos el botón y ponemos la cafetera a andar.
7 Esperar a que salga el Café y comprobar que sea café y si vemos que hay algo mal con nuestro café, revisamos la cafetera y cualquier cosa extraña que veamos la anotamos y hacemos una lista de todo lo raro que encontremos(definase raro como todo aquello que no cumpla con las características de la cafetera) y la lista se la damos a un técnico para que después vea que le pasa a la cafetera.
8 Si todo lo anterior se ejecuto correctamente y la cafetera no tuvo ningún problema deberíamos tener café calentito y listo para beber.
 

Ngidol

Durmiendo en los laureles
Clase 2: variables tipo int y float

Clase 2: variables tipo int y float

Parte 1: variables

En álgebra, una variable es una letra que representa uno o varios valores numéricos. En progrmación el concepto es parecido pero no exactamente igual: pensemos en una variable como un espacio dentro del computador donde guardamos "cosas". En esta primera parte veremos que esas cosas pueden ser de cuatro tipos que se pueden llamar "valores. Hoy veremos los primeros dos.

Palabras reservadas y caracteres no admitidos:

Hay ciertas palabras que el lenguaje usa para otras cosas, por lo que no pueden ser utilizadas como nombres para nuestras variables, aquí la lista: False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield.

Solo pueden usar las letras de la A a la Z en mayúsculas o minúsculas sin considerar la Ñ y nada de tildes (á, é, í, ó, ú, ý, Á, É, Í, ...), también pueden usar números y el guion bajo ( _ ). Nada de puntos (.), comas(,), guiones (-) u otros caracteres.

aux1_ es un nombre que sí pueden usar

Del no es un nombre que pueden usar porque es una palabra reservada

daño no es un nombre que puedan usar porque contiene la letra Ñ (se puede reemplazar la Ñ por N, GN o NN, dejando dano, dagno o danno como nombre válido)

Sintaxis: declarando una variable

Para declarar una variable basta con:

/nombre_variable/ /asignación/ /valor/

nombre_variable es el nombre de nuestra variable
asignación es el caracter que le indica al computador que lo anterior es el nombre de una variable a la que le voy a asignar un valor, es UN signo igual (=)
valor es lo que le asigno a mi variable

Ejemplos:

dagno = 4
aux = 26

Función print():

Cuando hacemos un programa, normalmente este va a interactuar con el usuario diciéndole cosas o pidiendo inputs. Para mostrar texto en pantalla se usa la función print(<<cosa>>). Más tarde la usaremos.

Una función en python tiene la sintaxis funcion(argumentos) (una función puede tener varios argumentos, los que se separan por comas (,)).


Parte 2: int y float

Los dos tipos de datos que veremos hoy son numéricos, un integer (int para los amigos) es un número entero, mientras que un float es un número con parte decimal.

Esa distinción es importante porque si queremos en el futuro que el computador ejecute una orden cinco veces, ese cinco debe ser un int y no un float.

Operaciones matemáticas:

Las operaciones de python para estos dos tipos de valores son: suma (+), resta (-), multiplicación (*), división (/), división parte entera (//), resto (%) y potencia (**).

Otra cosa a tener en cuenta es el orden de las operaciones:
En una línea de código, lo primero que se ejecutan son los paréntesis, luego potencias, en tercer lugar multiplicaciones, divisiones, división entera y resto y finalmente sumas y restas.

Ahora necesito que abran el IDLE, ustedes pueden escribir después de tres ">" y si escriben una línea que se ejecutará en pantalla, no lo tiene.

Para ejecutar una línea deben presionar enter.

Suma:
Código:
>>> a = 4
>>> b = 2
>>> print(a + b)
6
Código:
>>> a = 4
>>> c = -7
>>> d = a + c
>>> print(d)
-3
Código:
>>> a = 6
>>> a = a + 4
>>> print(a)
10
>>> a += 4
>>> print(a)
14
Esto último es: a una variable le asigno su mismo valor + 4.

Resta:

Código:
>>> a = 4
>>> b = 2
>>> c = -7
>>> print(a - b)
2
>>> print(a - c)
11
Código:
>>> a = 6
>>> a = a - 4
>>> print(a)
2
>>> a -= 4
>>> print(a)
-2
Multiplicación:

Código:
>>> a = 4
>>> b = 5
>>> print(a*b)
20
Código:
>>> a = 7
>>> u = 15
>>> d = 338
>>> respuesta = (a + u)*d*u
>>> print(respuesta)
111540
Código:
>>> a = 6
>>> a = a*4
>>> print(a)
24
>>> a *= 4
>>> print(a)
96
División:

Código:
>>> a = 13
>>> b = 5
>>> a/b
2.6
Sí, también se puede hacer que muestre en pantalla sin necesidad de usar la función print pero esto es porque el IDLE hace eso, cuando ejecutamos un código desde un archivo no funciona.

Código:
>>> a = 6
>>> a = a/4
>>> print(a)
1.5
>>> a /= 4
>>> print(a)
0.375
División parte entera:

Código:
>>> a = 13
>>> b = 5
>>> print(a//b)
2
La parte entera de un número x es el número entero inmediatamente menor o igual a x, es decir:
parte entera de 3.2 es 3
parte entera de -1.1 es -2
parte entera de 0.0 es 0

Código:
>>> a = 6
>>> a = a//4
>>> print(a)
1
>>> a //= 4
>>> print(a)
0
Si tanto a como b son int, a//b será int. Pero si a o b son float, a//b será float.

Resto:

Cuando nos enseñaron a dividir de pequeños había una entidad llamada "resto" que era lo que sobraba cuando ya no podíamos seguir dividiendo, luego ese resto comenzó a dar origen a los decimales.

Código:
>>> a = 7
>>> b = 3
>>> a%b
1
Esto es porque b cabe 2 veces en a (3*2 == 6) y luego sobra 1.

Código:
>>> a = 7
>>> b = 8
>>> a%b
7
Código:
>>> a = 6
>>> b = 3
>>> a%b
0
Así sabemos fácilmente si un número es divisor de otro.

Código:
>>> a = 6
>>> a = a%4
>>> print(a)
2
>>> a %= 4
>>> print(a)
2
Potencia:

Código:
>>> a = 7
>>> b = 3
>>> a**b
343

Código:
>>> a = -1
>>> b = 13
>>> a**b
-1
Código:
>>> a = 6
>>> a = a**4
>>> print(a)
1296
>>> a **= 4
>>> print(a)
2821109907456


Función type():

La función type() nos permite saber qué tipo de dato es una variable, entonces:

Código:
>>> a = 0.0
>>> type(a)
<class 'float'>
Código:
>>> a = 0
>>> type(a)
<class 'int'>

Ejercicios:

1) Experimentar con todas las operaciones descritas y encontrar qué retorna un int, qué retorna un float y en qué circunstancias. Deben resumirlo en un post de este comentario.
2) Descubran para qué sirven las funciones int() y float()
3) Hagan un programa que separe los dígitos de un número de cuatro cifras (ej: si el número es 1238, debe imprimir
1
2
3
8). (Sin el paréntesis y el punto del final, usen el segundo modo que expliqué ayer, la parte que es para escribir un código entero antes de probarlo).
4) Expliquen en un comentario qué pasa si hacen cosas como
Código:
>>> print(2/0)
E interpreten lo que python les diga.

 
Última edición:

Ngidol

Durmiendo en los laureles
Respuesta: Clase 2: variables tipo int y float

Anexo

Ahora les voy a enseñar paso a paso cómo escribir un programa entero antes de ejecutarlo, usando la "modalidad 2" que les comenté en la clase 1.

1) Abran el IDLE
2) Vayan a File > New File


Listo, están en el editor de código.


Ahora la sintaxis: no se necesita nada especial, las mismas líneas que escribían antes en la consola se pueden escribir acá:

Ejemplo:

Para saber si un número es par basta con:
Código:
num = 513 [COLOR="Red"]#este es un número de ejemplo, puede ser el que se les de la gana[/COLOR]
par = num%2
print(par)
NOTA: lo que está en rojo después del # es un comentario y no afecta en nada al código. Permite añadir explicaciones o cosas de ese estilo.



Ejecutemos:

3) Vayan a Run > Run in Module
Les pregntará si desean guardar los cambios y/o la ubicación donde quieren guardarlo, pónganlo en una ubicación a la que puedan llegar sin problemas.
4) Se les abrirá la python shell del IDLE y se ejecutará el código ahí.


5) Felicidades! Ya sabes que 513 no es par, porque el resto de 513 entre 2 es 1 y no cero.
 

Berserker1523

2-Intentando discernir qué es lo más importante...
Respuesta: Clase 2: variables tipo int y float

1) Todas las operaciones en que implicitamente se esté trabajando con int, devuelven int. Ejemplo: 5 + 3 = 8, 4**2 = 16, 4//10 = 0.

Cuando se opera con un float implicita o explicitamente, el resultado simpre será float. Ejemplo: 5 + 3.0 = 8.0, 4.0**2 = 16.0, 4**2.5 = 32.0, 4/10 = 0.4.

2) Las funciones "int()" y "float()" convierten un número al formato entero o al de float, respectivamente. Ejemplo: a = 4.0, int (a) == 4. a =4, float(a) == 4.0.

3)Primer intento: https://mega.nz/#!Ag9WSRRI!SCvv8p3RB2oiI2BXDeOOUB0pRlaiko3ENV8LpsdxRFI

Segundo intento: https://mega.nz/#!Ml8UDT4b!slsRTTh2W9k4jeHx-Gs8ahFu4jdRWKFkDlN6WBW2kEI

4) Sale una excepción mostrando los errores de las líneas que lo contienen y el nombre de la excepción, en este caso: "ZeroDivisionError: division by zero".
 
Última edición:

Ngidol

Durmiendo en los laureles
Clase 3: variables tipo string

Clase 3: variables tipo string

Aviso: a partir de aquí ya no usaré más el python shell que viene en el IDLE, desde ahora todo el código se escribe en un archivo, se guarda en el disco y luego ejecuta.


Un string (str) es un tipo de dato que consiste en una cadena de caracteres (letras) formando un texto. En python se coloca entre comillas simples o dobles.

Declarando una variable string.

En python una variable puede ser un entero y luego un float para acabar siendo un string a diferencia de otros lenguajes a los que hay que decirles de qué tipo será la variable que uno crea.
Al igual que con los int y float, para crear una variable que sea un string basta con

texto = "¡Hola Mundo!"

Luego, con ese string podemos hacer muchas cosas que iré explicando de a poco:

Operando con strings

A diferencia de los valores numéricos, con strings solo existen dos operaciones matemáticas posibles: sumas y multiplicaciones.

Suma:
Código:
t1 = "hola"
t2 = "chao"
t3 = a + b
print(t3)
Código:
holachao
Pero, si tomamos los t1 y t2 que definimos antes y:
Código:
t3 = " " #es un espacio: sí, el caracter espacio existe
t4 = t1 + t3 + t2
print(t4)
Código:
hola chao
Código:
t1 = "hola"
t1 += " chao"
print(t1)
Código:
hola chao
Código:
t1 = "hola"
t1 = t1 + " chao"
print(t1)
Código:
hola chao
Multiplicación:
Código:
t1 = 'hola'
t2 = 3*t1
t3 = t1*3
print(t2)
print(t3)
Código:
holaholahola
holaholahola
Código:
t1 = "hola"
t1 *= 3
print(t1)
Código:
holaholahola
Fíjense bien en los paréntesis en este ejemplo:
Código:
a = "holi"
b = "chau"
print((a + b)*3 + 3*a + 3*b)
Código:
holichauholichauholichauholiholiholichauchauchau
Función len():

La función len aplicada a un string retorna el número de caracteres contenidos en uno.

El string vacío:

Así como existe el cero en los números, existe el vacío en los strings, que se declara de la siguiente forma:

Código:
str_vacio = ""
o
Código:
str_vacio = ''
Según se prefiera, con comillas simples o dobles.
(El nombre "str_vacio" puede ser lo que a ustedes se les ocurra).

Conectémoslo con lo anterior:
Código:
texto1 = "hola"
texto2 = " " #un espacio
texto3 = "" #string vacío
print(texto1, len(texto1))
print(texto2, len(texto2))
print(texto3, len(texto3))
Código:
hola 4
  1
 0
Separar variables como argumentos de la función print hace que se impriman separadas por el "separador" indicado, que por defecto es un caracter espacio.

Modificando el separador de la función print:
Hagámos que el texto que imprimimos en pantalla sea más profesional; ahora quiero que diga "string: hola; largo: 4"
Código:
texto1 = "hola"
texto2 = " " #un espacio
texto3 = "" #string vacío
print("string: " + texto1, len(texto1), sep = "; largo: ")
print("string: " + texto2, len(texto2), sep = "; largo: ")
print("string: " + texto3, len(texto3), sep = "; largo: ")
y eso al ejecutarse:
Código:
string: hola; largo: 4
string:  ; largo: 1
string: ; largo: 0
Índices:
Ahora, imaginen que tienen una cadena de texto y quieren saber un caracter en concreto, pueden obtenerlo gracias a su índice, es decir, qué posición ocupa dentro del string de izquierda a derecha, se cuenta a partir de cero.
En el string "Hola", la "H" sería el 0, "o" el 1, "l" el 2 y "a" el 3. len("Hola") es 4.
¿Cómo se hace esto en código?

Código:
texto = "París"
print(texto[0])
print(texto[1])
print(texto[2])
print(texto[3])
print(texto[4])
Código:
P
a
r
í
s
Código:
t = "París"
print(t[0], t[1], t[2], t[3], t[4], sep = "-")
Código:
P-a-r-í-s
De derecha a izquierda, en cambio:
para
Código:
string = "Hola"
string[-1] -> 'a'
string[-2] -> 'l'
string[-3] -> 'o'
string[-4] -> 'H'
Intervalos:
Si tengo el string
Código:
string = "miraquechulosoy"
string[a:b] retornará la cadena de caracteres que está a partir de la posición "a" y hasta justo antes de la posición "b".
Ej:
Código:
string = "miraquechulosoy"
string[1:4]
Código:
ira
Omitir "a" o "b" hace que sea "desde" o "hasta" el extremo correspondiente del string:

Código:
a = "Hola"
print(a[:2])
print(a[2:])
Código:
Ho
la
Dar la vuelta a un string:

Código:
string = "Hola"
gnirts = string[::-1] #aquí está la magia
print(gnirts)
Código:
aloH

Caracteres especiales:
Fundamentalmente les voy a enseñar dos caracteres especiales, uno ahora y otro en algunas clases más adelante para que lo entiendan.
El de ahora es el "salto de línea".

Imaginen que quiero imprimir en pantalla lo siguiente:
Código:
hola
chao
patata
azul
Esto es fácilmente obtenible con un caracter que le indica al computador que debe continuar escribiendo en la línea de abajo: "\n" (tienen que ver ustedes cómo, según su teclado, deben hacer la combinación de teclas para el "backslash" (\)). Sí, son dos caracteres pero el computador los lee como uno, en concreto:
Código:
palabra1 = "hola"
palabra_2 = 'chao'
dragon = "patata"
palabra_cuatro = "azul"
print(palabra1, palabra_2, dragon, palabra_cuatro, sep="\n")
Código:
hola
chao
patata
azul
O también se puede conseguir:
Código:
palabra1 = "hola"
palabra_2 = 'chao'
dragon = "patata"
palabra_cuatro = "azul"
ursaring = "\n"
Código:
finale = palabra1 + ursaring + palabra_2 + ursaring +\
    dragon + ursaring + palabra_cuatro
print(finale)
Backslash (\) + enter permite seguir escribiendo en la línea de abajo, mañana les cuento un detalle de eso.

Código:
hola
chao
patata
azul
Función str():
Si tienen una variable que es un int o un float, pueden usar la función str() para convertirla en un string y manejarla de esa forma. Del mismo modo, int() o float() pueden transformar, en determinados casos, un string en un int o float.

Función input():
La función input() simplemente abre el canal para recibir entradas del teclado y las retorna como un string. Uno normalmente la usará para asignarlo a variables y hacer cosas.

Se puede escribir un string como arcumento que se imprimirá en pantalla al momento en el que el usuario empiece a escribir.

Ejemplo 1:
Código:
mensaje = input("Ingrese su mensaje: ")
print(mensaje)
Al ejecutarse:


Luego de escribir presionamos enter y voalá!


Ejemplo 2:
La clase anterior varios tuvieron problema con el ejercicio 3, aquí les va el código, con un par de cosas que vimos hoy:

Código:
num = int(input("Ingrese un número de cuatro cifras: ")) #notar que después de los dos puntos dejé un espacio
unidades = num%10
num//=10
decenas = num%10
num//=10
centenas = num%10
num//=10
miles = num
print(miles, centenas, decenas, unidades, sep = "\n")
Con lo visto hoy se puede simplemente hacer:
Código:
num = str(int(input("Ingrese un número de cuatro cifras: ")))
print(num[0], num[1], num[2], num[3], sep="\n")
Con cualquiera de los códigos anteriores al ejecutarlo, van a escribir el número que desean que separe, y a contunación va a imprimir los dígitos de ese número de izquierda a derecha, uno por cada línea.


Ejercicios: (recuerden que su resolución la considero como materia del curso, aunque no son obligatorias)
1) Explíquenme por qué en la línea del ej. 3 de la clase pasada pasé el input que estaba como string a integer (int) y luego lo volví a pasar a string:

num = str(int(input("Ingrese un número de cuatro cifras: ")))

2) Reciban dos strings de largo 5 cada uno y deben intercalarlos, el segundo debe estar al revés: si str1 = "holii" y str2 = "miraa", deben imprimir en pantalla "haoalriiim".

3) Busquen en interneto sobre el "módulo random" de python 3.6 y practiquen un poco las funciones random.random() y random.randint(), el resto las dejaremos para después de la tarea 1.

4) Busquen qué hacen los métodos string.replace(), string.index(), string.count(), str.upper(), str.lower() y str.capitalize().

 
Última edición:

Berserker1523

2-Intentando discernir qué es lo más importante...
Respuesta: Clase 3: variables tipo string

Soluciones a las mini tareas:

Para que el programa sacara excepción si el usuario digitaba un caracter que no fuera un número.


random.randint(int, int) devuelve un número entero entre el rango indicado que contiene a los límites.

random.random() devuelve un float entre 0 y 1. Ejemplo: 0.9034893851526794 -- 0.269102864451393 -- 0.6114071669545609

string.replace(SubStringParaReemplazar, SubStringAReemplazar): Como puse en los parámetros, reemplaza una subcadena en el String por la indicada.

string.index(str, beg, end): .Este método devuelve el índice donde empieza el str si este es una subcadena del string desde el "beg" hasta el "end", si no lo encuentra lanza excepción.

string.count(sub, start, end): Devuelve cuantas veces aparece una subcadena en el string desde "start" hasta "end".

str.upper(): Transforma la cadena en mayúscula sostenida.

str.lower(): Transforma toda la cadena a minúscula.

str.capitalize(): Capitaliza la cadena, esto es, pone la primera letra en mayúscula (y creo que lo dempas lo pone en minúscula, no estoy seguro).
 
Última edición:

Ngidol

Durmiendo en los laureles
Respuesta: Clase 3: variables tipo string

Me pide clave de cifrado para descargar el archivo :/

Soluciones a las mini tareas:

Para que el programa sacara excepción si el usuario digitaba un caracter que no fuera un número.


random.randint(int, int) devuelve un número entero entre el rango indicado que contiene a los límites.

random.random() devuelve un float entre 0 y 1. Ejemplo: 0.9034893851526794 -- 0.269102864451393 -- 0.6114071669545609

string.replace(SubStringParaReemplazar, SubStringAReemplazar): Como puse en los parámetros, reemplaza una subcadena en el String por la indicada.

string.index(str, beg, end): .Este método devuelve el índice donde empieza el str si este es una subcadena del string desde el "beg" hasta el "end", si no lo encuentra lanza excepción.

string.count(sub, start, end): Devuelve cuantas veces aparece una subcadena en el string desde "start" hasta "end".

str.upper(): Transforma la cadena en mayúscula sostenida.

str.lower(): Transforma toda la cadena a minúscula.

str.capitalize(): Capitaliza la cadena, esto es, pone la primera letra en mayúscula (y creo que lo dempas lo pone en minúscula, no estoy seguro).
 

Ngidol

Durmiendo en los laureles
Clase 4: lógica proposicional y variables tipo bool

Clase 4: lógica proposicional y variables tipo bool

Parte 1: lógica proposicional

Cuando hablamos y transmitimos información, lo hacemos mediante enunciados que pueden ser de varios tipos (modos del lenguaje): imperativo (dar una orden), interrogativo (hacer preguntas), indicativo (dar información), etc. Nosotros nos concentraremos en ese último, el modo indicativo.

Entonces, definamos una proposición como un enunciado que puede tener un valor de verdad y usa el modo indicativo del lenguaje. Ejemplos: "Hace frío", "Está lloviendo".

El valor de verdad de una proposición será verdadero (True) o falso (False), pero no en el sentido de que sea verdad o mentira. Las proposiciones se denotan frecuentemente con una letra, pudiendo ser p = "hace frío" o q = "está lloviendo".

Relaciones entre proposiciones:

Negación: es la más básica de todas, se denota con el símbolo ~ o ¬ antes de la letra, negación de p sería ~p o ¬p, yo prefiero usar ~.
Si decimos p = "hace frío" y ~p es verdadero, esa negación de "hace frío" no es que "hace calor" sea verdadero: en lógica, el opuesto de "frío" no es "calor", es "no frío". Esto es muy importante que lo entiendan.

Conjunción: es simple y llanamente el "y" ("and" en inglés). Si p es "hace frío" y q es "está lloviendo", entonces la conjunción entre p y q sería simplemente p ^ q (se usa "^" para representarlo).

Disyunción: es el "o" ("or"). Se denota con "v". La relación p o q sería p v q.

Implicancia: p implica q es p=>q, la implicancia se define como ~p v q.

Si y solo si: (ese "si" es condicional) p <=> q, se define como p=>q ^ q=>p.

Tablas de verdad:
Las tablas de verdad indican el valor de verdad de una relación de proposiciones, según el valor de cada una.



Normalmente solo usaremos la negación, conjunción y disyunción, pero les dejo las tablas de la implicancia y la del si y solo si (también llamado bicondicional).

¿Por qué explico esto? Porque las variables tipo bool son variables que solo pueden ser True o False, se les puede asignar estos valores de manera directa o que dependa de condiciones y se pueden relacionar entre sí mediante los operadores lógicos que acabo de mencionar.

Condiciones:
Los tipos de condiciones que podemos establecer entre variables con python son: "menor que", "menor o igual que", "igual que", "distinto que", "mayor que" y "mayor o igual que", esto es válido para variables int, float y sorprendentemente strings.

Con ints y floats no hay misterio, como estamos hablando de números, el computador no tiene problemas para establecer cuál es menor o mayor que otro. Si estamos relacionando strings entre sí, el "mayor" será el que aparece después en el sistema de caracteres que esté usando, para que se entienda, si ambos strings estuvieran en el diccionario, el mayor es el que aparece después. "A" es menor que "B", pero "a" es mayor que "B" porque en python las mayúsculas están antes que las minúsculas.

No se puede relacionar ints o floats con strings. Recomiendo siempre usar paréntesis para que las prioridades queden claras, por ejemplo: en lugar de escribir

Código:
p ^ q v p
escriban

Código:
p ^ (q v p)
No necesitan más que esto, en realidad. Si les interesó el tema busquen un libro llamado "Teoría de conjuntos" de un autor cuyo nombre no recuerdo... lo buscaré si a alguien le interesa y me lo pide.

Parte 2: lógica proposicional en python

Aquí no existen las "proposiciones" como un string que diga "hace frío", pero sí existen en forma de las proposiciones que detallé arriba, pudiendo tener un "variable < 8", por dar un ejemplo. Ahora vamos con las notaciones.

Conjunción:

Para la conjunción se usa la palabra reservada "and" del siguiente modo:

Código:
cond_1 [COLOR="DarkOrange"]and [/COLOR]cond_2
Disyunción:

Para la disyunción se usa la palabra reservada "or" del siguiente modo:

Código:
cond_1 [COLOR="darkorange"]or [/COLOR]cond_2
Negación:

Para la negación se usa la palabra reservad a "not" del siguiente modo:

Código:
[COLOR="darkorange"]not [/COLOR]cond_1

Notación de las condiciones:

Igualdad:

Código:
var_1 == var_2 #es importante que sean dos signos iguales, 
#no confundir con usar solo uno que es para asignaciones.
Mayor que:

Código:
var_1 > var_2
Mayor o igual que:

Código:
var_1 > var_2 [COLOR="darkorange"]or [/COLOR]var_1 == var_2
Código:
var_1 >= var_2
Distinto:

Código:
var_1 != var_2
Nota: solo la igualdad (==) o desigualdad (!=) permite relacionar ints o floats con strings.

Menor que:

Código:
var_1 < var_2
Menor o igual que:

Código:
var_1 <= var_2
Entonces podríamos tener que, en código:

Código:
var_1 = int(input("Ingrese un número entero: ")
var_2 = int(input("Ingrese un número entero: ")
var_3 = not (var_1 < var_2) [COLOR="DarkOrange"]or [/COLOR](2*var_2 < var_1)
print(var_3) #también se puede dejar como print([COLOR="darkorange"]not [/COLOR](var_1 < var_2) [COLOR="darkorange"]or [/COLOR](2*var_2 < var_1))
sea parte de un programa.

Otro ejemplo de código:

#var_1 ya está definida pero no sabemos su valor (True o False)
Lo que nos diría si lo es, es:
Código:
print(var_1 == True)
De ese modo, si var_1 es igual a True, var_1 vale True y en pantalla se imprimirá True, de lo contrario, se imprimirá False.

Sintaxis:
El booleano "verdadero" se escribe True en python.
El booleano "falso" se escribe False en python.
La operación "negación" se escribe not en python.

Aclaro esto para que no queden dudas.


Un par de definiciones más:

Ahora llamemos "proposición" a un conjunto de variables que se relacionan mediante operadores lógicos (and, not y or). Una proposición será una tautología si para cualquier combinación de True y False de todas las variables implicadas, el resultado siempre es True. En cambio, será una contradicción si el resultado siempre es False. Finalmente, si el resultado difiere según cómo se combinen los valores de las variables entonces la proposición se dice que es una contingencia.



Ejercicios:
1) Busquen en internet cómo funciona la función bool(args) de python y si se puede usar para transformar en un booleano un string como "True" o "False". Expliquen.
2) Hagan un programa que dados los datos ingresados por el usuario para dos pokémon y usando la fórmula de daño que está en wikidex imprima en pantalla True si el pokémon 1 debilita al pokémon 2 de un golpe y False si esto no ocurre (RESTRICCIONES: solo pueden usar los contenidos vistos en clases, esto, por supuesto, incluye al módulo random).
3) Demuestren (probando las combinaciones posibles para valores de p y q variables) que:

Código:
((p=>q)^p) => q
es una tautología.

 
Última edición:

Berserker1523

2-Intentando discernir qué es lo más importante...
Respuesta: Clase 4: lógica proposicional y variables tipo bool

Me da pereza escribir, así que copiaré y pegaré xD:

bool(object):

It lets you convert any Python value to a boolean value.

Sometimes you want to store either True or False depending on another Python object.

How Python objects are converted to a boolean value, all depends on their truth value. Generally speaking, None, numeric 0 and empty containers (empty list, dictionary, set, tuple, string, etc.) are all False, the rest is True.


 

Ngidol

Durmiendo en los laureles
Clase 5: control de flujo

Clase 5: control de flujo

Aviso: noto una baja actividad por parte de ustedes, quisiera que respondan en este tema si prefieren que cree un tema en el aula para las dudas de clases y tareas en lugar de usar discord.

Cuando programamos normalmente querremos que si pasa A, el programa haga una cosa y si pasa B haga otra. Hoy aprenderemos a hacer eso.

Condiciones:

Como vimos la clase pasada, una condición tendrá un valor True o False dependiendo de si se cumple o no, esta es la base de la toma de decisiones que hará un programa, pues se basará en el valor de verdad de una condición.

Bloque if - else:

Este bloque de código es el que se encarga de que si se da una condición, el programa algo, y si no se da, haga otra cosa.

Estructura:

Código:
<código_que_antecede_al_if>

if <condición>:
	<código_1>
else:
	<código_2>

<código_que_precede_al_if>

Notar dos cosas:
1) Si <condición> es True, se ejecutará <código_1>, si <condición> es False, se ejecutará <código_2>. Una vez que tome uno de los dos caminos y acabe, continuará con el <código_que_precede_al_if>.
2) Indentación.

Indentación:

Se llama indentación a la sangría que se coloca a determinados bloques de código que están "dentro" de otros. Eso le permite al lenguaje diferenciar lo que está dentro y lo que está fuera del bloque if - else.

La indentación se puede hacer de dos formas: la primera es con cuatro espacios y la segunda es apretando la tecla "tab" (o tabulador), es la que está justo encima de "bloq. mayús". Lo que sí, si lo van a hacer con tab, deben hacerlo todo con tab, en cambio si lo van a hacer con espacios, todo con espacios.


Else if:

Muchas veces las decisiones no son tan simples como que se cumpla una sola condición, puede que tengamos que hacer cosas para 10 posibles valores de una variable, esta es la solución.

Código:
if <cond_1>:
	<cod_1>
else:
	if <cond_2>:
		<cod_2>
	else:
		<cod_3>
Que también puede ser:

Código:
if <cond_1>:
	<cod_1>
elif <cond_2>:
	<cod_2>
else:
	<cod_3>
Ejemplos de cosas que se pueden hacer:

Código:
name = input("Ingrese nombre: ")
if name == "":
	name = "Jugador"
else:
	pass
Código:
name = input("Ingrese nombre: ")
if name == "":
	name = "Jugador"

Código:
constante = int(input("Ingrese número: "))
if constante >= 4:
	constante = 0
else:
	constante += 1

Código:
#la variable var viene de algo más atrás
if type(var) == str:
	pass
else:
	var = ""
Ejercicios:
1) Quiero que programen el menú de opciones de pokémon, con pokédex, pokémon, mochila, ficha entrenador, opciones, guardar y salir. Que al entrar a cada opción imprima un mensaje característico en pantalla, excepto en salir, por supuesto.
2) Usando la fórmula de daño del ejercicio 2 de la clase pasada, hagan un programa que decida qué ataque hacer entre cuatro posibles o si debe cambiar de pokémon (y a cuál), basado en el potencial daño que puede hacer y el potencial daño que puede recibir el pokémon que está en el campo y el resto de miembros del equipo. No consideren estrategias como buffs de estadísticas o ataques con efectos aparte del daño directo. Los datos del equipo deberán ser entregados por el usuario o podrán ser determinados por ustedes por defecto. Si hay o no stab al igual que la efectividad (tabla de tipos) deberá determinarlo su programa. [EDIT: este ejercicio queda para que lo hagan incluyendo la materia de la clase 6.]

 
Última edición:

kurugane

Tan antiguo como las Rocas.
Re: Clase 1: el lenguaje y algoritmos

Lamento el retraso xd me habian cortado el internet papu :'v me pondre al corriente hoy.

1.- Conseguir Ingredientes: 1/2 kg de Harina, 2 huevos, 1/2 lt de Leshe shavo.
2.- Conseguir Instrumentos: 1 espatule, 1 Sarten, 1 Licuadora, 1 plato.
3.- Entrar en la Cocina donde se encuentra: Enchufe, Estufa, lavaplatos.
4.- Tomar la Licuadora y vertir dentro los Ingredientes y taparla.
5.- Enchufar la licuadora a la corriente eléctrica.
6.- Encender la licuadora durante 5 min para que se mezclen los ingredientes. una vez pasado los 5 min apagarla y desenchufar la licuadora.
7.- Colocar el sarten en la estufa.
8.- Encender la estufa a fuego medio.
9.- tomar la licuadora y verter 1/8 de ella en el sarten para crear el hotcake y esperar 4 min.
10.- Pasados los 4 min tomar la espatule y voltear el hotcake y esperar otros 4 min.
11.- Retirar el hot cake con la espatule pasado los 4 min y colocarlo en el plato
12.- Repetir paso 9 hasta agotar la licuadora.
13.- Apagar la estufa.
14.- Tomar y mover licuadora, sarten y espatule al lavaplatos(Para lavarlos luego xd)
Fin?
 

Ngidol

Durmiendo en los laureles
Clase 6: ciclos while

Clase 6: ciclos While

Tip de hoy: Formalidad del código.
Por aspectos formales y convención, uno importa todos los módulos y librerías al principio del archivo con el código, nunca a la mitad o hacia el final. Es lo primero que se escribe.

Hoy aprenderemos a hacer ciclos y algunas aplicaciones de estos.
Un ciclo, o también loop o bucle, es un trozo de código que se repite un número indefinido de veces o mientras que se cumpla una determinada condición.

Sintaxis:

Código:
<código_que_antecede_al_ciclo>

while <condición>:
	<código que se repite>

<código_que_precede_al_ciclo>
mientras que <condición> sea True, <código que se repite> se ejecutará una y otra vez. Luego ejecutará el <código_que_precede_al_ciclo>.

Break:

break es una palabra reservada que nos permite salir de un ciclo antes de tiempo.

Sintaxis:

Código:
while <condición>:
	<código>
	break
Normalmente se coloca dentro de un if para que rompa el ciclo solo en ciertas circunstancias.

Ejemplos:

Código:
import time
contador = 10
while contador>0:
	print(contador, " segundos para el depegue")
	contador -=1
	time.sleep(1)
print("Ignición!")

Código:
import random
string = ""
while len(string)<8:
	h = random.randint(1, 100)
	string += str(h)
print("El número ganador es... ", string)

Tareas:
1) Investiguen acerca del módulo time.
2) Investiguen acerca de los métodos de string: string.isnumeric(), string.isalpha(), string.isalnum() y string.find()
3) Programen un menú de opciones como el de la clase anterior pero que verifique los inputs y, de ser incorrectos, los vuelva a pedir.
4) Ahora sí pueden completar la tarea 2 de la clase pasada de forma mucho más sencilla. ¡Ánimo!

 
Última edición:

Ngidol

Durmiendo en los laureles
Clase 7: ciclos for

Clase 7: ciclos for

Hoy toca los ciclos for, que tienen por gracia que crean una variable la que toma los valores que están en un intervalo definido por el usuario con una sintaxis más sencilla que usando ciclos while. Vamos a ver la sintaxis.

Sintaxis:

Código:
for <variable> in range(a, b):
	<code>
Ojo, el intervalo toma el valor de a pero no el de b (el valor máximo de la variable es b-1.
a y b deben ser ints.

Ejemplos de usos:

Código:
for i in range(2, 8):
	print(i+5)

Código:
for i in range(8): #si no colocan la cota inferior, por defecto es cero.
	for j in range(9):
		print(str(i)+"x"+str(j))
Este último es un caso de un "for anidado", es decir, un for dentro de otro for.

Les recomiendo probar estos ejemplos en sus computadores para que vean bien cómo funciona.

Ejercicios:
1) Simular con UN while un for anidado (dos variables que se mueven en un rango "rectangular".
2) Hacer un programa que calcule el factorial de un número ingresado por el usuario.
3) Hacer un programa que verifique si un número es primo o no.
4) Cada uno deberá decirme el n-ésimo primo para un n (uno distinto para cada alumno, la lista está más abajo).

Ej:
Código:
1er primo: 2
2do primo: 3
3er primo: 5
...
n-ésimo primo: ???
@joaquino - 37987
@WhiterMaker - 40060
@Berserker1523 - 38561
@旅団.Markuzz Kaizuka - 39196
@David Phunir - 35018
@RioulMillan - 40582
@kurugane - 26878
 
Última edición:

Berserker1523

2-Intentando discernir qué es lo más importante...
Respuesta: Clase 6: ciclos while

El módulo Time contiene funcionalidades que nos permiten entre otras cosas, manipular y dar formato a fechas y horas, obtener fechas actuales, rangos y hacer cálculos con estas.

Algunas de las funciones más importantes de este módulo son las siguientes:

asctime([tuple]): Convierte una tupla de tiempo en un string.

localtime([secs]): Convierte los segundos a una tupla de fecha, hora local.

mktime(tuple): Convierte una tupla de tiempo a hora local.

sleep(secs): Duerme (no hace nada) por la cantidad de secs que corresponde a segundos.

strptime(string[, format]): Transforma un string a una tupla de tiempo.

time(): Fecha actual.(en segundos, UTC).

string.isnumeric(): Retorna true o false dependiendo de si el string está compuesto solo de caracteres numéricos. El método solo funciona con "objetos unicode".

string.isalpha(): Retorna tru o flase dependiendo de si el string está compuesto solo de caracteres alfabeticos.

string.isalnum(): Este método devuelve verdadero si todos los caracteres en la cadena son alfanuméricos y hay al menos un carácter, de lo contrario es falso.

string.find(): Determina si una subcadena está en el string, también se le pueden dar indices de inicio y final para que busque en el string.

Parámetros
str - Esto especifica la cadena que se buscará.

beg - Este es el índice inicial, por defecto es 0.

end - Este es el índice final, por defecto es igual a la longitud de la cadena.

Valor de retorno
Índice si se encuentra y -1 en caso contrario.

https://mega.nz/#!F4FjFQxI!1z8w9tlnLrqpZhtZzEvBZGJvpS57Iy1xuh941LhknVw
 

Ngidol

Durmiendo en los laureles
Clase 8: listas y tuplas

Clase 8: listas y tuplas

Esta clase veremos la primera estructura de datos de este curso: las listas.

Estructura de datos:

Una estructura de datos es una forma de organizar datos para luego aprovecharlos. En realidad los strings son a la vez un tipo de datos y una estructura de datos, según cómo se usen. Ustedes para el mazo de cartas los usaron como estructura de datos y en el nombre de los jugadores, como tipo de dato.

Listas:

Una lista consiste en una agrupación de datos en un determinado orden. Estos datos pueden ser ints, floats, strings, bools, listas o incluso mezclas de todos ellos. Las listas se denotan por elementos entre corchetes ([ ]) separados por comas.

Operaciones:

Al igual que con strings, las listas soportan únicamente la suma entre ellas (concatenación) y multiplicación (únicamente entre una lista y un int y con MUCHO cuidado, por razones que les mostraré más adelante), en este sentido, si tenemos:

Código:
lista_1 = [1, 2, "a"]
lista_2 = ["b"]
print(lista_1 + lista_2)
print(lista_2 + lista_1)

Código:
[1, 2, "a", "b"]
["b", 1, 2, "a"]
Multiplicación está más abajo.

Una lista vacía:

Para crear una lista vacía (el "cero" en listas) basta con:

Código:
lista = []
o

Código:
lista = list()
Agregar elementos a una lista:

Código:
lista = [<los elementos de la lista>]
lista = lista + [<cosa que le quieran meter>]
o

Código:
lista = [<los elementos de la lista>]
lista += [<cosa que le quieran meter>]
o

Código:
lista = [<los elementos de la lista>]
lista.append(<cosa que le quieran meter>)
En estos tres ejemplos <cosa que le quieren meter> se añadirá al final de la lista.

Índices:

Al igual que con strings, podemos llamar lo que esté en una determinada posición de una lista.

Código:
lista = [9, 8, 7, 6, 5, 4, 3, 2, 1]
for i in range(len(lista)):
	print(lista[i])
#la función len nos dirá cuántos elementos hay en la lista
#indexación parte en cero, al igual que con strings
Código:
9
8
7
6
5
4
3
2
1
Con los índices negativos funciona igual que con strings, es decir:

Código:
lista = [2, 3]
pirnt(lista[-1])
Código:
3
Usos adicionales de los índices:

En la práctica, cada posición de una lista funciona como una variable entonces el dato que almacena puede ser modificado mediante asignación como si se tratara de una variable normal.

Código:
import random
asistencia = [["alfredo", None], ["gonzalo", None], ["uribusto", None], ["papa panchito", None]]
for i in range(len(asistencia)):
	var = random.randint(0, 1)
	asistencia[i][1] = bool(var)
print(*asistencia, sep = "\n")
o también puede hacerse:

Código:
import random
asistencia = [["alfredo", None], ["gonzalo", None], ["uribusto", None], ["papa panchito", None]]
for i in asistencia:
	var = random.randint(0, 1)
	i[1] = bool(var) #i es cada lista dentro de asistencia
print(*asistencia, sep = "\n")

Ejemplo simple:
Código:
patito  = [1, 2, 1, 4, 6]
patito[3] = 2
print(patito)
Código:
[1, 2, 1, 2, 6]
El problema de las listas:

Una lista al intentar asignarla a otra variable, sigue siendo la misma lista, al contrario de lo que pasa con los otros tipos de datos que ya vimos. En código:

Código:
lista_1 = [1, 2, 3]
lista_2 = lista_1
lista_2[1] = 3
print(lista_1)
Código:
[1, 3, 3] #cuando supuestamente tendía que imprimir [1, 2, 3]
Solución:
La solución es copiar la lista y luego manipular la copia.

Método manual:

Código:
lista_a_copiar = [<algo>]
copia = []
for i in lista_a_copiar:
	copia.append(i)
Método automático:

Código:
lista_a_copiar = [<algo>]
copia = lista_a_copiar.copy()

Multiplicando listas:

Código:
lista = [0]*5
print(lista)
lista[0] = 1
print(lista)
Código:
[0, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
pero si hacen

Código:
lista = [[0]*5]*2
print(lista)
lista[0][3] = 1
print(lista)
Código:
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[0, 0, 0, 4, 0], [0, 0, 0, 4, 0]]

Tuplas:

Son como listas pero no se pueden modificar sus posiciones (no puedes hacer algo como tupla[0] = 4), esto se llama que son "inmutables". Las tuplas se pueden sumar entre sí y multiplicar por enteros de la misma forma que las listas. Son más rápidas que las listas y admiten los métodos tuple.index() y tuple.count() [buscar y explicar qué hacen forma parte del ejercicio 1 de hoy], además de obtener un elemento de una tupla por su indexación (tuple[n]).

Las tuplas van con paréntesis en lugar de corchetes. Una tupla vacía se crea:

Código:
aux = tuple()
o

Código:
aux = ()
Deben tener mucho ciudado porque una tupla de un elemento no es

Código:
aux = (9) #por ejemplo
Una tupla de un elemento se crea:
Código:
aux = (9,)
Siempre deben tener a lo menos una coma (o estar vacías) o de lo contrario en lugar de que el computador las registre como tuplas, las registrará como el tipo de datos que está dentro, en el caso del ejemplo, un entero.

También nos dan la seguridad de que en un programa largo, su valor permanecerá inmutable, pudiendo usarlas para guardar cosas que necesitemos que perduren.


Ejercicios:

1) Investiguen los siguientes métodos y funciones y explíquenlos.

list()
tuple()
string.split()
string.split()
list(string)
random.shuffle()
random.choice()
random.sample()
string.join(list)
string.join(tuple)
list.sort()
sorted(list)
list.index()
list.count()
tuple.index()
tuple.count()
list.pop()
list.reverse()
list.insert()
list.remove()

También busquen qué hace la palabra reservada "in" con listas y tuplas. ¿Sirve con strings?

2) Hacer un programa que dados los nombres de productos de un supermercado y la cantidad, indique el precio total a pagar. Mínimo 20 productos distintos como opciones para el comprador, de ellos puede elegir los que desee y en la cantidad que desee.

3) Hacer un programa que genere un tablero de n filas y m columnas tal que en todas sus posiciones haya ceros y pueda modificar el valor de uno sin afectar el resto del tablero.

 
Última edición:

Ngidol

Durmiendo en los laureles
Clase 9: diccionarios

Clase 9: diccionarios

AVISO: volvemos a ser 7, la encuesta de este tema no será válida.

Los diccionarios son estructuras de datos donde uno puede elegir la llave (o palabra clave) con la que se identifica a un determinado elemento dentro de ellos, a diferencia de las listas o tuplas donde la llave es su índice (posición según el orden de la lista). Ejemplo de un diccionario:

Código:
bulbasaur = {'tipo1':'planta', 'tipo2':'veneno', 'nivel':84}
Lo que aparece antes de los dos puntos :)) son las "llaves", y lo que aparece después, es el dato que está en esa llave. Siguiendo con el ejemplo,

Código:
print(bulbasaur['nivel'])
Código:
84
Así es como se puede conseguir un valor almacenado en un diccionario.

¿Qué cosas pueden ser llaves de un diccionario?

En el ejemplo vimos strings siendo usados como llaves, pero estas también pueden ser ints, floats, bools o tuplas, además de los ya mencionados strings.

Creando un diccionario vacío:

Código:
variable = dict()
o

Código:
variable = {}
Añadiendo elementos a un diccionario ya existente:

Para añadir un elemento a un diccionario, basta con

Código:
diccionario[llave] = elemento
Ojo, la llave que empleemos no debe ser una ya utilizada en el diccionario o en lugar de añadir los datos, estos se sustituirán por el elemento que estemos ingresando.

Problema con los diccionarios:

Los diccionarios presentan el mismo problema que las listas, al asignar un diccionario a varias variables, estos quedan conectados, para evitar esto, utilizaremos el método diccionario.copy() cuando sea necesario.

Los diccionarios no se pueden sumar o multiplicar, tampoco soportan cualquiera de las otras operaciones que vimos en la clase de ints y floats.


Ejercicios:

1) Diseñen un pokémon con un diccionario, no es necesario que sea funcional, solo que se familiaricen con los diccionarios.
2) ¿Qué hacen las funciones list(), tuple() y str() aplicadas sobre un diccionario? ¿Y la función dict() sobre alguna otra estructura de datos?
3) ¿Qué pasa si aplican la función len() a un diccionario?
4) Creen un diccionario con los primeros 20 pokémon de la pokédex. Solo debe contener la siguiente información: nº pokédex nacional, nombre, especie, altura, peso, tipos (principal y secundario), grupos huevo, hábitat y descripción (la que más les guste). ¿Qué usaron como llave y por qué?.
5) Nombre las principales ventajas de los diccionarios frente a las listas y tuplas (san google, ilumínalos!).
6) ¿Qué pasa si intentan iterar sobre un diccionario?
Es decir, hacer algo como esto:
Código:
for i in diccionario_que_defini_previamente:
    print("holi")

 
Última edición:
Estado
Cerrado para nuevas respuestas.
Arriba