Taller 4. Programación
Taller 4. Programación
Unidad 22
Q1.
El documento HTML consta de muchas etiquetas, como se muestra a continuación. Escriba
un programa que coincida con las etiquetas de documentos HTML.
TIP
En Python, el método find() se usa para ubicar la posición inicial de la subcadena.
Encuentre '<' y '>' para distinguir las etiquetas de documentos HTML.
Si la etiqueta distinguida incluye '/', entonces es una etiqueta abierta y, si no, es una
etiqueta cerrada. Verifique la coincidencia de la etiqueta HTML de una manera similar al
uso de una pila para hacer coincidir los paréntesis.
text= input('Ingrese la cadena del documento HTML: ')
#SOLUCIÓN 1.
start=text.find('<')
while start != -1:
end= text.find('>',start +1)
tag=text[start:end+1]
print(tag,end=' ')
start=text.find('<',end+1)
#SOLUCIÓN 2.
import re
def encontrar_etiquetas(html):
patron = re.compile("<.*?>")
etiquetas = patron.findall(html)
return etiquetas
html = text
encontrar_etiquetas(html)
class Deque:
def __init__(self):
self.queue =[]
def is_empty(self):
return True if len(self.queue)==0 else False
def add_first(self,item):
return self.queue.insert(0,item)
def remove_first(self):
return None if self.is_empty() else self.queue.pop(0)
def add_last(self,item):
return self.queue.append(item)
def remove_last(self):
return None if self.is_empty() else self.queue.pop()
lista=Deque()
lista.add_first(1)
print("Adición al inicio")
print(lista.queue)
lista.add_first(2)
print(lista.queue)
lista.add_first(3)
print(lista.queue)
lista.add_first(4)
print(lista.queue)
print(" ")
print("Eliminar al inicio")
lista.remove_first()
print(lista.queue)
lista.remove_first()
print(lista.queue)
print(" ")
print("Adición al final")
lista.add_last(3)
print(lista.queue)
lista.add_last(4)
print(lista.queue)
print(" ")
print("Remover al final")
lista.remove_last()
print(lista.queue)
lista.remove_last()
print(lista.queue)
Adición al inicio
[1]
[2, 1]
[3, 2, 1]
[4, 3, 2, 1]
Eliminar al inicio
[3, 2, 1]
[2, 1]
Adición al final
[2, 1, 3]
[2, 1, 3, 4]
Remover al final
[2, 1, 3]
[2, 1]
Unidad 24
Q1.
Escriba un programa para contar cuántas veces se usó una palabra específica en la oración
ingresada por el usuario.
En la oración ingresada por el usuario, una palabra se distingue por la presencia de
espacios.
• Use la función input().split() para crear la lista S que tiene cada cadena como su
elemento.
• Use la función input() para recibir la palabra que el usuario buscará y guárdela en x.
• La función word_count() recibe S y x como parámetros y proporciona un retorno
contando cuántas x están presentes en la S.
def word_count(lista,letra):
contador=0
for i in lista:
if i==letra:
contador+=1
return contador
Ingrese una oración: the quick brown fox jumps over the lazy dog
Ingrese la letra a buscar: the
En la lista S, the aparece 2 veces.
Unidad 25
Q1.
Si se proporciona una lista ordenada de números y un número entero aleatorio x,
implemente la función que devuelve la ubicación del índice donde se insertará x. Sin
embargo, S debe ser una lista ordenada incluso después de insertar x.
nums=[10,20,40,50,60,80]
x=int(input('Ingrese un número para ser insertado: '))
pos=insertar(nums,x)
print(f'x={x} dese ser insertado en la posición {pos}.')
nums.insert(pos,x)
print(nums)
#repaso
from random import randint
low,high = 0, len(nums)
while low<high:
mid = (high+low)//2
if nums[mid] == x:
return mid
elif nums[mid] > x:
high = mid - 1
else:
low = mid + 1
return -1
print('El número generado es:'+ str(numeroGenerado))
print(buscarNumero(myArray,numeroGenerado))
Unidad 26
Q1.
Cree un convertidor que convierta números arábigos en números romanos utilizando la
tabla hash que se proporciona a continuación.
def arabic_to_roman(number):
roman_dict = {1000:'M', 900:'CM', 500:'D', 400:'CD',
100:'C', 90:'XC', 50:'L', 40:'XL',
10:'X', 9:'IX', 5:'V', 4:'IV', 1:'I'}
romano_ans = ''
for value, numero in sorted(roman_dict.items(), reverse=True):
while number >= value:
romano_ans += numero
number -= value
return romano_ans
print(numero,":",arabic_to_roman(numero))
CAPITULO 5
Unidad 27
Q1.
¿Cuántas operaciones de intercambio se han ejecutado en el proceso de ordenamiento de
burbujas siguiente?
def burbuja(S):
n = len(S)
contador=0
for i in range(n):
contador+=1
for j in range(n - 1):
if S[j] > S[j + 1]:
S[j], S[j + 1] = S[j + 1], S[j]
return print("Operaciones de comparación:",contador)
lista=[5,4,3,7,9,6,10,8]
burbuja(lista)
print(lista)
Operaciones de comparación: 8
[3, 4, 5, 6, 7, 8, 9, 10]
Q2.
¿Cuántas operaciones de comparación se han ejecutado en el proceso de ordenamiento por
inserción que se muestra a continuación?
def clasificación_por_inserción2(S):
n = len(S)
for i in range(1, n): #i= 1,2,3,4,5
x = S[i]
j = i - 1 #s[j=0,1,2,3,4 este es el indice
contador=0
while j >= 0 and S[j] > x: #
contador+=1
S[j + 1] = S[j]
j -= 1
S[j + 1] = x
contador+=1
return print ("Operaciones de comparación:",contador)
S = [50, 30, 40, 10, 20]
clasificación_por_inserción2(S)
print(S)
Operaciones de comparación: 4
[10, 20, 30, 40, 50]
Q3.
El uso de un algoritmo de clasificación permite determinar fácilmente si se trata de un
anagrama o no.
• Cree una función que evalúe los anagramas utilizando la función sorted()
incorporada de Python.
• Modificar la función selection_sort2() para crear una función que determine los
anagramas.
• Modificar la función insertion_sort2() para crear una función que determine el
anagrama.
def organizar(palabra):
organizada_palabra=sorted(palabra)
return (organizada_palabra)
print(is_anagram("listen","silent"))
print(is_anagram("anagram","nagaram"))
print(is_anagram("listen","silence"))
print(is_anagram("anagram","anagrams"))
True
True
False
False
def burbuja(S):
n = len(S)
for i in range(n):
for j in range(n -1):
if S[j] > S[j +1]:
S[j], S[j + 1] = S[j + 1], S[j] #🔵
print(is_anagram("listen","silent"))
print(is_anagram("anagram","nagaram"))
print(is_anagram("listen","silence"))
print(is_anagram("anagram","anagrams"))
a=list("silent")
b=list("anagrams")
print(burbuja(a))
print(burbuja(b))
True
True
True
True
None
None
Unidad 28
Q1.
Dadas N listas ordenadas como entrada, escribe un programa que las fusione en una lista
ordenada.
def divide_venceras(lista):
if len(lista)>1:
mitad=len(lista)//2
primera_mitad=lista[:mitad]
segunda_mitad=lista[mitad:]
divide_venceras(primera_mitad)
divide_venceras(segunda_mitad)
i=0
j=0
k=0
while i<len(primera_mitad):
lista[k]=primera_mitad[i]
i+=1
k+=1
while j<len(segunda_mitad):
lista[k]=segunda_mitad[j]
j+=1
k+=1
return(lista)
def convertidor(s):
manzana = [elemento[0] for elemento in s]
s=manzana
return(s)
def fusion_multiple(n):
t=divide_venceras(n)
l=convertidor(t)
return(l)
ordenada = fusion_multiple(lista_de_numeros)
print("Fusionada dentro : ", ordenada)
Unidad 29
Q1.
Escriba un algoritmo que encuentre el Kº elemento mayor, dados N elementos
desordenados. Después de resolver el problema con los dos métodos anteriores, analiza
qué algoritmo es más eficiente.
def ordenamiento_rapido1(S, bajo, alto):
if bajo < alto:
print(S)
punto_pivote = particion1(S, bajo, alto)
ordenamiento_rapido1(S, bajo, punto_pivote - 1)
ordenamiento_rapido1(S, punto_pivote + 1, alto)
def Num_max(lista):
organizador=ordenamiento_rapido1(lista, 0, len(lista) - 1)
return(lista[-1])
S = [7,3,1,4,10,2,11,5,6,9,8]
print("El número mayor es",Num_max(S))
import time
print("El tiempo que demora el programa {0:0.3f}".format(time.time()))
[7, 3, 1, 4, 10, 2, 11, 5, 6, 9, 8]
[7, 3, 1, 4, 10, 2, 11, 5, 6, 9, 8]
[7, 3, 1, 4, 6, 2, 11, 5, 10, 9, 8]
[7, 3, 1, 4, 6, 2, 5, 11, 10, 9, 8]
[5, 3, 1, 4, 6, 2, 7, 11, 10, 9, 8]
[5, 3, 1, 4, 6, 2, 7, 11, 10, 9, 8]
[5, 3, 1, 4, 2, 6, 7, 11, 10, 9, 8]
[2, 3, 1, 4, 5, 6, 7, 11, 10, 9, 8]
[2, 3, 1, 4, 5, 6, 7, 11, 10, 9, 8]
[2, 1, 3, 4, 5, 6, 7, 11, 10, 9, 8]
[1, 2, 3, 4, 5, 6, 7, 11, 10, 9, 8]
[1, 2, 4, 3, 5, 6, 7, 11, 10, 9, 8]
[1, 2, 4, 3, 5, 6, 7, 11, 10, 9, 8]
[1, 2, 4, 3, 5, 6, 7, 8, 10, 9, 11]
[1, 2, 4, 3, 5, 6, 7, 8, 10, 9, 11]
[1, 2, 4, 3, 5, 6, 7, 8, 10, 9, 11]
El número mayor es 11
El tiempo que demora el programa 1680898878.877
def Num_max2(lista):
organizador=ordenamiento_rapido2(lista, 0, len(lista) - 1)
return(lista[-1])
S = [7,3,1,4,10,2,11,5,6,9,8]
print("El número mayor es",Num_max2(S))
import time
print("El tiempo que demora el programa :
{0:0.3f}".format(time.time()))
CAPITULO 6
Unidad 30
Q1.
En el problema del intercambio de monedas, supongamos que hay una moneda de 400
wones.
Si es así, escriba el resultado de cómo el algoritmo coin_change() determinará el cambio de
la moneda de 800 wones.
Respuesta
1.
valor a cambiar < monedas(mas_grande), 800 < 500=False
cambio=[monedas(mas_grande),500] valor a cambiar-cambio= 800-500 = 300
2.
valor a cambiar < monedas(mas_grande), 300 < 500=True mas_grande+=1 mas_grande=1
3.
valor a cambiar < monedas(mas_grande), 300 < 400=True mas_grande+=1 mas_grande=2
4.
valor a cambiar < monedas(mas_grande), 300 < 100=False
cambio=[monedas(mas_grande),500,monedas(mas_grande),100]...[ 500+100] valor a
cambiar-cambio= 300-100 = 200
5.
valor a cambiar < monedas(mas_grande), 200 < 100=False
cambio=[monedas(mas_grande),500,monedas(mas_grande),100,monedas(mas_grande),10
0]...[ 500+100+100] valor a cambiar-cambio= 200-100 = 100
6.
valor a cambiar < monedas(mas_grande), 100 < 100=False
cambio=[monedas(mas_grande),500,monedas(mas_grande),100,monedas(mas_grande),10
0,monedas(mas_grande),100]...[ 500+100+100+100] valor a cambiar-cambio= 100-100 = 0
7.
Valor a cambiar=0 return cambio cambio=[500+100+100+100]
def coin_change(coins, amount):
changes = []
largest = 0
while(amount > 0):
if amount < coins[largest]:
largest +=1
else:
changes.append(coins[largest])
amount -=coins[largest]
return changes
Ingrese la cantidad:800
Ingrese la cantidad: 800
[500, 100, 100, 100] 4
Q2.
Suponga que el número de monedas en el problema de intercambio de monedas no es
infinito. Por ejemplo, si tiene las siguientes monedas en su billetera, ¿cómo debe distribuir
710 won como cambio?
def coin_change(coins, amount):
llavescoins = [500, 100, 50, 10]
changes = []
largest = 0
while(amount > 0):
if amount < llavescoins[largest]:
largest +=1
elif coins[llavescoins[largest]]>0:
changes.append(llavescoins[largest])
amount -=llavescoins[largest]
coins[llavescoins[largest]]-=1
else:
largest +=1
return changes
monedas={500:1,100:1,50:3,10:2}
amount = int(input('Ingrese la cantidad del cambio que necesita:'))
changes = coin_change(monedas, amount)
print("Estas son las monedas que debe devolver:",changes,
len(changes))
Q2.
Dada la cantidad de monedas y la cantidad de cambio, encuentre la cantidad mínima de
monedas que puede devolver como cambio.
def coin_change(coins, amount):
llavescoins = [500, 100, 50, 10]
changes = []
largest = 0
while(amount > 0):
if amount < llavescoins[largest]:
largest +=1
elif coins[llavescoins[largest]]>0:
changes.append(llavescoins[largest])
amount -=llavescoins[largest]
coins[llavescoins[largest]]-=1
else:
largest +=1
return changes
monedas={500:1,100:1,50:3,10:2}
amount = int(input('Ingrese la cantidad del cambio que necesita:'))
changes = coin_change(monedas, amount)
print("La cantidad minima de monedas que debe devolver es de
",len(changes),"monedas")