Python
Python
Hemos utilizado la conjunción and (y), lo que significa que salir a caminar depende
del cumplimiento simultáneo de estas dos condiciones. En el lenguaje de la lógica,
tal conexión de condiciones se denomina conjunción. Y ahora otro ejemplo:
Está claro que Python debe tener operadores para construir conjunciones y disyunciones.
Sin ellos, el poder expresivo del lenguaje se debilitaría sustancialmente. Se
llaman operadores lógicos.
El operador and
Un operador de conjunción lógica en Python es la palabra and. Es un operador
binario con una prioridad inferior a la expresada por los operadores de
comparación. Nos permite codificar condiciones complejas sin el uso de
paréntesis como este:
El operador or
Un operador de disyunción es la palabra or. Es un operador binario con una
prioridad más baja que and (al igual que + en comparación con *). Su tabla de
verdad es la siguiente:
Argumento A Argumento B A or B
El operador not
Además, hay otro operador que se puede aplicar para condiciones de
construcción. Es un operador unario que realiza una negación lógica. Su
funcionamiento es simple: convierte la verdad en falso y lo falso en verdad.
Argumento not Argumento
False True
True False
# Ejemplo 1:
print(var > 0)
print(not (var <= 0))
# Ejemplo 2:
print(var != 0)
print(not (var == 0))
Observa como se han utilizado los paréntesis para codificar las expresiones - las
colocamos allí para mejorar la legibilidad.
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
Argument
~ Argumento
o
0 1
1 0
Los operadores bit a bit son más estrictos: tratan con cada bit por separado. Si
asumimos que la variable entera ocupa 64 bits (lo que es común en los sistemas
informáticos modernos), puede imaginar la operación a nivel de bits como una
evaluación de 64 veces del operador lógico para cada par de bits de los
argumentos. Su analogía es obviamente imperfecta, ya que en el mundo real
todas estas 64 operaciones se realizan al mismo tiempo (simultáneamente).
1
2
3
i = 15
j = 22
Si asumimos que los enteros se almacenan con 32 bits, la imagen a nivel de bits
de las dos variables será la siguiente:
i: 00000000000000000000000000001111
j: 00000000000000000000000000010110
Se ejecuta la asignación:
1
2
log = i and j
Estamos tratando con una conjunción lógica aquí. Vamos a trazar el curso de los
cálculos. Ambas variables i y j no son ceros, por lo que se considerará que
representan a True. Al consultar la tabla de verdad para el operador and, podemos
ver que el resultado será True. No se realizan otras operaciones.
log: True
1
2
bit = i & j
i 00000000000000000000000000001111
j 00000000000000000000000000010110
1
2
bitneg = ~i
i 00000000000000000000000000001111
bitneg = ~i 11111111111111111111111111110000
x=x&y x &= y
x=x|y x |= y
x=x^y x ^= y
Incompleto 3.3.5 ¿Cómo tratar con bits individuales?
flag_register = 0x1234
La variable almacena la información sobre varios aspectos de la operación del
sistema. Cada bit de la variable almacena un valor de si/no. También se te ha
dicho que solo uno de estos bits es tuyo - el tercero (recuerda que los bits se
numeran desde cero y el número de bits cero es el más bajo, mientras que el más
alto es el número 31). Los bits restantes no pueden cambiar, porque están
destinados a almacenar otros datos. Aquí está tu bit marcado con la letra x:
flag_register = 0000000000000000000000000000x000
1
2
3
x & 1 = x
x & 0 = 0
flag_register = 0000000000000000000000000000x000
00000000000000000000000000001000
Dicha secuencia de ceros y unos, cuya tarea es tomar el valor o cambiar los bits
seleccionados, se denomina máscara de bits.
Construyamos una máscara de bits para detectar el estado de tus bits. Debería
apuntar a el tercer bit. Ese bit tiene el peso de 2 =8. Se podría crear una máscara
3
1
2
the_mask = 8
1
2
3
4
5
if flag_register & the_mask:
# Mi bit se estableció en 1.
else:
# Mi bit se restableció a 0.
2. Reinicia tu bit - asigna un cero al bit, mientras que todos los otros bits deben
permanecer sin cambios; usemos la misma propiedad de la conjunción que antes,
pero usemos una máscara ligeramente diferente - exactamente como se muestra
a continuación:
11111111111111111111111111110111
1
2
3
flag_register = flag_register & ~the_mask
flag_register &= ~the_mask
3. Establece tu bit - asigna un 1 a tu bit, mientras que todos los bits restantes
deben permanecer sin cambios; usa la siguiente propiedad de disyunción:
1
2
3
x | 1 = 1
x | 0 = x
Ya estás listo para configurar su bit con una de las siguientes instrucciones:
1
2
3
flag_register = flag_register | the_mask
flag_register |= the_mask
4. Niega tu bit - reemplaza un 1 con un 0 y un 0 con un 1. Puedes utilizar una
propiedad interesante del operador ~x:
1
2
3
x ^ 1 = ~x
x ^ 0 = x
Niega tu bit con las siguientes instrucciones:
1
2
3
flag_register = flag_register ^ the_mask
flag_register ^= the_mask
Python ofrece otra operación relacionada con los bits individuales: shifting. Esto
se aplica solo a los valores de número entero, y no debe usar flotantes como
argumentos para ello.
12345 × 10 = 123450
12340 ÷ 10 = 1234
La computadora realiza el mismo tipo de operación, pero con una diferencia: como
dos es la base para los números binarios (no 10), desplazar un valor un bit a la
izquierda corresponde a multiplicarlo por dos; respectivamente, desplazar un
bit a la derecha es como dividir entre dos (observa que se pierde el bit más a la
derecha).
var = 17
Nota:
Priorida
Operador
d
1 ~, +, - unario
2 **
3 *, /, //, %
4 +, - binari
o
5 <<, >>
6 <, <=, >, >=
7 ==, !=
8 &
9 |
10 =, +=, -=, *=, /=, %=, &=, ^=, |=, >
>=, <<=
2. Puedes utilizar operadores bit a bit para manipular bits de datos individuales.
Los siguientes datos de muestra:
& hace un bit a bit and (y), por ejemplo, x & y = 0, el cual es 0000 0000 en
binario,
| hace un bit a bit or (o), por ejemplo, x | y = 31, el cual es 0001 1111 en
binario,
˜ hace un bit a bit not (no), por ejemplo, ˜ x = 240*, el cual es 1111 0000 en
binario,
^ hace un bit a bit xor, por ejemplo, x ^ y = 31, el cual es 0001 1111 en
binario,
>> hace un desplazamiento bit a bit a la derecha, por ejemplo, y >> 1 = 8, el
cual es 0000 1000 en binario,
<< hace un desplazamiento bit a bit a la izquierda, por ejemplo, y << 3 = , el
cual es 1000 0000 en binario.
* -16 (decimal del complemento a 2 con signo) -- lee más acerca de la
operación Complemento a dos.
Si no crees que esta sea una tarea complicada, toma un papel y escribe un
programa que:
Debes percatarte que ni siquiera tienes suficiente papel para completar la tarea.
Hasta ahora, has aprendido como declarar variables que pueden almacenar
exactamente un valor dado a la vez. Tales variables a veces se
denominan escalares por analogía con las matemáticas. Todas las variables que
has usado hasta ahora son realmente escalares.
numbers = [10, 5, 7, 2, 1]
Python ha adoptado una convención que indica que los elementos de una lista
están siempre numerados desde cero. Esto significa que el elemento
almacenado al principio de la lista tendrá el número cero. Como hay cinco
elementos en nuestra lista, al último de ellos se le asigna el número cuatro. No
olvides esto.
numbers = [10, 5, 7, 2, 1]
numbers[0] = 111
1
2
3
4
5
6
7
8
9
numbers = [10, 5, 7, 2, 1]
print("Contenido de la lista original:", numbers) # Imprimiendo
contenido de la lista original.
numbers[0] = 111
print("\nPrevio contenido de la lista:", numbers) # Imprimiendo
contenido de la lista anterior.
numbers[1] = numbers[4] # Copiando el valor del quinto elemento
al segundo elemento.
print("Nuevo contenido de la lista:", numbers) # Imprimiendo el
contenido de la lista actual.
Nota: todos los índices utilizados hasta ahora son literales. Sus valores se fijan en
el tiempo de ejecución, pero cualquier expresión también puede ser un índice.
Esto abre muchas posibilidades.
Completo 3.4.3 Acceso al contenido de las listas
1
2
print(numbers[0]) # Accediendo al primer elemento de la lista.
Suponiendo que todas las operaciones anteriores se hayan completado con éxito,
el fragmento enviará 111 a la consola.
numbers = [10, 5, 7, 2, 1]
numbers[0] = 111
sole
Contenido de la lista original: [10, 5, 7, 2, 1]
Como puedes ver en el editor, la lista también puede imprimirse como un todo -
como aquí:
1
2
print(numbers) # Imprimiendo la lista completa.
Como probablemente hayas notado antes, Python decora la output de una manera
que sugiere que todos los valores presentados forman una lista. La output del
fragmento de ejemplo anterior se ve así:
[111, 1, 7, 2, 1]
Output
La función len()
La longitud de una lista puede variar durante la ejecución. Se pueden agregar
nuevos elementos a la lista, mientras que otros pueden eliminarse de ella. Esto
significa que la lista es una entidad muy dinámica.
1
2
3
4
del numbers[1]
print(len(numbers))
print(numbers)
1
2
3
print(numbers[4])
numbers[4] = 1
numbers = [10, 5, 7, 2, 1]
numbers[0] = 111
###
Del mismo modo, el elemento con un índice igual a -2 es el anterior al último en
la lista.
Escenario
Había una vez un sombrero. El sombrero no contenía conejo, sino una lista de
cinco números: 1, 2, 3, 4, y 5.
Tu tarea es:
escribir una línea de código que solicite al usuario que reemplace el número
central en la lista con un número entero ingresado por el usuario (Paso 1)
escribir una línea de código que elimine el último elemento de la lista (Paso 2)
escribir una línea de código que imprima la longitud de la lista existente (Paso 3).
# Paso 2: escribe aquí una línea de código que elimine el último elemento de la lista.
# Paso 3: escribe aquí una línea de código que imprima la longitud de la lista existente.
print(hat_list)
lista = [1,2,3,4,5]
lista[2] = int(aux)
print(lista)
lista.pop()
print(lista)
Una función no pertenece a ningún dato - obtiene datos, puede crear nuevos
datos y (generalmente) produce un resultado.
Un método es propiedad de los datos para los que trabaja, mientras que una
función es propiedad de todo el código.
result = function(arg)
La función toma un argumento, hace algo, y devuelve un resultado.
result = data.method(arg)
Nota: el nombre del método está precedido por el nombre de los datos que posee
el método. A continuación, se agrega un punto, seguido del nombre del
método y un par de paréntesis que encierran los argumentos.
El método se comportará como una función, pero puede hacer algo más -
puede cambiar el estado interno de los datos a partir de los cuales se ha
invocado.
list.append(value)
list.insert(location, value)
el primero muestra la ubicación requerida del elemento a insertar; nota: todos los
elementos existentes que ocupan ubicaciones a la derecha del nuevo elemento
(incluido el que está en la posición indicada) se desplazan a la derecha, para hacer
espacio para el nuevo elemento;
el segundo es el elemento a insertar.
numbers = [111, 7, 2, 1]
print(len(numbers))
print(numbers)
###
numbers.append(4)
print(len(numbers))
print(numbers)
###
numbers.insert(0, 222)
print(len(numbers))
print(numbers)
numbers.insert(1, 333)
for i in range(5):
my_list.append(i + 1)
print(my_list)
my_list = [10, 1, 8, 3, 5]
total = 0
for i in range(len(my_list)):
total += my_list[i]
print(total)
Supongamos que deseas calcular la suma de todos los valores almacenados
en la lista my_list.
Pero el bucle for puede hacer mucho más. Puede ocultar todas las acciones
conectadas a la indexación de la lista y entregar todos los elementos de la lista de
manera práctica.
1
2
3
4
5
6
7
8
my_list = [10, 1, 8, 3, 5]
total = 0
for i in my_list:
total += i
print(total)
¿Qué sucede aquí?
for i in range(length // 2):
my_list[i], my_list[length - i - 1] = my_list[length - i - 1],
my_list[i]
print(my_list)
Nota:
hemos asignado la variable length a la longitud de la lista actual (esto hace
que nuestro código sea un poco más claro y más corto)
hemos preparado el bucle for para que se ejecute su cuerpo length //
2 veces (esto funciona bien para listas con longitudes pares e impares,
porque cuando la lista contiene un número impar de elementos, el del
medio permanece intacto)
hemos intercambiado el elemento i (desde el principio de la lista) por el que
tiene un índice igual a (length - i - 1) (desde el final de la lista); en nuestro
ejemplo, for i igual a 0 a la (length - i - 1) da 4; for i igual a 3, da 3 - esto es
exactamente lo que necesitábamos.
lista = [1,2,3,4,5]
aux = input("Ingrese el numero
entero ")
lista[2] = int(aux)
print(lista)
print("eliminación del último
elemento de la lista")
lista.pop()
print(lista)
print("La longitud de la lista
existente es: ", len(lista))
3.4.11 LAB Los fundamentos de
las listas: los Beatles
Escenario
Los Beatles fueron uno de los grupos de música más populares de la década de
1960 y la banda más vendida en la historia. Algunas personas los consideran el
acto más influyente de la era del rock. De hecho, se incluyeron en la compilación
de la revista Time de las 100 personas más influyentes del siglo XX.
Por cierto, ¿eres fan de los Beatles? (Los Beatles son una de las bandas favoritas
de Greg. Pero espera...¿Quién es Greg?)
# paso 1
beatles=[]
# paso 2
beatles.append("John Lennon")
beatles.append("Paul McCartney")
beatles.append("George Harrison")
# paso 3
beatles.append(n1)
beatles.append(n2)
# paso 4
beatles.pop()
beatles.pop()
# paso 5
8 10 6 2 4
8 6 10 2 4
Vamos más allá y observemos los elementos tercero y cuarto. Una vez más, esto
no es lo que se supone que es. Tenemos que intercambiarlos:
8 6 2 10 4
Ahora comprobemos los elementos cuarto y quinto. Si, ellos también están en las
posiciones equivocadas. Ocurre otro intercambio:
8 6 2 4 10
10
Observa - El 10 está en la parte superior. Podríamos decir que flotó desde el fondo
hasta la superficie, al igual que las burbujas en una copa de champán. El método
de clasificación deriva su nombre de la misma observación - se
denomina ordenamiento burbuja.
6 8 2 4 10
6 2 8 4 10
2 6 4 8 10
2 4 6 8 10
La lista ya está ordenada. No tenemos nada más que hacer. Esto es exactamente
lo que queremos.
En el editor, puedes ver un programa completo, enriquecido por una conversación con el
usuario, y que permite ingresar e imprimir elementos de la lista: El ordenamiento
burbuja - versión final interactiva.
my_list = []
swapped = True
for i in range(num):
while swapped:
swapped = False
swapped = True
print("\nOrdenada:")
print(my_list)
Como puedes ver, todas las listas tienen un método denominado sort(), que las ordena lo
más rápido posible. Ya has aprendido acerca de algunos de los métodos de lista
anteriormente, y pronto aprenderás más sobre otros.
3.5.4 RESUMEN DE SECCIÓN
1. Puedes usar el método sort() para ordenar los elementos de una lista, por
ejemplo:
1
2
3
4
5
6
lst = [5, 3, 1, 2, 4]
print(lst)
lst.sort()
print(lst) # output: [1, 2, 3, 4, 5]
2.También hay un método de lista llamado reverse(), que puedes usar para invertir
la lista, por ejemplo:
1
2
3
4
5
6
lst = [5, 3, 1, 2, 4]
print(lst)
lst.reverse()
print(lst) # output: [4, 2, 1, 3, 5]
list_1 = [1]
list_2 = list_1
list_1[0] = 2
print(list_2)
El programa:
Lee estas dos líneas una vez más - la diferencia es esencial para comprender de que vamos
a hablar a continuación.
Una rebanada es un elemento de la sintaxis de Python que permite hacer una copia nueva
de una lista, o partes de una lista.
1
2
3
4
5
list_1 = [1]
list_2 = list_1[:]
list_1[0] = 2
print(list_2)
Su output es [1].
Esta parte no visible del código descrito como [:] puede producir una lista completamente
nueva.
my_list[inicio:fin]
Como puedes ver, se asemeja a la indexación, pero los dos puntos en el interior hacen una
gran diferencia.
Una rebanada de este tipo crea una nueva lista (de destino), tomando elementos de la
lista de origen - los elementos de los índices desde el start hasta el fin fin - 1.
Nota: no hasta el fin sino hasta fin-1. Un elemento con un índice igual a fin es el primer
elemento el cual no participa en la segmentación.
Es posible utilizar valores negativos tanto para el inicio como para el fin(al igual que en la
indexación).
Echa un vistazo al fragmento:
1
2
3
4
my_list = [10, 8, 6, 4, 2]
new_list = my_list[1:3]
print(new_list)
Ejecuta el código en el editor para ver cómo Python copia la lista completa y un fragmento
de la lista. ¡Siéntete libre de experimentar!
list_1 = [1]
list_2 = list_1[:]
list_1[0] = 2
print(list_2)
my_list = [10, 8, 6, 4, 2]
new_list = my_list[1:3]
print(new_list)
3.6.3 Rebanadas – índices negativos
Observa el fragmento de código a continuación:
my_list[start:end]
Para confirmar:
1
2
3
4
my_list = [10, 8, 6, 4, 2]
new_list = my_list[1:-1]
print(new_list)
[8, 6, 4]
Output
my_list = [10, 8, 6, 4, 2]
new_list = my_list[-1:1]
print(new_list)
[]
Output
my_list[:end]
my_list[0:end]
1
2
3
4
my_list = [10, 8, 6, 4, 2]
new_list = my_list[:3]
print(new_list)
Del mismo modo, si omites el end en tu rebanada, se supone que deseas que el
segmento termine en el elemento con el índice len(my_list).
my_list[start:]
my_list[start:len(my_list)]
1
2
3
4
my_list = [10, 8, 6, 4, 2]
new_list = my_list[3:]
print(new_list)
Por lo tanto, la output es: [4, 2].
1
2
3
4
my_list = [10, 8, 6, 4, 2]
new_list = my_list[:]
print(new_list)
1
2
3
4
my_list = [10, 8, 6, 4, 2]
del my_list[1:3]
print(my_list)
1
2
3
4
my_list = [10, 8, 6, 4, 2]
del my_list[:]
print(my_list)
La lista se queda vacía y la output es: [].
Echa un vistazo:
1
2
3
4
my_list = [10, 8, 6, 4, 2]
del my_list
print(my_list)
Python ofrece dos operadores muy poderosos, capaces de revisar la lista para
verificar si un valor específico está almacenado dentro de la lista o no.
1
2
3
elem in my_list
elem not in my_list
El primero de ellos (in) verifica si un elemento dado (el argumento izquierdo) está
actualmente almacenado en algún lugar dentro de la lista (el argumento derecho) -
el operador devuelve True en este caso.
El segundo (not in) comprueba si un elemento dado (el argumento izquierdo) está
ausente en una lista - el operador devuelve True en este caso.
print(12 in my_list)
El primero de ellos (in) verifica si un elemento dado (el argumento izquierdo) está
actualmente almacenado en algún lugar dentro de la lista (el argumento derecho) - el
operador devuelve True en este caso.
El segundo (not in) comprueba si un elemento dado (el argumento izquierdo) está ausente
en una lista - el operador devuelve True en este caso.
print(5 in my_list)
print(12 in my_list)
largest = my_list[0]
for i in range(1, len(my_list)):
largest = my_list[i]
print(largest)
El código puede ser reescrito para hacer uso de la forma recién introducida del
bucle for:
Nota:
Nota:
Imagina una lista - no muy larga ni muy complicada, solo una lista simple que
contiene algunos números enteros. Algunos de estos números pueden estar
repetidos, y esta es la clave. No queremos ninguna repetición. Queremos que
sean eliminados.
Nota: Asume que la lista original está ya dentro del código - no tienes que
ingresarla desde el teclado. Por supuesto, puedes mejorar el código y agregar una
parte que pueda llevar a cabo una conversación con el usuario y obtener todos los
datos.
Sugerencia: Te recomendamos que crees una nueva lista como área de trabajo
temporal - no necesitas actualizar la lista actual.
lista = [1, 2, 3, 4, 5, 2, 4, 6, 8, 5]
lista_sin_repetidos = list(set(lista))
print(lista_sin_repetidos)
3.6.7 RESUMEN DE SECCIÓN
1
2
3
4
5
6
7
vehicles_one = ['coche', 'bicicleta', 'motor']
print(vehicles_one) # output: ['coche', 'bicicleta', 'motor']
vehicles_two = vehicles_one
del vehicles_one[0] # elimina 'coche'
print(vehicles_two) # output: ['bicicleta', 'motor']
2. Si deseas copiar una lista o parte de la lista, puedes hacerlo haciendo uso
de rebanadas:
1
2
3
4
5
colors = ['rojo', 'verde', 'naranja']
copy_whole_colors = colors[:] # copia la lista entera
copy_part_colors = colors[0:2] # copia parte de la lista
1
2
3
4
sample_list = ["A", "B", "C", "D", "E"]
new_list = sample_list[2:-1]
print(new_list) # output: ['C', 'D']
1
2
3
4
5
6
7
8
9
my_list = [1, 2, 3, 4, 5]
slice_one = my_list[2: ]
slice_two = my_list[ :2]
slice_three = my_list[-2: ]
print(slice_one) # output: [3, 4, 5]
print(slice_two) # output: [1, 2]
print(slice_three) # output: [4, 5]
1
2
3
4
5
6
7
my_list = [1, 2, 3, 4, 5]
del my_list[0:2]
print(my_list) # output: [3, 4, 5]
del my_list[:]
print(my_list) # elimina el contenido de la lista, genera: []
Un tablero de ajedrez está compuesto de filas y columnas. Hay ocho filas y ocho
columnas. Cada columna está marcada con las letras de la A a la H. Cada línea
está marcada con un número del uno al ocho.
1
2
3
4
5
row = []
for i in range(8):
row.append(WHITE_PAWN)
Crea una lista que contiene ocho elementos que representan la segunda fila del
tablero de ajedrez: la que está llena de peones (supon que WHITE_PAWN es
un símbolo predefinido que representa un peón blanco).
Comprensión de lista
El mismo efecto se puede lograr mediante una comprensión de lista, la sintaxis
especial utilizada por Python para completar o llenar listas masivas.
Una comprensión de lista es en realidad una lista, pero se creó sobre la marcha
durante la ejecución del programa, y no se describe de forma estática.
1
2
row = [WHITE_PAWN for i in range(8)]
Ejemplo #1:
1
2
squares = [x ** 2 for x in range(10)]
1
2
twos = [2 ** i for i in range(8)]
El fragmento crea un arreglo de ocho elementos que contiene las primeras ocho
potencias del numero dos (1, 2, 4, 8, 16, 32, 64, 128)
Ejemplo #3:
1
2
odds = [x for x in squares if x % 2 != 0 ]
El fragmento crea una lista con solo los elementos impares de la lista squares.
Entonces, si queremos crear una lista de listas que representan todo el tablero de
ajedrez, se puede hacer de la siguiente manera:
1
2
3
4
5
6
board = []
for i in range(8):
row = [EMPTY for i in range(8)]
board.append(row)
Nota:
la parte interior del bucle crea una fila que consta de ocho elementos (cada
uno de ellos es igual a EMPTY) y lo agrega a la lista del board;
la parte exterior se repite ocho veces;
en total, la lista board consta de 64 elementos (todos iguales a EMPTY).
Este modelo imita perfectamente el tablero de ajedrez real, que en realidad es una
lista de elementos de ocho elementos, todos ellos en filas individuales.
Resumamos nuestras observaciones:
los elementos de las filas son campos, ocho de ellos por fila;
los elementos del tablero de ajedrez son filas, ocho de ellos por tablero de
ajedrez.
board = [[EMPTY for i in range(8)] for j in range(8)]
La parte interna crea una fila, y la parte externa crea una lista de filas.
Echa un vistazo al tablero de ajedrez. Cada campo contiene un par de índices que
se deben dar para acceder al contenido del campo:
Primero, debes decidir qué tipo de datos sería adecuado para esta aplicación. En
este caso, sería mejor un float, ya que este termómetro puede medir la
temperatura con una precisión de 0.1 ℃.
Luego tomarás la decisión arbitraria de que las filas registrarán las lecturas cada
hora exactamente (por lo que la fila tendrá 24 elementos) y cada una de las filas
se asignará a un día del mes (supongamos que cada mes tiene 31 días, por lo que
necesita 31 filas). Aquí está el par apropiado de comprensiones (h es para las
horas, d para el día):
temps = [[0.0 for h in range(24)] for d in range(31)]
Toda la matriz está llena de ceros ahora. Puede suponer que se actualiza
automáticamente utilizando agentes de hardware especiales. Lo que tienes que
hacer es esperar a que la matriz se llene con las mediciones.
temps = [[0.0 for h in range(24)] for d in range(31)]
#
# La matriz se actualiza aquí.
#
total = 0.0
for day in temps:
total += day[11]
average = total / 31
print("Temperatura promedio al mediodía:", average)
Ahora encuentra la temperatura más alta durante todo el mes - analiza el código:
temps = [[0.0 for h in range(24)] for d in range(31)]
#
# La matriz se actualiza aquí.
#
highest = -100.0
for day in temps:
for temp in day:
if temp > highest:
highest = temp
print("La temperatura más alta fue:", highest)
Note:
temps = [[0.0 for h in range(24)] for d in range(31)]
#
# La matriz se actualiza aquí.
#
hot_days = 0
for day in temps:
if day[11] > 20.0:
hot_days += 1
print(hot_days, "fueron los días calurosos.")
rooms =
[[[False for r in range(20)] for f in range(15)] for t in range(3)
]
Primer paso - El tipo de elementos del arreglo. En este caso, sería un valor
Booleano (True/False).
rooms =
[[[False for r in range(20)] for f in range(15)] for t in range(3)
]
Ahora ya puedes reservar una habitación para dos recién casados: en el segundo
edificio, en el décimo piso, habitación 14
rooms[1][9][13] = True
rooms[0][4][1] = False
vacancy = 0
for room_number in range(20):
if not rooms[2][14][room_number]:
vacancy += 1
¡Felicitaciones! Has llegado al final del módulo. ¡Sigue con el buen trabajo!
Este es un ejemplo de una comprensión de lista - el código siguiente crea una lista
de cinco elementos con los primeros cinco números naturales elevados a la
potencia de 3:
3. Puedes anidar tantas listas en las listas como desee y, por lo tanto, crear listas
n-dimensionales, por ejemplo, arreglos de tres, cuatro o incluso sesenta y cuatro
dimensiones. Por ejemplo:
Ahora estás listo para tomar la Prueba del Módulo, que te ayudará a evaluar lo
que has aprendido hasta ahora.
¡Buena suerte!