Parcialito 1 (Solucion propuesta)

Ejercicio 1

Enunciado

1) Dada la siguiente función:

def mi_funcion(p,q):
    contador_1 = contador_2 = p

    while True:
        if contador_2 > q:
            contador_1 += 2
            contador_2 = p
            print()

        if contador_1 > q:
            break

        print(contador_1 , end=" ")
        contador_2 += 2
A) Mostrar la salida de ejecutar 'my_function' con p=3 q=7
B) Proponga un mejor nombre para los parámetros `p` y `q`
C) Reescribir la función anterior utilizando solo ciclos `for`

Resolucion

Item A

>>> my_function(3,7)
3 3 3
5 5 5
7 7 7

Item B

p = inicio ; q = final

Item C


In [1]:
def mi_otra_funcion(inicio,final):
    for i in range(inicio,final+1,2):
        for j in range(inicio,final+1,2):
            print(i,end=" ")
        print()

mi_otra_funcion(3,7)


3 3 3 
5 5 5 
7 7 7 

Ejercicio 2

Enunciado

2) Un crucigrama es una matriz de nxm que contiene celdas. Las celdas son tuplas de dos elementos de la forma (<Color>,<contenido>). Cada celda puede ser BLANCA o NEGRA. El contenido es una cadena, si está vacía, la celda está vacía. Un crucigrama no está correctamente llenado si:

  • Hay una celda BLANCA vacía
  • Hay una celda NEGRA llena

Escribir una función que dado un crucigrama, devuelva si está correctamente llenado.

Resolucion


In [2]:
def es_crucigrama_valido(crucigrama):
    '''Recibe un crucigrama y devuelve si esta o no correctamente llenado.
        Un crucigrama no está correctamente llenado si:
            - Hay al menos una celda BLANCA vacía
            - Hay al menos una celda NEGRA llena'''
    
    for fila in crucigrama:
        for celda in fila:
            color,contenido = celda

            if color == BLANCO and not contenido:
                return False
            if color == NEGRO and contenido:
                return False

    return True

Ejercicio 3

Enunciado

3) Escribir una función que reciba una cadena y devuelva su encriptación en formato rot13. Para encriptar una cadena con rot13 se debe reemplazar cada caracter por el caracter que se encuentra a 13 posiciones en el abecedario.

Si la cadena contiene números, caracteres especiales o mayúsculas se debe devolver una cadena vacía.

  • Ayuda: usar la constante _asciilowercase del módulo string que contiene “abcd...xyz”

Ej:

rot13(zambia) -> mnzovn
    rot13(mnzovn) -> zambia
    rot13(z4mbi4) -> “”

Resolucion


In [3]:
from string import ascii_lowercase

def encriptar(cadena):
    encriptado = []
    for c in cadena:
        if not c in ascii_lowercase:
            return ""

        i = ascii_lowercase.index(c) + 13
        i = i % len(ascii_lowercase)

        encriptado.append(ascii_lowercase[i])

    return "".join(encriptado)

print(encriptar("simonga"))
print(encriptar("fvzbatn"))
print(encriptar("Zambia"))


fvzbatn
simonga